diff --git a/src/mind_reader/ui/main_frame.py b/src/mind_reader/ui/main_frame.py index a9df505..b1a7f37 100644 --- a/src/mind_reader/ui/main_frame.py +++ b/src/mind_reader/ui/main_frame.py @@ -1,6 +1,7 @@ import wx from mind_reader.core import GameState +from mind_reader.network import NetworkController, NetworkMesssage from mind_reader.ui.dialogs import ClientConnectDialog, ServerStartDialog from mind_reader.ui.menu_bar import AppMenuBar from mind_reader.ui.views import LobbyPanel @@ -16,6 +17,10 @@ class MainFrame(wx.Frame): style=wx.DEFAULT_FRAME_STYLE, ) self.state: GameState | None = None + self.network = NetworkController( + self._handle_network_message, + self._handle_network_notice, + ) self.lobby_panel: LobbyPanel | None = None self.Center() @@ -27,7 +32,7 @@ class MainFrame(wx.Frame): self.SetMenuBar(self.menu_bar) self.CreateStatusBar(1) - self.SetStatusText("Подключение отсутствует") + # self.SetStatusText("Подключение отсутствует") self._bind_menu_events() @@ -55,34 +60,51 @@ class MainFrame(wx.Frame): self.lobby_panel = None self.Layout() + def _handle_network_message(self, m: NetworkMesssage): + pass + + def _handle_network_notice(self, notice: str): + self.SetStatusText(notice) + + def _recreate_network_controller(self): + self.network.stop() + self.network = NetworkController( + self._handle_network_message, + self._handle_network_notice, + ) + def on_client_connect(self, event): d = ClientConnectDialog(self) if d.ShowModal() == wx.ID_OK: name, ip = d.get_data() - self.state = GameState(name) - - self._show_lobby() - - self.menu_bar.set_connected_state(True) - self.SetStatusText(f"Подключено к {ip} | Ваше имя {name}") + if self.network.connect(ip): + self.state = GameState(name) + self._show_lobby() + self.menu_bar.set_connected_state(True) + else: + self._recreate_network_controller() + # self.SetStatusText(f"Подключено к {ip} | Ваше имя {name}") d.Destroy() def on_server_start(self, event): d = ServerStartDialog(self) if d.ShowModal() == wx.ID_OK: name, ip = d.get_data() + self.network.serve(ip) self.state = GameState(name) self._show_lobby() self.menu_bar.set_connected_state(True) - self.SetStatusText(f"Сервер запущен на {ip} | Ваше имя {name}") + # self.SetStatusText(f"Сервер запущен на {ip} | Ваше имя {name}") d.Destroy() def on_disconnect(self, event): + self._recreate_network_controller() + self._destroy_lobby() self.state = None self.menu_bar.set_connected_state(False) - self.SetStatusText("Подключение отсутствует") + # self.SetStatusText("Подключение отсутствует")