diff --git a/server/client_events/client_chat_event.py b/server/client_events/client_chat_event.py index ac59014..31885d6 100644 --- a/server/client_events/client_chat_event.py +++ b/server/client_events/client_chat_event.py @@ -1,5 +1,20 @@ import json +from simulation.init_simulation import simulation as sim from server.server_events import server_chat_event - -def handle(data, source_user): - server_chat_event.fire("{1}: {0}".format(data, source_user)) +def handle(data, user): + server_chat_event.fire("{1}: {0}".format(data, user.username)) + ip = user.websocket.remote_address[0] + if ip == "127.0.0.1" and data[0] == "/": + parse_command(data[1:]) + +def change_pause(value): + sim.running = value + if sim.running: + server_chat_event.fire("Simulation unpaused.") + else: + server_chat_event.fire("Simulation paused.") + +def parse_command(cmd): + match cmd: + case "pause": + change_pause(not sim.running) diff --git a/server/init_server.py b/server/init_server.py index 01abce1..2b7e558 100644 --- a/server/init_server.py +++ b/server/init_server.py @@ -140,9 +140,10 @@ def init_server(websocket): case packets.ClientPackets.SYNCHRONIZE: #allows the client to request some extra stuff server_player_position_parameters_update_event.fire_initial(token_object.token) server_meter_parameters_update_event.fire_initial(token_object.token) + server_chat_event.fire_initial(token_object) case packets.ClientPackets.CHAT: - client_chat_event.handle(packet_data, token_object.username) + client_chat_event.handle(packet_data, token_object) case packets.ClientPackets.VOIP: client_voip_event.handle(packet_data, token_object.username) diff --git a/server/server_events/server_chat_event.py b/server/server_events/server_chat_event.py index 1d40a4a..b91bc4a 100644 --- a/server/server_events/server_chat_event.py +++ b/server/server_events/server_chat_event.py @@ -1,11 +1,19 @@ from server.helpers import packet_helper from server.connection_manager import manager from server.constants import packets +from simulation.init_simulation import simulation as sim import json def fire(message): manager.broadcast_packet(packet_helper.build(packets.ServerPackets.CHAT, message)) def fire_initial(token_object): - manager.send_user_packet(packet_helper.build(packets.ServerPackets.CHAT, "Connected"), token_object.token) + if token_object.websocket.remote_address[0] == "127.0.0.1": + manager.send_user_packet(packet_helper.build(packets.ServerPackets.CHAT, "Connected (commands are available)"), token_object.token) + else: + manager.send_user_packet(packet_helper.build(packets.ServerPackets.CHAT, "Connected"), token_object.token) + + if not sim.running: + manager.send_user_packet(packet_helper.build(packets.ServerPackets.CHAT, "Simulation paused."), token_object.token) + pass diff --git a/simulation/init_simulation.py b/simulation/init_simulation.py index 08b7f4d..a5bf674 100644 --- a/simulation/init_simulation.py +++ b/simulation/init_simulation.py @@ -15,6 +15,8 @@ class Simulation: def __init__(self): + self.running = False + self.timestep = 0.1 # time between model steps self.default_timestep = 0.1 # what is 1x speed self.minimum_speedup_drop = 2 # skip sending packets if we exceed this many times 1x speed @@ -32,7 +34,8 @@ def __init__(self): def timer(self): while True: start = time.perf_counter() - model.model_run(self.prev_delta) + if self.running: + model.model_run(self.prev_delta) drop = 0 if (self.default_timestep/self.timestep) >= self.minimum_speedup_drop: drop = self.timesteps % math.floor((self.default_timestep/self.timestep)/self.minimum_speedup_drop) @@ -54,7 +57,8 @@ def timer(self): def timer_fast(self): while True: start = time.perf_counter() - model.model_run_fast(self.fast_prev_delta) + if self.running: + model.model_run_fast(self.fast_prev_delta) end = time.perf_counter() delta = end - start