*** 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"""
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)