diff --git a/MultiServer.py b/MultiServer.py index 5432f6f8..b85b2a8f 100644 --- a/MultiServer.py +++ b/MultiServer.py @@ -34,6 +34,7 @@ CLIENT_PLAYING = 0 CLIENT_GOAL = 1 + class Client(Endpoint): version: typing.List[int] = [0, 0, 0] tags: typing.List[str] = [] @@ -47,7 +48,7 @@ class Client(Endpoint): self.send_index = 0 self.tags = [] self.version = [0, 0, 0] - self.messageprocessor = ClientMessageProcessor(ctx, self) + self.messageprocessor = client_message_processor(ctx, self) self.ctx = weakref.ref(ctx) @property @@ -97,6 +98,7 @@ class Context(Node): self.auto_save_interval = 60 # in seconds self.auto_saver_thread = None self.save_dirty = False + self.tags = ['Berserker'] def load(self, multidatapath: str, use_embedded_server_options: bool = False): with open(multidatapath, 'rb') as f: @@ -329,11 +331,11 @@ async def on_client_connected(ctx: Context, client: Client): in ctx.endpoints if client.auth], # tags are for additional features in the communication. # Name them by feature or fork, as you feel is appropriate. - 'tags': ['Berserker'], + 'tags': ctx.tags, 'version': Utils._version_tuple, 'forfeit_mode': ctx.forfeit_mode, 'remaining_mode': ctx.remaining_mode, - 'hint_cost' : ctx.hint_cost, + 'hint_cost': ctx.hint_cost, 'location_check_points': ctx.location_check_points }]]) @@ -1214,6 +1216,9 @@ async def main(args: argparse.Namespace): if ctx.shutdown_task: await ctx.shutdown_task + +client_message_processor = ClientMessageProcessor + if __name__ == '__main__': try: asyncio.run(main(parse_args())) diff --git a/WebHost/customserver.py b/WebHost/customserver.py index 8e77a213..62705e18 100644 --- a/WebHost/customserver.py +++ b/WebHost/customserver.py @@ -11,10 +11,25 @@ import random from WebHost import LOGS_FOLDER from .models import * -from MultiServer import Context, server, auto_shutdown, ServerCommandProcessor +from MultiServer import Context, server, auto_shutdown, ServerCommandProcessor, ClientMessageProcessor from Utils import get_public_ipv4, get_public_ipv6 +class CustomClientMessageProcessor(ClientMessageProcessor): + def _cmd_video(self, platform, user): + if platform.lower().startswith("t"): # twitch + self.ctx.video[self.client.team, self.client.slot] = "Twitch", user + self.ctx.save() + self.output(f"Registered Twitch Stream https://www.twitch.tv/{user}") + + +# inject +import MultiServer + +MultiServer.client_message_processor = CustomClientMessageProcessor +del (MultiServer) + + class DBCommandProcessor(ServerCommandProcessor): def output(self, text: str): logging.info(text) @@ -24,6 +39,8 @@ class WebHostContext(Context): def __init__(self): super(WebHostContext, self).__init__("", 0, "", 1, 40, True, "enabled", "enabled", 0) self.main_loop = asyncio.get_running_loop() + self.video = {} + self.tags = ["Berserker", "WebHost"] def listen_to_db_commands(self): cmdprocessor = DBCommandProcessor(self) @@ -63,6 +80,10 @@ class WebHostContext(Context): Room.get(id=self.room_id).multisave = self.get_save() return True + def get_save(self) -> dict: + d = super(WebHostContext, self).get_save() + d["video"] = [(tuple(playerslot), videodata) for playerslot, videodata in self.video.items()] + return d def get_random_port(): return random.randint(49152, 65535) diff --git a/WebHost/templates/tracker.html b/WebHost/templates/tracker.html index 341454b6..749fc5dc 100644 --- a/WebHost/templates/tracker.html +++ b/WebHost/templates/tracker.html @@ -64,7 +64,12 @@ {% for player, items in players.items() %}