def sendUpdate(self, do, name, args): if not do: return if not do.dclass: return field = do.dclass.getFieldByName(name) if not field: self.notify.warning( "Tried to send update for non-existent field %s" % name) return if field.asParameter(): self.notify.warning("Tried to send parameter field as a message") return packer = DCPacker() packer.rawPackUint16(NetMessages.B_ObjectMessage) packer.rawPackUint32(do.doId) packer.rawPackUint16(field.getNumber()) packer.beginPack(field) field.packArgs(packer, args) if not packer.endPack(): self.notify.warning("Failed to pack object message") return dg = PyDatagram(packer.getBytes()) self.sendDatagram(dg)
def sendUpdate(self, do, name, args, client=None): if not do: return if not do.dclass: return field = do.dclass.getFieldByName(name) if not field: self.notify.warning("Tried to send unknown field %s" % name) return if field.asParameter(): self.notify.warning("Can't sent parameter field as a message") return packer = DCPacker() packer.rawPackUint16(NetMessages.B_ObjectMessage) packer.rawPackUint32(do.doId) packer.rawPackUint16(field.getNumber()) packer.beginPack(field) field.packArgs(packer, args) if not packer.endPack(): self.notify.warning("Failed to pack message") return dg = PyDatagram(packer.getBytes()) if not client: if field.isBroadcast(): # Send to all interested clients for cl in self.zonesToClients.get(do.zoneId, set()): self.sendDatagram(dg, cl.connection) else: self.notify.warning( "Can't send non-broadcast object message without a target client" ) return else: self.sendDatagram(dg, client.connection)