From 218fb0298f1a6eb25b6d135f54fde4cebd18f695 Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Fri, 19 Mar 2021 04:14:59 +0100 Subject: [PATCH] Some .Net compatibility --- MultiServer.py | 5 +++-- NetUtils.py | 13 ++++++++++++- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/MultiServer.py b/MultiServer.py index 6a0160fa..f4c1d8dc 100644 --- a/MultiServer.py +++ b/MultiServer.py @@ -34,7 +34,8 @@ from NetUtils import Node, Endpoint, CLientStatus, NetworkItem, decode colorama.init() lttp_console_names = frozenset(set(Items.item_table) | set(Items.item_name_groups) | set(Regions.lookup_name_to_id)) - +all_console_names = frozenset(set(network_data_package["lookup_any_location_id_to_name"].values()) | + set(network_data_package["lookup_any_item_id_to_name"].values())) class Client(Endpoint): version = Version(0, 0, 0) @@ -533,7 +534,7 @@ def json_format_send_event(net_item: NetworkItem, receiving_player: int): return {"cmd": "PrintJSON", "data": parts, "type": "ItemSend", "receiving": receiving_player, "sending": net_item.player} -def get_intended_text(input_text: str, possible_answers: typing.Iterable[str]= lttp_console_names) -> typing.Tuple[str, bool, str]: +def get_intended_text(input_text: str, possible_answers: typing.Iterable[str]= all_console_names) -> typing.Tuple[str, bool, str]: picks = fuzzy_process.extract(input_text, possible_answers, limit=2) if len(picks) > 1: dif = picks[0][1] - picks[1][1] diff --git a/NetUtils.py b/NetUtils.py index aa822896..4a82fa73 100644 --- a/NetUtils.py +++ b/NetUtils.py @@ -61,12 +61,23 @@ _encode = JSONEncoder( def encode(obj): return _encode(_scan_for_TypedTuples(obj)) +def get_any_version(data: dict) -> Version: + data = {key.lower(): value for key, value in data.items()} # .NET version classes have capitalized keys + return Version(int(data["major"]), int(data["minor"]), int(data["build"])) + whitelist = {"NetworkPlayer": NetworkPlayer, "NetworkItem": NetworkItem, - "Version": Version} + } + +custom_hooks = { + "Version": get_any_version +} def _object_hook(o: typing.Any) -> typing.Any: if isinstance(o, dict): + hook = custom_hooks.get(o.get("class", None), None) + if hook: + return hook(o) cls = whitelist.get(o.get("class", None), None) if cls: for key in tuple(o):