Пример #1
0
    def write_object(self, dg, opcode, obj=None, written_handles=None):
        obj_dg = Datagram()

        if self.version >= (6, 21):
            obj_dg.add_uint8(opcode)

        if obj is not None:
            self.write_handle(obj_dg, obj['handle_id'], written_handles)
            write_pointer(obj_dg, obj['obj_id'])
            obj_dg.appendData(obj['data'])

        self.write_datagram(obj_dg, dg)
Пример #2
0
    def write_object(self, dg, opcode, obj=None, written_handles=None):
        obj_dg = Datagram()

        if self.version >= (6, 21):
            obj_dg.add_uint8(opcode)

        if obj is not None:
            obj_id = obj['obj_id']
            instance = self.object_map.get(obj_id)

            self.write_handle(obj_dg, obj['handle_id'], written_handles)
            self.write_pointer(obj_dg, obj_id)

            if instance:
                instance.write_object(self.version, obj)

            obj_dg.appendData(obj['data'])

        self.write_datagram(obj_dg, dg)
Пример #3
0
    def writerCallback(self):

        # if there are no events queued, return None
        if not self.eventQueue:
            return None

        # collect data
        data = []
        for event in self.eventQueue:
            data.append(event.toMessage())
        self.eventQueue = []

        # make a message for the events
        myPyDatagram = Datagram()
        myPyDatagram.add_uint8(NetworkManager.MessageEnum.EVENT)
        datastring = json.dumps(data)
        print(datastring)
        myPyDatagram.add_string(datastring)

        print("server: writer callback")
        return myPyDatagram
Пример #4
0
    def write(self, f):
        dg = Datagram()
        dg.appendData(self.HEADER)

        if self.version >= (6, 27):
            header_size = 6
        elif self.version >= (5, 0):
            header_size = 5
        else:
            header_size = 4

        bam_major_ver, bam_minor_ver = self.version
        dg.add_uint32(header_size)
        dg.add_uint16(bam_major_ver)
        dg.add_uint16(bam_minor_ver)

        if header_size >= 5:
            dg.add_uint8(self.file_endian)

        if header_size >= 6:
            dg.add_bool(self.stdfloat_double)

        self.written_handles = []
        self.write_long_pointers = False

        if self.objects:
            objects = list(self.objects.values())
            self.write_object(dg, BamGlobals.BOC_push, objects[0], self.written_handles)

            for obj in objects[1:]:
                self.write_object(dg, BamGlobals.BOC_adjunct, obj, self.written_handles)

        for data in self.file_datas:
            self.write_file_data(dg, data)

        if self.version >= (6, 21):
            self.write_object(dg, BamGlobals.BOC_pop)

        f.write(dg.getMessage())
Пример #5
0
    def write(self, f, target_version):
        dg = Datagram()
        dg.appendData(self.HEADER)

        if target_version >= (6, 27):
            header_size = 6
        elif target_version >= (5, 0):
            header_size = 5
        else:
            header_size = 4

        bam_major_ver, bam_minor_ver = target_version
        dg.add_uint32(header_size)
        dg.add_uint16(bam_major_ver)
        dg.add_uint16(bam_minor_ver)

        if header_size >= 5:
            dg.add_uint8(self.file_endian)

        if header_size >= 6:
            dg.add_bool(self.stdfloat_double)

        written_handles = []

        if self.objects:
            self.write_object(dg, BOC_push, self.objects[0], written_handles)

            for obj in self.objects[1:]:
                self.write_object(dg, BOC_adjunct, obj, written_handles)

        for data in self.file_datas:
            self.write_file_data(dg, data)

        if self.version >= (6, 21):
            self.write_object(dg, BOC_pop)

        f.write(dg.getMessage())