diff --git a/src/protocol/generate_protocol.py b/src/protocol/generate_protocol.py index 913782d..41a2860 100644 --- a/src/protocol/generate_protocol.py +++ b/src/protocol/generate_protocol.py @@ -38,14 +38,9 @@ def extract_array_count(type): return int(type[type.find('[')+1:type.rfind(']')]) return None -def get_type_info(types, typename, aliases={}): +def get_type_info(types, typename): name = extract_array_type(typename) - alias_name = None - if aliases and name in aliases: - alias_name = name - name = aliases[name] - if not name in types: warn('WARNING: Type name "{}" is not a known type or alias.'.format(name)) return { @@ -62,29 +57,24 @@ def get_type_info(types, typename, aliases={}): # primitive types are always generic if generic or not 'method' in tp: tp['type'] = name - - if alias_name: - tp = tp.copy() - tp['alias'] = name - tp['type'] = alias_name - + # types without a 'type' value use their own name (e.g. double, float) if not 'type' in tp: tp['type'] = name return tp -def resolve_type(types, typename, aliases={}): - tp = get_type_info(types, typename, aliases) +def resolve_type(types, typename): + tp = get_type_info(types, typename) if 'type' in tp: return tp['type'] else: return typename -def get_type_size(types, typename, aliases={}): +def get_type_size(types, typename): global varint_max_size - tp = get_type_info(types, typename, aliases) + tp = get_type_info(types, typename) if not 'size' in tp: if 'alias' in tp: @@ -107,12 +97,12 @@ def get_type_size(types, typename, aliases={}): return int(size) -def get_rw_func(types, typename, read, aliases={}): +def get_rw_func(types, typename, read): method = 'Read' if read else 'Write' #print("{}: ({}, {})".format(method, typename, read)) - tp = get_type_info(types, typename, aliases) + tp = get_type_info(types, typename) if 'method' in tp: method += tp['method'] @@ -162,23 +152,16 @@ def print_messages(list, globalTypes): # global and local types types = globalTypes.copy() - # add any local aliases - aliases = {} - if 'aliases' in message: - for alias in message['aliases']: - aliases[alias] = message['aliases'][alias] - # add enums to local types if 'enums' in message: for enum in message['enums']: - if not enum in aliases: - types[enum] = {'alias': get_enum_type(message['enums'][enum])} + types[enum] = {'alias': get_enum_type(message['enums'][enum])} global varint_max_size size = varint_max_size # Packet Length size += varint_max_size # Packet Id for name, typename in message['vars'].items(): - size += get_type_size(types, typename, aliases) + size += get_type_size(types, typename) struct_name = '{}{}'.format(direction.capitalize(), message_name) add_text('struct {}', struct_name) @@ -191,12 +174,7 @@ def print_messages(list, globalTypes): newline() if 'enums' in message: for enum in message['enums']: - if enum in aliases: - # lookup enum primitive type from aliases - prim = resolve_type(types, aliases[enum]) - print_enum(enum, message['enums'][enum], types, prim) - else: - print_enum(enum, message['enums'][enum], types) + print_enum(enum, message['enums'][enum], types) newline() if serverbound: add_text('{}(PacketReader& reader)', struct_name) @@ -205,7 +183,7 @@ def print_messages(list, globalTypes): for name, typename in message['vars'].items(): add_text('{} = reader.{}();', name, - get_rw_func(types, typename, True, aliases) + get_rw_func(types, typename, True) ) unindent() add_text('}}') @@ -218,7 +196,7 @@ def print_messages(list, globalTypes): add_text('msg.WriteVarInt(PacketId);') for name, typename in message['vars'].items(): add_text('msg.{}({});', - get_rw_func(types, typename, False, aliases), + get_rw_func(types, typename, False), name ) add_text('msg.Finalize();') @@ -227,7 +205,7 @@ def print_messages(list, globalTypes): add_text('}}') for name, typename in message['vars'].items(): - resolved_type = resolve_type(types, extract_array_type(typename), aliases) + resolved_type = resolve_type(types, extract_array_type(typename)) if not serverbound and resolved_type == 'std::string': add_text('const {}& {};', resolved_type, name) else: