A Fix for p2p messages

This commit is contained in:
Josh Yelon 2005-03-01 18:35:47 +00:00
parent c5737877bd
commit ac5fb48042

View File

@ -40,12 +40,11 @@ class ServerRepository:
self.ClientObjects = {} self.ClientObjects = {}
self.DOIDnext = 1 self.DOIDnext = 1
self.DOIDrange = 1000000 self.DOIDrange = 1000000
self.DOIDtoClients = {} self.DOIDtoClient = {}
self.DOIDtoZones = {} self.DOIDtoZones = {}
self.DOIDtoDClass = {} self.DOIDtoDClass = {}
self.ZonesToClients = {} self.ZonesToClients = {}
self.ZonetoDOIDs = {} self.ZonetoDOIDs = {}
self.RemovedDOIDs = []
self.dcFile = DCFile() self.dcFile = DCFile()
self.dcSuffix = '' self.dcSuffix = ''
self.readDCFile() self.readDCFile()
@ -278,7 +277,8 @@ class ServerRepository:
else: else:
self.sendToZoneExcept(self.DOIDtoZones[doid], datagram, connection) self.sendToZoneExcept(self.DOIDtoZones[doid], datagram, connection)
elif (dcfield.isP2p()): elif (dcfield.isP2p()):
self.cw.send(datagram, self.DOIDtoClients[doid]) doidbase = (doid / self.DOIDrange) * self.DOIDrange
self.cw.send(datagram, self.DOIDtoClient[doidbase])
else: else:
self.notify.warning( self.notify.warning(
"Message is not broadcast, p2p, or broadcast+p2p") "Message is not broadcast, p2p, or broadcast+p2p")
@ -321,13 +321,9 @@ class ServerRepository:
def sendDOIDrange(self, connection): def sendDOIDrange(self, connection):
# reuse DOID assignments if we can # reuse DOID assignments if we can
if len(self.RemovedDOIDs) > 0: id = self.DOIDnext + self.DOIDrange
id = self.RemovedDOIDs[0] self.DOIDnext = self.DOIDnext + self.DOIDrange
self.RemovedDOIDs.remove(id) self.DOIDtoClient[id] = connection
else:
id = self.DOIDnext + self.DOIDrange
self.DOIDnext = self.DOIDnext + self.DOIDrange
self.DOIDtoClients[id] = connection
self.ClientDOIDbase[connection] = id self.ClientDOIDbase[connection] = id
datagram = NetDatagram() datagram = NetDatagram()
datagram.addUint16(CLIENT_SET_DOID_RANGE) datagram.addUint16(CLIENT_SET_DOID_RANGE)
@ -341,8 +337,7 @@ class ServerRepository:
# the disconnected clients objects # the disconnected clients objects
def handleClientDisconnect(self, connection): def handleClientDisconnect(self, connection):
if (self.ClientIP.has_key(connection)): if (self.ClientIP.has_key(connection)):
self.RemovedDOIDs.append(self.ClientDOIDbase[connection]) del self.DOIDtoClient[self.ClientDOIDbase[connection]]
del self.DOIDtoClients[self.ClientDOIDbase[connection]]
for zone in self.ClientZones[connection]: for zone in self.ClientZones[connection]:
if len(self.ZonesToClients[zone]) == 1: if len(self.ZonesToClients[zone]) == 1:
del self.ZonesToClients[zone] del self.ZonesToClients[zone]
@ -361,7 +356,6 @@ class ServerRepository:
del self.ClientZones[connection] del self.ClientZones[connection]
del self.ClientDOIDbase[connection] del self.ClientDOIDbase[connection]
del self.ClientObjects[connection] del self.ClientObjects[connection]
self.RemovedDOIDs.sort()
return None return None
# client told us it's zone(s), store information # client told us it's zone(s), store information