Browse Source

messages to non-existant dos rerouted to handles

John Loehrlein 17 years ago
parent
commit
19efb2d55e
1 changed files with 17 additions and 2 deletions
  1. 17 2
      direct/src/distributed/ClientRepositoryBase.py

+ 17 - 2
direct/src/distributed/ClientRepositoryBase.py

@@ -555,6 +555,7 @@ class ClientRepositoryBase(ConnectionRepository):
         else:
         else:
             # This object has been fully generated.  It's OK to update.
             # This object has been fully generated.  It's OK to update.
             self.__doUpdate(doId, di, ovUpdated)
             self.__doUpdate(doId, di, ovUpdated)
+            
 
 
     def __doUpdate(self, doId, di, ovUpdated):
     def __doUpdate(self, doId, di, ovUpdated):
         # Find the DO
         # Find the DO
@@ -563,8 +564,22 @@ class ClientRepositoryBase(ConnectionRepository):
             # Let the dclass finish the job
             # Let the dclass finish the job
             do.dclass.receiveUpdate(do, di)
             do.dclass.receiveUpdate(do, di)
         elif not ovUpdated:
         elif not ovUpdated:
-            self.notify.warning(
-                "Asked to update non-existent DistObj " + str(doId))
+            # this next bit is looking for friend handles so that if you get an update 
+            # for an avatar that isn't in your doId2do table but there is a 
+            # friend handle for that object then it's messages will be forwarded to that 
+            # object. We are currently using that for whisper echoing
+            # if you need a more general perpose system consider registering proxy objects on
+            # a dict and adding the friend handles to that dict when they are created
+            # then change/remove the old method. I didn't do that because I couldn't think
+            # of a use for it. -JML
+            handle = self.identifyAvatar(doId)
+            if handle:
+                dclass = self.dclassesByName[handle.dclassName]
+                dclass.receiveUpdate(handle, di)
+                
+            else:
+                self.notify.warning(
+                    "Asked to update non-existent DistObj " + str(doId))
             
             
     def __doUpdateOwner(self, doId, di):
     def __doUpdateOwner(self, doId, di):
         ovObj = self.doId2ownerView.get(doId)
         ovObj = self.doId2ownerView.get(doId)