Browse Source

*** empty log message ***

Jesse Schell 25 years ago
parent
commit
eb199b3f47
1 changed files with 78 additions and 85 deletions
  1. 78 85
      direct/src/distributed/ClientDistUpdate.py

+ 78 - 85
direct/src/distributed/ClientDistUpdate.py

@@ -1,85 +1,78 @@
-"""ClientDistUpdate module: contains the ClientDistUpdate class"""
-
-import DirectNotifyGlobal
-import Datagram
-from MsgTypes import *
-
-class ClientDistUpdate:
-    notify = DirectNotifyGlobal.directNotify.newCategory("ClientDistUpdate")
-
-    def __init__(self, cdc, dcField):
-        self.cdc = cdc
-        self.field = dcField
-        self.number = dcField.getNumber()
-        self.name = dcField.getName()
-        self.types = []
-        self.divisors = []
-        self.deriveTypesFromParticle(dcField)
-        # Figure out our function pointer
-        exec("import " + cdc.name)
-        try:
-            self.func = eval(cdc.name + "." + cdc.name + "." + self.name)
-        except:
-            ClientDistUpdate.notify.warning(cdc.name + "." + self.name +
-                                            " does not exist")
-            self.func = None
-        return None
-
-    def deriveTypesFromParticle(self, dcField):
-        dcFieldAtomic = dcField.asAtomicField()
-        dcFieldMolecular = dcField.asMolecularField()
-        if dcFieldAtomic:
-            for i in range(0, dcFieldAtomic.getNumElements()):
-                self.types.append(dcFieldAtomic.getElementType(i))
-                self.divisors.append(dcFieldAtomic.getElementDivisor(i))
-        elif dcFieldMolecular:
-            for i in range(0, dcFieldMolecular.getNumAtomics()):
-                componentField = dcFieldMolecular.getAtomic(i)
-                for j in range(0, componentField.getNumElements()):
-                    self.types.append(componentField.getElementType(j))
-                    self.divisors.append(componentField.getElementDivisor(j))
-        else:
-            ClientDistUpdate.notify.error("field is neither atom nor molecule")
-        return None
-
-    def updateField(self, cdc, do, di):
-
-        #func = eval(cdc.name + "." + cdc.name + "." + self.name)
-        #print("Calling: " + cdc.name + "." + cdc.name + "." + self.name +
-        #      " for do " + str(do.getDoId()))
-
-        # Get the arguments into a list
-        args = self.extractArgs(di)
-
-        # Apply the function to the object with the arguments
-        apply(self.func, [do] + args)
-
-        return None
-
-    def extractArgs(self, di):
-        args = []
-        assert(len(self.types) == len(self.divisors))
-        numTypes = len(self.types)
-        for i in range(numTypes):
-            args.append(di.getArg(self.types[i], self.divisors[i]))
-        return args
-
-    def addArgs(self, datagram, args):
-        # Add the args to the datagram
-        numElems = len(args)
-        assert (numElems == len(self.types) == len(self.divisors))
-        for i in range(0, numElems):
-            datagram.putArg(args[i], self.types[i], self.divisors[i])
-    
-    def sendUpdate(self, cr, do, args):
-        datagram = Datagram.Datagram()
-        # Add message type
-        datagram.addUint16(CLIENT_OBJECT_UPDATE_FIELD)
-        # Add the DO id
-        datagram.addUint32(do.doId)
-        # Add the field id
-        datagram.addUint16(self.number)
-        # Add the arguments
-        self.addArgs(datagram, args)
-        # send the datagram
-        cr.send(datagram)
+"""ClientDistUpdate module: contains the ClientDistUpdate class"""
+
+import DirectNotifyGlobal
+import Datagram
+from MsgTypes import *
+
+class ClientDistUpdate:
+    notify = DirectNotifyGlobal.directNotify.newCategory("ClientDistUpdate")
+
+    def __init__(self, cdc, dcField):
+        self.cdc = cdc
+        self.field = dcField
+        self.number = dcField.getNumber()
+        self.name = dcField.getName()
+        self.types = []
+        self.divisors = []
+        self.deriveTypesFromParticle(dcField)
+        # Figure out our function pointer
+        exec("import " + cdc.name)
+        try:
+            self.func = eval(cdc.name + "." + cdc.name + "." + self.name)
+        except:
+            ClientDistUpdate.notify.warning(cdc.name + "." + self.name +
+                                            " does not exist")
+            self.func = None
+        return None
+
+    def deriveTypesFromParticle(self, dcField):
+        dcFieldAtomic = dcField.asAtomicField()
+        dcFieldMolecular = dcField.asMolecularField()
+        if dcFieldAtomic:
+            for i in range(0, dcFieldAtomic.getNumElements()):
+                self.types.append(dcFieldAtomic.getElementType(i))
+                self.divisors.append(dcFieldAtomic.getElementDivisor(i))
+        elif dcFieldMolecular:
+            for i in range(0, dcFieldMolecular.getNumAtomics()):
+                componentField = dcFieldMolecular.getAtomic(i)
+                for j in range(0, componentField.getNumElements()):
+                    self.types.append(componentField.getElementType(j))
+                    self.divisors.append(componentField.getElementDivisor(j))
+        else:
+            ClientDistUpdate.notify.error("field is neither atom nor molecule")
+        return None
+
+    def updateField(self, cdc, do, di):
+        # Get the arguments into a list
+        args = self.extractArgs(di)
+        # Apply the function to the object with the arguments
+        apply(self.func, [do] + args)
+        return None
+
+    def extractArgs(self, di):
+        args = []
+        assert(len(self.types) == len(self.divisors))
+        numTypes = len(self.types)
+        for i in range(numTypes):
+            args.append(di.getArg(self.types[i], self.divisors[i]))
+        return args
+
+    def addArgs(self, datagram, args):
+        # Add the args to the datagram
+        numElems = len(args)
+        assert (numElems == len(self.types) == len(self.divisors))
+        for i in range(0, numElems):
+            datagram.putArg(args[i], self.types[i], self.divisors[i])
+    
+    def sendUpdate(self, cr, do, args):
+        datagram = Datagram.Datagram()
+        # Add message type
+        datagram.addUint16(CLIENT_OBJECT_UPDATE_FIELD)
+        # Add the DO id
+        datagram.addUint32(do.doId)
+        # Add the field id
+        datagram.addUint16(self.number)
+        # Add the arguments
+        self.addArgs(datagram, args)
+        # send the datagram
+        cr.send(datagram)