*** empty log message ***

This commit is contained in:
Jesse Schell 2001-02-14 22:02:02 +00:00
parent b5441ee6de
commit eb199b3f47

View File

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