protocol.hjson: Remove local aliases feature.
Will be replaced with local types
This commit is contained in:
parent
c4da1c4fad
commit
b02bdfc90b
|
@ -38,14 +38,9 @@ def extract_array_count(type):
|
||||||
return int(type[type.find('[')+1:type.rfind(']')])
|
return int(type[type.find('[')+1:type.rfind(']')])
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def get_type_info(types, typename, aliases={}):
|
def get_type_info(types, typename):
|
||||||
name = extract_array_type(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:
|
if not name in types:
|
||||||
warn('WARNING: Type name "{}" is not a known type or alias.'.format(name))
|
warn('WARNING: Type name "{}" is not a known type or alias.'.format(name))
|
||||||
return {
|
return {
|
||||||
|
@ -63,28 +58,23 @@ def get_type_info(types, typename, aliases={}):
|
||||||
if generic or not 'method' in tp:
|
if generic or not 'method' in tp:
|
||||||
tp['type'] = name
|
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)
|
# types without a 'type' value use their own name (e.g. double, float)
|
||||||
if not 'type' in tp:
|
if not 'type' in tp:
|
||||||
tp['type'] = name
|
tp['type'] = name
|
||||||
|
|
||||||
return tp
|
return tp
|
||||||
|
|
||||||
def resolve_type(types, typename, aliases={}):
|
def resolve_type(types, typename):
|
||||||
tp = get_type_info(types, typename, aliases)
|
tp = get_type_info(types, typename)
|
||||||
if 'type' in tp:
|
if 'type' in tp:
|
||||||
return tp['type']
|
return tp['type']
|
||||||
else:
|
else:
|
||||||
return typename
|
return typename
|
||||||
|
|
||||||
def get_type_size(types, typename, aliases={}):
|
def get_type_size(types, typename):
|
||||||
global varint_max_size
|
global varint_max_size
|
||||||
|
|
||||||
tp = get_type_info(types, typename, aliases)
|
tp = get_type_info(types, typename)
|
||||||
|
|
||||||
if not 'size' in tp:
|
if not 'size' in tp:
|
||||||
if 'alias' in tp:
|
if 'alias' in tp:
|
||||||
|
@ -107,12 +97,12 @@ def get_type_size(types, typename, aliases={}):
|
||||||
|
|
||||||
return int(size)
|
return int(size)
|
||||||
|
|
||||||
def get_rw_func(types, typename, read, aliases={}):
|
def get_rw_func(types, typename, read):
|
||||||
method = 'Read' if read else 'Write'
|
method = 'Read' if read else 'Write'
|
||||||
|
|
||||||
#print("{}: ({}, {})".format(method, typename, read))
|
#print("{}: ({}, {})".format(method, typename, read))
|
||||||
|
|
||||||
tp = get_type_info(types, typename, aliases)
|
tp = get_type_info(types, typename)
|
||||||
|
|
||||||
if 'method' in tp:
|
if 'method' in tp:
|
||||||
method += tp['method']
|
method += tp['method']
|
||||||
|
@ -162,23 +152,16 @@ def print_messages(list, globalTypes):
|
||||||
# global and local types
|
# global and local types
|
||||||
types = globalTypes.copy()
|
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
|
# add enums to local types
|
||||||
if 'enums' in message:
|
if 'enums' in message:
|
||||||
for enum in message['enums']:
|
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
|
global varint_max_size
|
||||||
size = varint_max_size # Packet Length
|
size = varint_max_size # Packet Length
|
||||||
size += varint_max_size # Packet Id
|
size += varint_max_size # Packet Id
|
||||||
for name, typename in message['vars'].items():
|
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)
|
struct_name = '{}{}'.format(direction.capitalize(), message_name)
|
||||||
add_text('struct {}', struct_name)
|
add_text('struct {}', struct_name)
|
||||||
|
@ -191,11 +174,6 @@ def print_messages(list, globalTypes):
|
||||||
newline()
|
newline()
|
||||||
if 'enums' in message:
|
if 'enums' in message:
|
||||||
for enum in message['enums']:
|
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()
|
newline()
|
||||||
if serverbound:
|
if serverbound:
|
||||||
|
@ -205,7 +183,7 @@ def print_messages(list, globalTypes):
|
||||||
for name, typename in message['vars'].items():
|
for name, typename in message['vars'].items():
|
||||||
add_text('{} = reader.{}();',
|
add_text('{} = reader.{}();',
|
||||||
name,
|
name,
|
||||||
get_rw_func(types, typename, True, aliases)
|
get_rw_func(types, typename, True)
|
||||||
)
|
)
|
||||||
unindent()
|
unindent()
|
||||||
add_text('}}')
|
add_text('}}')
|
||||||
|
@ -218,7 +196,7 @@ def print_messages(list, globalTypes):
|
||||||
add_text('msg.WriteVarInt(PacketId);')
|
add_text('msg.WriteVarInt(PacketId);')
|
||||||
for name, typename in message['vars'].items():
|
for name, typename in message['vars'].items():
|
||||||
add_text('msg.{}({});',
|
add_text('msg.{}({});',
|
||||||
get_rw_func(types, typename, False, aliases),
|
get_rw_func(types, typename, False),
|
||||||
name
|
name
|
||||||
)
|
)
|
||||||
add_text('msg.Finalize();')
|
add_text('msg.Finalize();')
|
||||||
|
@ -227,7 +205,7 @@ def print_messages(list, globalTypes):
|
||||||
add_text('}}')
|
add_text('}}')
|
||||||
|
|
||||||
for name, typename in message['vars'].items():
|
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':
|
if not serverbound and resolved_type == 'std::string':
|
||||||
add_text('const {}& {};', resolved_type, name)
|
add_text('const {}& {};', resolved_type, name)
|
||||||
else:
|
else:
|
||||||
|
|
Loading…
Reference in New Issue