Exemplo n.º 1
0
    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)
Exemplo n.º 2
0
    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)