예제 #1
0
파일: generate.py 프로젝트: feeling/pytools
def __generate_message_data_item_complex_field(item_field, stream):
    to_generate_list =[]
    message = None
    class_name  = convertClassName(item_field.get_class_name())
    if class_name not in message_class_dict:
        message = 'class %s (Field):\n    #%s\n    fields = (\n'%(class_name, item_field.description)
        for k, v in item_field.field_dict.iteritems():
            if isinstance(v, ProtocolDataItemArray) or isinstance(v, ProtocolDataItemList) or isinstance(v, ProtocolDataItemComplexField):
                to_generate_list.append(v)
                message += '        (\'%s\', %s),\n'%(k, convertClassName(v.get_class_name()))
            else:
                if v.type == 'string':
                    message += '        (\'%s\', %s),\n' % (k, 'String')
                else:
                    message += '        (\'%s\', \'%s\'),\n' % (k, v.type)

        message += '    )\n\n\n'
        message_class_dict[class_name] = 1
        
    for data in to_generate_list:
        if isinstance(data, ProtocolDataItemArray):
            __generate_message_data_item_array(data,stream)
        elif isinstance(data, ProtocolDataItemList):
            __generate_message_data_item_list(data,stream)
        elif isinstance(data, ProtocolDataItemSingelField):
            __generate_message_data_item_single_field(data,stream)
        elif isinstance(data, ProtocolDataItemComplexField):
            __generate_message_data_item_complex_field(data,stream)
    if message:
        stream.write(message)
예제 #2
0
def __generate_message_data_item_complex_field(item_field, stream):
    to_generate_list = []
    message = None
    class_name = convertClassName(item_field.get_class_name())
    if class_name not in message_class_dict:
        message = 'class %s (Field):\n    #%s\n    fields = (\n' % (
            class_name, item_field.description)
        for k, v in item_field.field_dict.iteritems():
            if isinstance(v, ProtocolDataItemArray) or isinstance(
                    v, ProtocolDataItemList) or isinstance(
                        v, ProtocolDataItemComplexField):
                to_generate_list.append(v)
                message += '        (\'%s\', %s),\n' % (
                    k, convertClassName(v.get_class_name()))
            else:
                if v.type == 'string':
                    message += '        (\'%s\', %s),\n' % (k, 'String')
                else:
                    message += '        (\'%s\', \'%s\'),\n' % (k, v.type)

        message += '    )\n\n\n'
        message_class_dict[class_name] = 1

    for data in to_generate_list:
        if isinstance(data, ProtocolDataItemArray):
            __generate_message_data_item_array(data, stream)
        elif isinstance(data, ProtocolDataItemList):
            __generate_message_data_item_list(data, stream)
        elif isinstance(data, ProtocolDataItemSingelField):
            __generate_message_data_item_single_field(data, stream)
        elif isinstance(data, ProtocolDataItemComplexField):
            __generate_message_data_item_complex_field(data, stream)
    if message:
        stream.write(message)
예제 #3
0
def __generate_message_data_item_list(item_list, stream):
    field = item_list.item_list[0]
    __generate_message_data_item_complex_field(field, stream)
    class_name = convertClassName(item_list.get_class_name())
    if class_name not in message_class_dict:
        message = 'class %s (List):\n    #%s\n    Field = %s\n\n\n' % (
            class_name, field.description,
            convertClassName(field.get_class_name()))
        stream.write(message)
        message_class_dict[class_name] = 1
예제 #4
0
파일: generate.py 프로젝트: feeling/pytools
def __generate_message_data_item_list(item_list, stream):
    field = item_list.item_list[0]
    __generate_message_data_item_complex_field(field,stream)
    class_name  = convertClassName(item_list.get_class_name())
    if class_name not in message_class_dict:
        message = 'class %s (List):\n    #%s\n    Field = %s\n\n\n'%(class_name, field.description, convertClassName(field.get_class_name()))
        stream.write(message)
        message_class_dict[class_name] = 1
예제 #5
0
파일: generate.py 프로젝트: feeling/pytools
def __generate_message_data_item_array(item_array, stream):
    field = item_array.item_list[0]
    class_name  = convertClassName(item_array.get_class_name())
    if class_name not in message_class_dict:
        if field.type == 'string':
            message = 'class %s (List):\n    #%s\n    Field = %s\n\n\n' % (class_name, field.description, 'String')
        else:
            message = 'class %s (Array):\n    #%s\n    field = \'%s\', \'%s\'\n\n\n' % (class_name, field.description, field.name, field.type)
        stream.write(message)
        message_class_dict[class_name] = 1
예제 #6
0
def __generate_message_data_item_array(item_array, stream):
    field = item_array.item_list[0]
    class_name = convertClassName(item_array.get_class_name())
    if class_name not in message_class_dict:
        if field.type == 'string':
            message = 'class %s (List):\n    #%s\n    Field = %s\n\n\n' % (
                class_name, field.description, 'String')
        else:
            message = 'class %s (Array):\n    #%s\n    field = \'%s\', \'%s\'\n\n\n' % (
                class_name, field.description, field.name, field.type)
        stream.write(message)
        message_class_dict[class_name] = 1
