本文整理汇总了Python中pyndn.interest.Interest.setInterestLifetimeMilliseconds方法的典型用法代码示例。如果您正苦于以下问题:Python Interest.setInterestLifetimeMilliseconds方法的具体用法?Python Interest.setInterestLifetimeMilliseconds怎么用?Python Interest.setInterestLifetimeMilliseconds使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类pyndn.interest.Interest
的用法示例。
在下文中一共展示了Interest.setInterestLifetimeMilliseconds方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: _initialTimeOut
# 需要导入模块: from pyndn.interest import Interest [as 别名]
# 或者: from pyndn.interest.Interest import setInterestLifetimeMilliseconds [as 别名]
def _initialTimeOut(self, interest):
"""
Initial sync interest timeout, which means there are no other publishers
yet.
"""
if not self._enabled:
# Ignore callbacks after the application calls shutdown().
return
logging.getLogger(__name__).info("initial sync timeout")
logging.getLogger(__name__).info("no other people")
self._sequenceNo += 1
if self._sequenceNo != 0:
# Since there were no other users, we expect sequence no 0.
raise RuntimeError(
"ChronoSync: sequenceNo_ is not the expected value of 0 for first use.")
tempContent = sync_state_pb2.SyncStateMsg()
content = getattr(tempContent, "ss").add()
content.name = self._applicationDataPrefixUri
content.type = SyncState_UPDATE
content.seqno.seq = self._sequenceNo
content.seqno.session = self._sessionNo
self._update(getattr(tempContent, "ss"))
self._onInitialized()
name = Name(self._applicationBroadcastPrefix)
name.append(self._digestTree.getRoot())
retryInterest = Interest(name)
retryInterest.setInterestLifetimeMilliseconds(self._syncLifetime)
self._face.expressInterest(retryInterest, self._onData, self._syncTimeout)
logging.getLogger(__name__).info("Syncinterest expressed:")
logging.getLogger(__name__).info("%s", name.toUri())
示例2: __init__
# 需要导入模块: from pyndn.interest import Interest [as 别名]
# 或者: from pyndn.interest.Interest import setInterestLifetimeMilliseconds [as 别名]
def __init__(self, onReceivedSyncState, onInitialized,
applicationDataPrefix, applicationBroadcastPrefix, sessionNo, face,
keyChain, certificateName, syncLifetime, onRegisterFailed):
self._onReceivedSyncState = onReceivedSyncState
self._onInitialized = onInitialized
self._applicationDataPrefixUri = applicationDataPrefix.toUri()
self._applicationBroadcastPrefix = Name(applicationBroadcastPrefix)
self._sessionNo = sessionNo
self._face = face
self._keyChain = keyChain
self._certificateName = Name(certificateName)
self._syncLifetime = syncLifetime
self._contentCache = MemoryContentCache(face)
self._digestLog = [] # of _DigestLogEntry
self._digestTree = DigestTree()
self._sequenceNo = -1
self._enabled = True
emptyContent = SyncStateMsg()
# Use getattr to avoid pylint errors.
self._digestLog.append(self._DigestLogEntry("00", getattr(emptyContent, "ss")))
# Register the prefix with the contentCache_ and use our own onInterest
# as the onDataNotFound fallback.
self._contentCache.registerPrefix(
self._applicationBroadcastPrefix, onRegisterFailed, self._onInterest)
interest = Interest(self._applicationBroadcastPrefix)
interest.getName().append("00")
interest.setInterestLifetimeMilliseconds(1000)
interest.setMustBeFresh(True)
face.expressInterest(interest, self._onData, self._initialTimeOut)
logging.getLogger(__name__).info("initial sync expressed")
logging.getLogger(__name__).info("%s", interest.getName().toUri())
示例3: _onData
# 需要导入模块: from pyndn.interest import Interest [as 别名]
# 或者: from pyndn.interest.Interest import setInterestLifetimeMilliseconds [as 别名]
def _onData(self, interest, data):
"""
Process Sync Data.
"""
if not self._enabled:
# Ignore callbacks after the application calls shutdown().
return
logging.getLogger(__name__).info(
"Sync ContentObject received in callback")
logging.getLogger(__name__).info(
"name: %s", data.getName().toUri())
# TODO: Check if this works in Python 3.
tempContent = SyncStateMsg()
#pylint: disable=E1103
tempContent.ParseFromString(data.getContent().toBytes())
#pylint: enable=E1103
content = getattr(tempContent, "ss")
if self._digestTree.getRoot() == "00":
isRecovery = True
#processing initial sync data
self._initialOndata(content)
else:
self._update(content)
if (interest.getName().size() ==
self._applicationBroadcastPrefix.size() + 2):
# Assume this is a recovery interest.
isRecovery = True
else:
isRecovery = False
# Send the interests to fetch the application data.
syncStates = []
for i in range(len(content)):
syncState = content[i]
# Only report UPDATE sync states.
if syncState.type == SyncState_UPDATE:
if len(syncState.application_info) > 0:
applicationInfo = Blob(syncState.application_info, True)
else:
applicationInfo = Blob()
syncStates.append(self.SyncState(
syncState.name, syncState.seqno.session,
syncState.seqno.seq, applicationInfo))
try:
self._onReceivedSyncState(syncStates, isRecovery)
except:
logging.exception("Error in onReceivedSyncState")
name = Name(self._applicationBroadcastPrefix)
name.append(self._digestTree.getRoot())
syncInterest = Interest(name)
syncInterest.setInterestLifetimeMilliseconds(self._syncLifetime)
self._face.expressInterest(syncInterest, self._onData, self._syncTimeout)
logging.getLogger(__name__).info("Syncinterest expressed:")
logging.getLogger(__name__).info("%s", name.toUri())
示例4: _registerPrefixHelper
# 需要导入模块: from pyndn.interest import Interest [as 别名]
# 或者: from pyndn.interest.Interest import setInterestLifetimeMilliseconds [as 别名]
def _registerPrefixHelper(
self, registeredPrefixId, prefix, onInterest, onRegisterFailed, flags,
wireFormat):
"""
Do the work of registerPrefix to register with NDNx once we have an
_ndndId.
:param int registeredPrefixId: The
_RegisteredPrefix.getNextRegisteredPrefixId() which registerPrefix got
so it could return it to the caller. If this is 0, then don't add to
_registeredPrefixTable (assuming it has already been done).
"""
# Create a ForwardingEntry.
# Note: ndnd ignores any freshness that is larger than 3600 seconds and
# sets 300 seconds instead. To register "forever", (=2000000000 sec),
# the freshness period must be omitted.
forwardingEntry = ForwardingEntry()
forwardingEntry.setAction("selfreg")
forwardingEntry.setPrefix(prefix)
forwardingEntry.setForwardingFlags(flags)
content = forwardingEntry.wireEncode(wireFormat)
# Set the ForwardingEntry as the content of a Data packet and sign.
data = Data()
data.setContent(content)
# Set the name to a random value so that each request is unique.
nonce = bytearray(4)
for i in range(len(nonce)):
nonce[i] = _systemRandom.randint(0, 0xff)
data.getName().append(nonce)
# The ndnd ignores the signature, so set to blank values.
data.getSignature().getKeyLocator().setType(
KeyLocatorType.KEY_LOCATOR_DIGEST)
data.getSignature().getKeyLocator().setKeyData(
Blob(bytearray(32), False))
data.getSignature().setSignature(Blob(bytearray(128), False))
encodedData = data.wireEncode(wireFormat)
# Create an interest where the name has the encoded Data packet.
interestName = Name().append("ndnx").append(self._ndndId).append(
"selfreg").append(encodedData)
interest = Interest(interestName)
interest.setInterestLifetimeMilliseconds(4000.0)
interest.setScope(1)
encodedInterest = interest.wireEncode(wireFormat)
if registeredPrefixId != 0:
# Save the onInterest callback and send the registration interest.
self._registeredPrefixTable.append(Node._RegisteredPrefix(
registeredPrefixId, prefix, onInterest))
response = Node._RegisterResponse(
self, prefix, onInterest, onRegisterFailed, flags, wireFormat, False)
self.expressInterest(
interest, response.onData, response.onTimeout, wireFormat)
示例5: _nfdRegisterPrefix
# 需要导入模块: from pyndn.interest import Interest [as 别名]
# 或者: from pyndn.interest.Interest import setInterestLifetimeMilliseconds [as 别名]
def _nfdRegisterPrefix(
self, registeredPrefixId, prefix, onInterest, onRegisterFailed, flags,
commandKeyChain, commandCertificateName, face):
"""
Do the work of registerPrefix to register with NFD.
:param int registeredPrefixId: The getNextEntryId() which registerPrefix
got so it could return it to the caller. If this is 0, then don't add
to _registeredPrefixTable (assuming it has already been done).
"""
if commandKeyChain == None:
raise RuntimeError(
"registerPrefix: The command KeyChain has not been set. You must call setCommandSigningInfo.")
if commandCertificateName.size() == 0:
raise RuntimeError(
"registerPrefix: The command certificate name has not been set. You must call setCommandSigningInfo.")
controlParameters = ControlParameters()
controlParameters.setName(prefix)
controlParameters.setForwardingFlags(flags)
commandInterest = Interest()
if self.isLocal():
commandInterest.setName(Name("/localhost/nfd/rib/register"))
# The interest is answered by the local host, so set a short timeout.
commandInterest.setInterestLifetimeMilliseconds(2000.0)
else:
commandInterest.setName(Name("/localhop/nfd/rib/register"))
# The host is remote, so set a longer timeout.
commandInterest.setInterestLifetimeMilliseconds(4000.0)
# NFD only accepts TlvWireFormat packets.
commandInterest.getName().append(controlParameters.wireEncode(TlvWireFormat.get()))
self.makeCommandInterest(
commandInterest, commandKeyChain, commandCertificateName,
TlvWireFormat.get())
if registeredPrefixId != 0:
interestFilterId = 0
if onInterest != None:
# registerPrefix was called with the "combined" form that includes
# the callback, so add an InterestFilterEntry.
interestFilterId = self.getNextEntryId()
self.setInterestFilter(
interestFilterId, InterestFilter(prefix), onInterest, face)
self._registeredPrefixTable.append(Node._RegisteredPrefix(
registeredPrefixId, prefix, interestFilterId))
# Send the registration interest.
response = Node._RegisterResponse(
self, prefix, onInterest, onRegisterFailed, flags,
TlvWireFormat.get(), True, face)
self.expressInterest(
self.getNextEntryId(), commandInterest, response.onData,
response.onTimeout, TlvWireFormat.get(), face)
示例6: _sendRecovery
# 需要导入模块: from pyndn.interest import Interest [as 别名]
# 或者: from pyndn.interest.Interest import setInterestLifetimeMilliseconds [as 别名]
def _sendRecovery(self, syncDigest):
"""
Send Recovery Interest.
"""
logging.getLogger(__name__).info("unknown digest: ")
name = Name(self._applicationBroadcastPrefix)
name.append("recovery").append(syncDigest)
interest = Interest(name)
interest.setInterestLifetimeMilliseconds(self._syncLifetime)
self._face.expressInterest(interest, self._onData, self._syncTimeout)
logging.getLogger(__name__).info("Recovery Syncinterest expressed:")
logging.getLogger(__name__).info("%s", name.toUri())
示例7: _nfdRegisterPrefix
# 需要导入模块: from pyndn.interest import Interest [as 别名]
# 或者: from pyndn.interest.Interest import setInterestLifetimeMilliseconds [as 别名]
def _nfdRegisterPrefix(
self, registeredPrefixId, prefix, onInterest, onRegisterFailed,
onRegisterSuccess, registrationOptions, commandKeyChain,
commandCertificateName, face):
"""
Do the work of registerPrefix to register with NFD.
:param int registeredPrefixId: The getNextEntryId() which registerPrefix
got so it could return it to the caller. If this is 0, then don't add
to _registeredPrefixTable (assuming it has already been done).
"""
if commandKeyChain == None:
raise RuntimeError(
"registerPrefix: The command KeyChain has not been set. You must call setCommandSigningInfo.")
if commandCertificateName.size() == 0:
raise RuntimeError(
"registerPrefix: The command certificate name has not been set. You must call setCommandSigningInfo.")
controlParameters = ControlParameters()
controlParameters.setName(prefix)
controlParameters.setForwardingFlags(registrationOptions)
if (registrationOptions.getOrigin() != None and
registrationOptions.getOrigin() >= 0):
controlParameters.setOrigin(registrationOptions.getOrigin())
# Remove the origin value from the flags since it is not used to encode.
controlParameters.getForwardingFlags().setOrigin(None)
commandInterest = Interest()
commandInterest.setCanBePrefix(True)
if self.isLocal():
commandInterest.setName(Name("/localhost/nfd/rib/register"))
# The interest is answered by the local host, so set a short timeout.
commandInterest.setInterestLifetimeMilliseconds(2000.0)
else:
commandInterest.setName(Name("/localhop/nfd/rib/register"))
# The host is remote, so set a longer timeout.
commandInterest.setInterestLifetimeMilliseconds(4000.0)
# NFD only accepts TlvWireFormat packets.
commandInterest.getName().append(controlParameters.wireEncode(TlvWireFormat.get()))
self.makeCommandInterest(
commandInterest, commandKeyChain, commandCertificateName,
TlvWireFormat.get())
# Send the registration interest.
response = Node._RegisterResponse(
prefix, onRegisterFailed, onRegisterSuccess, registeredPrefixId, self,
onInterest, face)
self.expressInterest(
self.getNextEntryId(), commandInterest, response.onData,
response.onTimeout, None, TlvWireFormat.get(), face)
示例8: publishNextSequenceNo
# 需要导入模块: from pyndn.interest import Interest [as 别名]
# 或者: from pyndn.interest.Interest import setInterestLifetimeMilliseconds [as 别名]
def publishNextSequenceNo(self, applicationInfo = None):
"""
Increment the sequence number, create a sync message with the new
sequence number and publish a data packet where the name is
the applicationBroadcastPrefix + the root digest of the current digest
tree. Then add the sync message to the digest tree and digest log which
creates a new root digest. Finally, express an interest for the next sync
update with the name applicationBroadcastPrefix + the new root digest.
After this, your application should publish the content for the new
sequence number. You can get the new sequence number with getSequenceNo().
Note: Your application must call processEvents. Since processEvents
modifies the internal ChronoSync data structures, your application should
make sure that it calls processEvents in the same thread as
publishNextSequenceNo() (which also modifies the data structures).
:param Blob applicationInfo: (optional) This appends applicationInfo to
the content of the sync messages. This same info is provided to the
receiving application in the SyncState state object provided to the
onReceivedSyncState callback.
"""
applicationInfo = (applicationInfo if isinstance(applicationInfo, Blob)
else Blob(applicationInfo))
self._sequenceNo += 1
syncMessage = SyncStateMsg()
content = getattr(syncMessage, "ss").add()
content.name = self._applicationDataPrefixUri
content.type = SyncState_UPDATE
content.seqno.seq = self._sequenceNo
content.seqno.session = self._sessionNo
if not applicationInfo.isNull() and applicationInfo.size() > 0:
content.application_info = applicationInfo.toBytes()
self._broadcastSyncState(self._digestTree.getRoot(), syncMessage)
if not self._update(getattr(syncMessage, "ss")):
# Since we incremented the sequence number, we expect there to be a
# new digest log entry.
raise RuntimeError(
"ChronoSync: update did not create a new digest log entry")
# TODO: Should we have an option to not express an interest if this is the
# final publish of the session?
interest = Interest(self._applicationBroadcastPrefix)
interest.getName().append(self._digestTree.getRoot())
interest.setInterestLifetimeMilliseconds(self._syncLifetime)
self._face.expressInterest(interest, self._onData, self._syncTimeout)
示例9: _onInterest
# 需要导入模块: from pyndn.interest import Interest [as 别名]
# 或者: from pyndn.interest.Interest import setInterestLifetimeMilliseconds [as 别名]
def _onInterest(self, prefix, interest, face, interestFilterId, filter):
"""
Process the sync interest from the applicationBroadcastPrefix. If we
can't satisfy the interest, add it to the pending interest table in
the _contentCache so that a future call to contentCacheAdd may satisfy it.
"""
if not self._enabled:
# Ignore callbacks after the application calls shutdown().
return
# Search if the digest already exists in the digest log.
logging.getLogger(__name__).info("Sync Interest received in callback.")
logging.getLogger(__name__).info("%s", interest.getName().toUri())
syncDigest = interest.getName().get(
self._applicationBroadcastPrefix.size()).toEscapedString()
if interest.getName().size() == self._applicationBroadcastPrefix.size() + 2:
# Assume this is a recovery interest.
syncDigest = interest.getName().get(
self._applicationBroadcastPrefix.size() + 1).toEscapedString()
logging.getLogger(__name__).info("syncDigest: %s", syncDigest)
if (interest.getName().size() == self._applicationBroadcastPrefix.size() + 2 or
syncDigest == "00"):
# Recovery interest or newcomer interest.
self._processRecoveryInterest(interest, syncDigest, face)
else:
self._contentCache.storePendingInterest(interest, face)
if syncDigest != self._digestTree.getRoot():
index = self._logFind(syncDigest)
if index == -1:
# To see whether there is any data packet coming back, wait
# 2 seconds using the Interest timeout mechanism.
# TODO: Are we sure using a "/local/timeout" interest is the
# best future call approach?
timeout = Interest(Name("/local/timeout"))
timeout.setInterestLifetimeMilliseconds(2000)
self._face.expressInterest(
timeout, self._dummyOnData,
self._makeJudgeRecovery(syncDigest, face))
logging.getLogger(__name__).info("set timer recover")
else:
# common interest processing
self._processSyncInterest(index, syncDigest, face)
示例10: _onInterest
# 需要导入模块: from pyndn.interest import Interest [as 别名]
# 或者: from pyndn.interest.Interest import setInterestLifetimeMilliseconds [as 别名]
def _onInterest(self, prefix, interest, transport, registerPrefixId):
if not self._enabled:
# Ignore callbacks after the application calls shutdown().
return
# Search if the digest already exists in the digest log.
logging.getLogger(__name__).info("Sync Interest received in callback.")
logging.getLogger(__name__).info("%s", interest.getName().toUri())
syncDigest = interest.getName().get(
self._applicationBroadcastPrefix.size()).toEscapedString()
if interest.getName().size() == self._applicationBroadcastPrefix.size() + 2:
# Assume this is a recovery interest.
syncDigest = interest.getName().get(
self._applicationBroadcastPrefix.size() + 1).toEscapedString()
logging.getLogger(__name__).info("syncDigest: %s", syncDigest)
if (interest.getName().size() == self._applicationBroadcastPrefix.size() + 2 or
syncDigest == "00"):
# Recovery interest or newcomer interest.
self._processRecoveryInterest(interest, syncDigest, transport)
else:
# Save the unanswered interest in our local pending interest table.
self._pendingInterestTable.append(self._PendingInterest(
interest, transport))
if syncDigest != self._digestTree.getRoot():
index = self._logFind(syncDigest)
if index == -1:
# To see whether there is any data packet coming back, wait
# 2 seconds using the Interest timeout mechanism.
# TODO: Are we sure using a "/local/timeout" interest is the
# best future call approach?
timeout = Interest(Name("/local/timeout"))
timeout.setInterestLifetimeMilliseconds(2000)
self._face.expressInterest(
timeout, self._dummyOnData,
self._makeJudgeRecovery(syncDigest, transport))
logging.getLogger(__name__).info("set timer recover")
else:
# common interest processing
self._processSyncInterest(index, syncDigest, transport)
示例11: _sendSyncInterest
# 需要导入模块: from pyndn.interest import Interest [as 别名]
# 或者: from pyndn.interest.Interest import setInterestLifetimeMilliseconds [as 别名]
def _sendSyncInterest(self):
"""
Send the sync interest for full synchronization. This forms the interest
name: /<sync-prefix>/<own-IBLT>. This cancels any pending sync interest
we sent earlier on the face.
"""
# Debug: Implement stopping an ongoing fetch.
## If we send two sync interest one after the other
## since there is no new data in the network yet,
## when data is available it may satisfy both of them
#if self._fetcher != None:
# self._fetcher.stop()
# Sync Interest format for full sync: /<sync-prefix>/<ourLatestIBF>
syncInterestName = Name(self._syncPrefix)
# Append our latest IBLT.
syncInterestName.append(self._iblt.encode())
self._outstandingInterestName = syncInterestName
# random1 is from 0.0 to 1.0.
random1 = self._systemRandom.random()
# Get a jitter of +/- syncInterestLifetime_ * 0.2 .
jitter = (random1 - 0.5) * (self._syncInterestLifetime * 0.2)
self._face.callLater(
self._syncInterestLifetime / 2 + jitter, self._sendSyncInterest)
syncInterest = Interest(syncInterestName)
syncInterest.setInterestLifetimeMilliseconds(self._syncInterestLifetime)
syncInterest.refreshNonce()
SegmentFetcher.fetch(
self._face, syncInterest, None,
lambda content: self._onSyncData(content, syncInterest),
FullPSync2017._onError)
logging.getLogger(__name__).debug("sendFullSyncInterest, nonce: " +
syncInterest.getNonce().toHex() + ", hash: " +
str(abs(hash(syncInterestName))))
示例12: _nfdRegisterPrefix
# 需要导入模块: from pyndn.interest import Interest [as 别名]
# 或者: from pyndn.interest.Interest import setInterestLifetimeMilliseconds [as 别名]
def _nfdRegisterPrefix(
self, registeredPrefixId, prefix, onInterest, onRegisterFailed, flags,
commandKeyChain, commandCertificateName):
"""
Do the work of registerPrefix to register with NFD.
:param int registeredPrefixId: The
_RegisteredPrefix.getNextRegisteredPrefixId() which registerPrefix got
so it could return it to the caller. If this is 0, then don't add to
_registeredPrefixTable (assuming it has already been done).
"""
if commandKeyChain == None:
raise RuntimeError(
"registerPrefix: The command KeyChain has not been set. You must call setCommandSigningInfo.")
if commandCertificateName.size() == 0:
raise RuntimeError(
"registerPrefix: The command certificate name has not been set. You must call setCommandSigningInfo.")
controlParameters = ControlParameters()
controlParameters.setName(prefix)
commandInterest = Interest(Name("/localhost/nfd/rib/register"))
# NFD only accepts TlvWireFormat packets.
commandInterest.getName().append(controlParameters.wireEncode(TlvWireFormat.get()))
self.makeCommandInterest(
commandInterest, commandKeyChain, commandCertificateName,
TlvWireFormat.get())
# The interest is answered by the local host, so set a short timeout.
commandInterest.setInterestLifetimeMilliseconds(2000.0)
if registeredPrefixId != 0:
# Save the onInterest callback and send the registration interest.
self._registeredPrefixTable.append(Node._RegisteredPrefix(
registeredPrefixId, prefix, onInterest))
response = Node._RegisterResponse(
self, prefix, onInterest, onRegisterFailed, flags,
TlvWireFormat.get(), True)
self.expressInterest(
commandInterest, response.onData, response.onTimeout,
TlvWireFormat.get())
示例13: _syncTimeout
# 需要导入模块: from pyndn.interest import Interest [as 别名]
# 或者: from pyndn.interest.Interest import setInterestLifetimeMilliseconds [as 别名]
def _syncTimeout(self, interest):
"""
Sync interest time out. If the interest is the static one send again.
"""
if not self._enabled:
# Ignore callbacks after the application calls shutdown().
return
logging.getLogger(__name__).info("Sync Interest time out.")
logging.getLogger(__name__).info(
"Sync Interest name: %s", interest.getName().toUri())
component = interest.getName().get(4).toEscapedString()
if component == self._digestTree.getRoot():
name = Name(interest.getName())
retryInterest = Interest(interest.getName())
retryInterest.setInterestLifetimeMilliseconds(self._syncLifetime)
self._face.expressInterest(
retryInterest, self._onData, self._syncTimeout)
logging.getLogger(__name__).info("Syncinterest expressed:")
logging.getLogger(__name__).info("%s", name.toUri())
示例14: publishNextSequenceNo
# 需要导入模块: from pyndn.interest import Interest [as 别名]
# 或者: from pyndn.interest.Interest import setInterestLifetimeMilliseconds [as 别名]
def publishNextSequenceNo(self):
"""
Increment the sequence number, create a sync message with the new
sequence number and publish a data packet where the name is
the applicationBroadcastPrefix + the root digest of the current digest
tree. Then add the sync message to the digest tree and digest log which
creates a new root digest. Finally, express an interest for the next sync
update with the name applicationBroadcastPrefix + the new root digest.
After this, your application should publish the content for the new
sequence number. You can get the new sequence number with getSequenceNo().
Note: Your application must call processEvents. Since processEvents
modifies the internal ChronoSync data structures, your application should
make sure that it calls processEvents in the same thread as
publishNextSequenceNo() (which also modifies the data structures).
"""
self._sequenceNo += 1
syncMessage = sync_state_pb2.SyncStateMsg()
content = getattr(syncMessage, "ss").add()
content.name = self._applicationDataPrefixUri
content.type = SyncState_UPDATE
content.seqno.seq = self._sequenceNo
content.seqno.session = self._sessionNo
self._broadcastSyncState(self._digestTree.getRoot(), syncMessage)
if not self._update(getattr(syncMessage, "ss")):
# Since we incremented the sequence number, we expect there to be a
# new digest log entry.
raise RuntimeError(
"ChronoSync: update did not create a new digest log entry")
# TODO: Should we have an option to not express an interest if this is the
# final publish of the session?
interest = Interest(self._applicationBroadcastPrefix)
interest.getName().append(self._digestTree.getRoot())
interest.setInterestLifetimeMilliseconds(self._syncLifetime)
self._face.expressInterest(interest, self._onData, self._syncTimeout)
示例15: _getExpressInterestArgs
# 需要导入模块: from pyndn.interest import Interest [as 别名]
# 或者: from pyndn.interest.Interest import setInterestLifetimeMilliseconds [as 别名]
def _getExpressInterestArgs(self, interestOrName, arg2, arg3, arg4, arg5):
"""
This is a protected helper method to resolve the different overloaded
forms of Face.expressInterest and return the arguments to pass to
Node.expressInterest. This is necessary to prepare arguments such as
interestCopy before dispatching to Node.expressInterest.
:return: A dictionary with the following keys: 'pendingInterestId',
'interestCopy', 'onData', 'onTimeout' and 'wireFormat'.
:rtype: dict
"""
# expressInterest(interest, onData)
# expressInterest(interest, onData, wireFormat)
# expressInterest(interest, onData, onTimeout)
# expressInterest(interest, onData, onTimeout, wireFormat)
if type(interestOrName) is Interest:
# Node.expressInterest requires a copy of the interest.
interestCopy = Interest(interestOrName)
onData = arg2
if isinstance(arg3, WireFormat):
onTimeout = None
wireFormat = arg3
else:
onTimeout = arg3
wireFormat = arg4
else:
# The first argument is a name. Make the interest from the name and
# possible template.
# expressInterest(name, interestTemplate, onData)
# expressInterest(name, interestTemplate, onData, wireFormat)
# expressInterest(name, interestTemplate, onData, onTimeout)
# expressInterest(name, interestTemplate, onData, onTimeout, wireFormat)
if type(arg2) is Interest:
template = arg2
# Copy the template.
interestCopy = Interest(template)
interestCopy.setName(interestOrName)
onData = arg3
if isinstance(arg4, WireFormat):
onTimeout = None
wireFormat = arg4
else:
onTimeout = arg4
wireFormat = arg5
# expressInterest(name, onData)
# expressInterest(name, onData, wireFormat)
# expressInterest(name, onData, onTimeout)
# expressInterest(name, onData, onTimeout, wireFormat)
else:
interestCopy = Interest(interestOrName)
# Set a default interest lifetime.
interestCopy.setInterestLifetimeMilliseconds(4000.0)
onData = arg2
if isinstance(arg3, WireFormat):
onTimeout = None
wireFormat = arg3
else:
onTimeout = arg3
wireFormat = arg4
if wireFormat == None:
# Don't use a default argument since getDefaultWireFormat can change.
wireFormat = WireFormat.getDefaultWireFormat()
return { 'pendingInterestId': self._node.getNextEntryId(),
'interestCopy': interestCopy, 'onData': onData, 'onTimeout': onTimeout,
'wireFormat': wireFormat }