Пример #1
0
 def add_field_format(field_name, field_type, *_):
     fmt = util.field_format(field_type,
                             _[1] if field_type == 'string' else None,
                             self._custom_enums)
     f.write(fmt)
Пример #2
0
    def _message_send_constructor(self, descriptor, m_type):
        if m_type == 'client':
            return

        f = self._file

        def field_len(field_type):
            if field_type == 'byte' or field_type in self._custom_enums:
                return 1
            if field_type == 'short':
                return 2
            if field_type == 'int':
                return 4
            return 0

        f.write('\n')
        f.write('%sdef encode_self(self):\n' % TAB)
        f.write('%s# noinspection PyListCreation\n' % TAB2)
        f.write('%svalues = [0, self.%s]\n' % (TAB2, self._get_id_method_name, ))
        f.write('%sp_len = 0\n' % TAB2)
        f.write('%sfmt = "<i b"\n' % TAB2)

        l = len(descriptor)
        last_str = False
        for field_i in xrange(2, l):
            field_name = descriptor[field_i][0]
            field_type = descriptor[field_i][1]
            if field_type == 'string':
                l = descriptor[field_i][2]
                if l == 'long':
                    f.write('\n')
                    f.write('%snew_str = self.%s.encode("utf-8") if isinstance(self.%s, unicode) else self.%s\n' % (TAB2, field_name, field_name, field_name))
                    f.write('%sp_len += len(new_str) + 2\n' % TAB2)
                    f.write('%svalues.append(len(new_str))\n' % TAB2)
                    f.write('%sfmt += " h"\n' % TAB2)
                    f.write('%svalues.append(new_str)\n' % TAB2)
                    f.write('%sfmt += " " + str(len(new_str)) + "s"\n' % TAB2)
                else:
                    f.write('\n')
                    f.write('%snew_str = self.%s.encode("utf-8") if isinstance(self.%s, unicode) else self.%s\n' % (TAB2, field_name, field_name, field_name))
                    f.write('%sif len(new_str) <= 127:\n' % TAB2)
                    f.write('%sp_len += len(new_str) + 1\n' % TAB3)
                    f.write('%svalues.append(len(new_str))\n' % TAB3)
                    f.write('%sfmt += " b"\n' % TAB3)
                    f.write('%selse:\n' % TAB2)
                    f.write('%sp_len += len(new_str) + 2\n' % TAB3)
                    f.write('%svalues.append(len(new_str))\n' % TAB3)
                    f.write('%sfmt += " h"\n' % TAB3)
                    f.write('%svalues.append(new_str)\n' % TAB2)
                    f.write('%sfmt += " " + str(len(new_str)) + "s"\n' % TAB2)
                last_str = True
            else:
                if last_str:
                    f.write('\n')
                    last_str = False
                f.write('%svalues.append(self.%s)\n' % (TAB2, field_name))
                f.write('%sp_len += %i\n' % (TAB2, field_len(field_type)))
                f.write('%sfmt += "%s"\n' % (TAB2, util.field_format(field_type, None, self._custom_enums)))


        f.write('\n')
        f.write('%svalues[0] = p_len\n' % TAB2)
        f.write('%sreturn struct.pack(fmt, *values)\n' % TAB2)