예제 #7
0
def generateAs(protocols, currentdir, filename):
    read_str = ''
    write_str = ''
    for p in protocols:
        if p.request and p.request.data_list:
            write_str += '\n/**\n * %s\n * %s\n */\npublic function write%s():void{\n' % (
                p.description, p.request.description, convertClassName(p.name))
            write_str += '    var msgBody:ByteArray = new ByteArray();\n    msgBody.endian = Endian.LITTLE_ENDIAN;\n'
            write_str += __generate_as_write_data_list(p.request.data_list, 0)
            write_str += '    super.send(msgBody);\n}\n'
        if p.response and p.response.data_list:
            read_str += '\n/**\n * %s\n * %s\n * read%s\n */\noverride protected function parseBodyHandle(msgHeadVo:MsgHeadVo,g2cProtocol:int,bytes:ByteArray):void{\n    var code:int = msgHeadVo.code;\n    var reason:int = msgHeadVo.reason;\n    \n    if(code == 1){\n' % (
                p.description, p.response.description, convertClassName(
                    p.name))
            read_str += __generate_as_read_data_list(p.response.data_list, 1)
            read_str += '    }\n}\n'

    f = open(currentdir + data_as_dir + '/as/' + filename + '.as', 'w')
    f.write(read_str)
    f.write('\n\n')
    f.write(write_str)
    f.close()
예제 #8
0
파일: generate.py 프로젝트: feeling/pytools
def __generate_as_write_data_item_complex_field(item_field, name ='',tabs_num=0):
    rev = ''
    blank = '    '
    blank *= tabs_num
    rev += '\n    %s//TODO 写入类型为%s 对象%s,自己构造相关对象提供数据写入,或者替换相关变量!!!\n'%(blank, convertClassName(item_field.name), convertFieldName(name))
    
    for k, v in item_field.field_dict.iteritems():
        if isinstance(v, ProtocolDataItemArray):
            rev +=__generate_as_write_data_item_array(v, k, tabs_num)
        elif isinstance(v, ProtocolDataItemList):
            rev +=__generate_as_write_data_item_list(v, k, tabs_num)
        elif isinstance(v, ProtocolDataItemSingelField):
            rev +=__generate_as_write_data_item_single_field(v, k, tabs_num)
        elif isinstance(v, ProtocolDataItemComplexField):
            rev +=__generate_as_write_data_item_complex_field(v, k, tabs_num)
    return rev
예제 #9
0
def __generate_as_write_data_item_complex_field(item_field,
                                                name='',
                                                tabs_num=0):
    rev = ''
    blank = '    '
    blank *= tabs_num
    rev += '\n    %s//TODO 写入类型为%s 对象%s,自己构造相关对象提供数据写入,或者替换相关变量!!!\n' % (
        blank, convertClassName(item_field.name), convertFieldName(name))

    for k, v in item_field.field_dict.iteritems():
        if isinstance(v, ProtocolDataItemArray):
            rev += __generate_as_write_data_item_array(v, k, tabs_num)
        elif isinstance(v, ProtocolDataItemList):
            rev += __generate_as_write_data_item_list(v, k, tabs_num)
        elif isinstance(v, ProtocolDataItemSingelField):
            rev += __generate_as_write_data_item_single_field(v, k, tabs_num)
        elif isinstance(v, ProtocolDataItemComplexField):
            rev += __generate_as_write_data_item_complex_field(v, k, tabs_num)
    return rev
예제 #10
0
파일: generate.py 프로젝트: feeling/pytools
def generateAs(protocols, currentdir, filename):
    read_str = ''
    write_str = ''
    for p in protocols:
        if p.request and p.request.data_list:
            write_str += '\n/**\n * %s\n * %s\n */\npublic function write%s():void{\n'%(p.description,p.request.description, convertClassName(p.name))
            write_str += '    var msgBody:ByteArray = new ByteArray();\n    msgBody.endian = Endian.LITTLE_ENDIAN;\n'
            write_str +=  __generate_as_write_data_list(p.request.data_list, 0)
            write_str +='    super.send(msgBody);\n}\n'
        if p.response and p.response.data_list:
            read_str += '\n/**\n * %s\n * %s\n * read%s\n */\noverride protected function parseBodyHandle(msgHeadVo:MsgHeadVo,g2cProtocol:int,bytes:ByteArray):void{\n    var code:int = msgHeadVo.code;\n    var reason:int = msgHeadVo.reason;\n    \n    if(code == 1){\n'%(p.description,p.response.description, convertClassName(p.name))
            read_str +=  __generate_as_read_data_list(p.response.data_list, 1)
            read_str +='    }\n}\n'

    f = open(currentdir + data_as_dir + '/as/'+filename+'.as', 'w')
    f.write(read_str)
    f.write('\n\n')
    f.write(write_str)
    f.close()