scope -> context
This commit is contained in:
parent
f9527b4f44
commit
d5d97fb009
|
|
@ -19,11 +19,11 @@ from direct.showbase.PythonUtil import report
|
|||
class InterestState:
|
||||
StateActive = 'Active'
|
||||
StatePendingDel = 'PendingDel'
|
||||
def __init__(self, desc, state, scope, event, parentId, zoneIdList,
|
||||
def __init__(self, desc, state, context, event, parentId, zoneIdList,
|
||||
eventCounter, auto=False):
|
||||
self.desc = desc
|
||||
self.state = state
|
||||
self.scope = scope
|
||||
self.context = context
|
||||
# We must be ready to keep track of multiple events. If somebody
|
||||
# requested an interest to be removed and we get a second request
|
||||
# for removal of the same interest before we get a response for the
|
||||
|
|
@ -52,8 +52,8 @@ class InterestState:
|
|||
def isPendingDelete(self):
|
||||
return self.state == InterestState.StatePendingDel
|
||||
def __repr__(self):
|
||||
return 'InterestState(desc=%s, state=%s, scope=%s, event=%s, parentId=%s, zoneIdList=%s)' % (
|
||||
self.desc, self.state, self.scope, self.events, self.parentId, self.zoneIdList)
|
||||
return 'InterestState(desc=%s, state=%s, context=%s, event=%s, parentId=%s, zoneIdList=%s)' % (
|
||||
self.desc, self.state, self.context, self.events, self.parentId, self.zoneIdList)
|
||||
|
||||
class InterestHandle:
|
||||
"""This class helps to ensure that valid handles get passed in to DoInterestManager funcs"""
|
||||
|
|
@ -68,8 +68,8 @@ class InterestHandle:
|
|||
def __repr__(self):
|
||||
return '%s(%s)' % (self.__class__.__name__, self._id)
|
||||
|
||||
# scope value for interest changes that have no complete event
|
||||
NO_SCOPE = 0
|
||||
# context value for interest changes that have no complete event
|
||||
NO_CONTEXT = 0
|
||||
|
||||
class DoInterestManager(DirectObject.DirectObject):
|
||||
"""
|
||||
|
|
@ -89,9 +89,9 @@ class DoInterestManager(DirectObject.DirectObject):
|
|||
# high bit is reserved for server interests
|
||||
_HandleMask = 0x7FFF
|
||||
|
||||
# 'scope' refers to a single request to change an interest set
|
||||
_ScopeIdSerialNum = 100
|
||||
_ScopeIdMask = 0x3FFFFFFF # avoid making Python create a long
|
||||
# 'context' refers to a single request to change an interest set
|
||||
_ContextIdSerialNum = 100
|
||||
_ContextIdMask = 0x3FFFFFFF # avoid making Python create a long
|
||||
|
||||
_interests = {}
|
||||
if __debug__:
|
||||
|
|
@ -108,8 +108,8 @@ class DoInterestManager(DirectObject.DirectObject):
|
|||
self._removeInterestEvent = uniqueName('DoInterestManager-Remove')
|
||||
self._noNewInterests = False
|
||||
self._completeDelayedCallback = None
|
||||
# keep track of request scopes that have not completed
|
||||
self._outstandingScopes = set()
|
||||
# keep track of request contexts that have not completed
|
||||
self._outstandingContexts = set()
|
||||
self._completeEventCount = ScratchPad(num=0)
|
||||
self._allInterestsCompleteCallbacks = []
|
||||
|
||||
|
|
@ -137,7 +137,7 @@ class DoInterestManager(DirectObject.DirectObject):
|
|||
|
||||
def resetInterestStateForConnectionLoss(self):
|
||||
DoInterestManager._interests.clear()
|
||||
self._outstandingScopes = set()
|
||||
self._outstandingContexts = set()
|
||||
self._completeEventCount = ScratchPad(num=0)
|
||||
if __debug__:
|
||||
self._addDebugInterestHistory("RESET", "", 0, 0, 0, [])
|
||||
|
|
@ -175,20 +175,20 @@ class DoInterestManager(DirectObject.DirectObject):
|
|||
'' % (parentId, parent.__class__.__name__))
|
||||
|
||||
if auto:
|
||||
scopeId = 0
|
||||
contextId = 0
|
||||
event = None
|
||||
else:
|
||||
scopeId = self._getNextScopeId()
|
||||
self._outstandingScopes.add(scopeId)
|
||||
contextId = self._getNextContextId()
|
||||
self._outstandingContexts.add(contextId)
|
||||
if event is None:
|
||||
event = self._getAnonymousEvent('addInterest')
|
||||
DoInterestManager._interests[handle] = InterestState(
|
||||
description, InterestState.StateActive, scopeId, event, parentId, zoneIdList, self._completeEventCount)
|
||||
description, InterestState.StateActive, contextId, event, parentId, zoneIdList, self._completeEventCount)
|
||||
if self.__verbose():
|
||||
print 'CR::INTEREST.addInterest(handle=%s, parentId=%s, zoneIdList=%s, description=%s, event=%s, auto=%s)' % (
|
||||
handle, parentId, zoneIdList, description, event, auto)
|
||||
if not auto:
|
||||
self._sendAddInterest(handle, scopeId, parentId, zoneIdList, description)
|
||||
self._sendAddInterest(handle, contextId, parentId, zoneIdList, description)
|
||||
if event:
|
||||
messenger.send(self._getAddInterestEvent(), [event])
|
||||
assert self.printInterestsIfDebug()
|
||||
|
|
@ -230,11 +230,11 @@ class DoInterestManager(DirectObject.DirectObject):
|
|||
if auto:
|
||||
self._considerRemoveInterest(handle)
|
||||
else:
|
||||
scopeId = self._getNextScopeId()
|
||||
intState.scope = scopeId
|
||||
contextId = self._getNextContextId()
|
||||
intState.context = contextId
|
||||
if event is not None:
|
||||
intState.addEvent(event)
|
||||
self._sendRemoveInterest(handle, scopeId)
|
||||
self._sendRemoveInterest(handle, contextId)
|
||||
if event is None:
|
||||
self._considerRemoveInterest(handle)
|
||||
if self.__verbose():
|
||||
|
|
@ -274,18 +274,19 @@ class DoInterestManager(DirectObject.DirectObject):
|
|||
description = DoInterestManager._interests[handle].desc
|
||||
|
||||
# are we overriding an existing change?
|
||||
if DoInterestManager._interests[handle].scope != NO_SCOPE:
|
||||
if DoInterestManager._interests[handle].context != NO_CONTEXT:
|
||||
DoInterestManager._interests[handle].clearEvents()
|
||||
|
||||
scopeId = self._getNextScopeId()
|
||||
DoInterestManager._interests[handle].scope = scopeId
|
||||
contextId = self._getNextContextId()
|
||||
DoInterestManager._interests[handle].context = contextId
|
||||
DoInterestManager._interests[handle].parentId = parentId
|
||||
DoInterestManager._interests[handle].zoneIdList = zoneIdList
|
||||
DoInterestManager._interests[handle].addEvent(event)
|
||||
|
||||
if self.__verbose():
|
||||
print 'CR::INTEREST.alterInterest(handle=%s, parentId=%s, zoneIdList=%s, description=%s, event=%s)' % (
|
||||
handle, parentId, zoneIdList, description, event)
|
||||
self._sendAddInterest(handle, scopeId, parentId, zoneIdList, description, action='modify')
|
||||
self._sendAddInterest(handle, contextId, parentId, zoneIdList, description, action='modify')
|
||||
exists = True
|
||||
assert self.printInterestsIfDebug()
|
||||
else:
|
||||
|
|
@ -332,15 +333,15 @@ class DoInterestManager(DirectObject.DirectObject):
|
|||
'interest %s already in use' % handle)
|
||||
DoInterestManager._HandleSerialNum = handle
|
||||
return DoInterestManager._HandleSerialNum
|
||||
def _getNextScopeId(self):
|
||||
scopeId = DoInterestManager._ScopeIdSerialNum
|
||||
def _getNextContextId(self):
|
||||
contextId = DoInterestManager._ContextIdSerialNum
|
||||
while True:
|
||||
scopeId = (scopeId + 1) & DoInterestManager._ScopeIdMask
|
||||
# skip over the 'no scope' id
|
||||
if scopeId != NO_SCOPE:
|
||||
contextId = (contextId + 1) & DoInterestManager._ContextIdMask
|
||||
# skip over the 'no context' id
|
||||
if contextId != NO_CONTEXT:
|
||||
break
|
||||
DoInterestManager._ScopeIdSerialNum = scopeId
|
||||
return DoInterestManager._ScopeIdSerialNum
|
||||
DoInterestManager._ContextIdSerialNum = contextId
|
||||
return DoInterestManager._ContextIdSerialNum
|
||||
|
||||
def _considerRemoveInterest(self, handle):
|
||||
"""
|
||||
|
|
@ -351,7 +352,7 @@ class DoInterestManager(DirectObject.DirectObject):
|
|||
if DoInterestManager._interests.has_key(handle):
|
||||
if DoInterestManager._interests[handle].isPendingDelete():
|
||||
# make sure there is no pending event for this interest
|
||||
if DoInterestManager._interests[handle].scope == NO_SCOPE:
|
||||
if DoInterestManager._interests[handle].context == NO_CONTEXT:
|
||||
assert len(DoInterestManager._interests[handle].events) == 0
|
||||
del DoInterestManager._interests[handle]
|
||||
|
||||
|
|
@ -362,11 +363,11 @@ class DoInterestManager(DirectObject.DirectObject):
|
|||
return 1 # for assert
|
||||
|
||||
def _addDebugInterestHistory(self, action, description, handle,
|
||||
scopeId, parentId, zoneIdList):
|
||||
contextId, parentId, zoneIdList):
|
||||
if description is None:
|
||||
description = ''
|
||||
DoInterestManager._debug_interestHistory.append(
|
||||
(action, description, handle, scopeId, parentId, zoneIdList))
|
||||
(action, description, handle, contextId, parentId, zoneIdList))
|
||||
DoInterestManager._debug_maxDescriptionLen = max(
|
||||
DoInterestManager._debug_maxDescriptionLen, len(description))
|
||||
|
||||
|
|
@ -374,18 +375,18 @@ class DoInterestManager(DirectObject.DirectObject):
|
|||
print "***************** Interest History *************"
|
||||
format = '%9s %' + str(DoInterestManager._debug_maxDescriptionLen) + 's %6s %6s %9s %s'
|
||||
print format % (
|
||||
"Action", "Description", "Handle", "Scope", "ParentId",
|
||||
"Action", "Description", "Handle", "Context", "ParentId",
|
||||
"ZoneIdList")
|
||||
for i in DoInterestManager._debug_interestHistory:
|
||||
print format % tuple(i)
|
||||
print "Note: interests with a Scope of 0 do not get" \
|
||||
print "Note: interests with a Context of 0 do not get" \
|
||||
" done/finished notices."
|
||||
|
||||
def printInterestSets(self):
|
||||
print "******************* Interest Sets **************"
|
||||
format = '%6s %' + str(DoInterestManager._debug_maxDescriptionLen) + 's %10s %5s %9s %9s %10s'
|
||||
print format % (
|
||||
"Handle", "Description", "State", "Scope",
|
||||
"Handle", "Description", "State", "Context",
|
||||
"ParentId", "ZoneIdList", "Event")
|
||||
for id, state in DoInterestManager._interests.items():
|
||||
if len(state.events) == 0:
|
||||
|
|
@ -394,7 +395,7 @@ class DoInterestManager(DirectObject.DirectObject):
|
|||
event = state.events[0]
|
||||
else:
|
||||
event = state.events
|
||||
print format % (id, state.desc, state.state, state.scope,
|
||||
print format % (id, state.desc, state.state, state.context,
|
||||
state.parentId, state.zoneIdList, event)
|
||||
print "************************************************"
|
||||
|
||||
|
|
@ -402,7 +403,7 @@ class DoInterestManager(DirectObject.DirectObject):
|
|||
self.printInterestHistory()
|
||||
self.printInterestSets()
|
||||
|
||||
def _sendAddInterest(self, handle, scopeId, parentId, zoneIdList, description,
|
||||
def _sendAddInterest(self, handle, contextId, parentId, zoneIdList, description,
|
||||
action=None):
|
||||
"""
|
||||
Part of the new otp-server code.
|
||||
|
|
@ -419,7 +420,7 @@ class DoInterestManager(DirectObject.DirectObject):
|
|||
if action is None:
|
||||
action = 'add'
|
||||
self._addDebugInterestHistory(
|
||||
action, description, handle, scopeId, parentId, zoneIdList)
|
||||
action, description, handle, contextId, parentId, zoneIdList)
|
||||
if parentId == 0:
|
||||
DoInterestManager.notify.error(
|
||||
'trying to set interest to invalid parent: %s' % parentId)
|
||||
|
|
@ -427,7 +428,7 @@ class DoInterestManager(DirectObject.DirectObject):
|
|||
# Add message type
|
||||
datagram.addUint16(CLIENT_ADD_INTEREST)
|
||||
datagram.addUint16(handle)
|
||||
datagram.addUint32(scopeId)
|
||||
datagram.addUint32(contextId)
|
||||
datagram.addUint32(parentId)
|
||||
if isinstance(zoneIdList, types.ListType):
|
||||
vzl = list(zoneIdList)
|
||||
|
|
@ -439,7 +440,7 @@ class DoInterestManager(DirectObject.DirectObject):
|
|||
datagram.addUint32(zoneIdList)
|
||||
self.send(datagram)
|
||||
|
||||
def _sendRemoveInterest(self, handle, scopeId):
|
||||
def _sendRemoveInterest(self, handle, contextId):
|
||||
"""
|
||||
handle is a client-side created number that refers to
|
||||
a set of interests. The same handle number doesn't
|
||||
|
|
@ -452,13 +453,13 @@ class DoInterestManager(DirectObject.DirectObject):
|
|||
# Add message type
|
||||
datagram.addUint16(CLIENT_REMOVE_INTEREST)
|
||||
datagram.addUint16(handle)
|
||||
if scopeId != 0:
|
||||
datagram.addUint32(scopeId)
|
||||
if contextId != 0:
|
||||
datagram.addUint32(contextId)
|
||||
self.send(datagram)
|
||||
if __debug__:
|
||||
state = DoInterestManager._interests[handle]
|
||||
self._addDebugInterestHistory(
|
||||
"remove", state.desc, handle, scopeId,
|
||||
"remove", state.desc, handle, contextId,
|
||||
state.parentId, state.zoneIdList)
|
||||
|
||||
def cleanupWaitAllInterestsClosed(self):
|
||||
|
|
@ -472,16 +473,16 @@ class DoInterestManager(DirectObject.DirectObject):
|
|||
"""
|
||||
assert DoInterestManager.notify.debugCall()
|
||||
handle = di.getUint16()
|
||||
scopeId = di.getUint32()
|
||||
contextId = di.getUint32()
|
||||
if self.__verbose():
|
||||
print 'CR::INTEREST.interestDone(handle=%s)' % handle
|
||||
DoInterestManager.notify.debug(
|
||||
"handleInterestDoneMessage--> Received handle %s, scope %s" % (
|
||||
handle, scopeId))
|
||||
"handleInterestDoneMessage--> Received handle %s, context %s" % (
|
||||
handle, contextId))
|
||||
eventsToSend = []
|
||||
# if the scope matches, send out the event
|
||||
if scopeId == DoInterestManager._interests[handle].scope:
|
||||
DoInterestManager._interests[handle].scope = NO_SCOPE
|
||||
# if the context matches, send out the event
|
||||
if contextId == DoInterestManager._interests[handle].context:
|
||||
DoInterestManager._interests[handle].context = NO_CONTEXT
|
||||
# the event handlers may call back into the interest manager. Send out
|
||||
# the events after we're once again in a stable state.
|
||||
#DoInterestManager._interests[handle].sendEvents()
|
||||
|
|
@ -489,12 +490,12 @@ class DoInterestManager(DirectObject.DirectObject):
|
|||
DoInterestManager._interests[handle].clearEvents()
|
||||
else:
|
||||
DoInterestManager.notify.warning(
|
||||
"handleInterestDoneMessage--> handle: %s: Expecting scope %s, got %s" % (
|
||||
handle, DoInterestManager._interests[handle].scope, scopeId))
|
||||
"handleInterestDoneMessage--> handle: %s: Expecting context %s, got %s" % (
|
||||
handle, DoInterestManager._interests[handle].context, contextId))
|
||||
if __debug__:
|
||||
state = DoInterestManager._interests[handle]
|
||||
self._addDebugInterestHistory(
|
||||
"finished", state.desc, handle, scopeId, state.parentId,
|
||||
"finished", state.desc, handle, contextId, state.parentId,
|
||||
state.zoneIdList)
|
||||
self._considerRemoveInterest(handle)
|
||||
for event in eventsToSend:
|
||||
|
|
|
|||
Loading…
Reference in New Issue