feat(ui): работа с новыми классами состояний приложения

This commit is contained in:
2026-08-09 02:10:02 +03:00
parent c07bf63b8b
commit 63a51c7ae3
2 changed files with 50 additions and 60 deletions
+31 -47
View File
@@ -1,10 +1,12 @@
import wx
from typing import Optional
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
import wx
from wx.lib.pubsub import pub
from ..core import AppState
from ..ui.dialogs import ClientConnectDialog, ServerStartDialog
from ..ui.menu_bar import AppMenuBar
from ..ui.views import LobbyPanel
class MainFrame(wx.Frame):
@@ -16,12 +18,9 @@ class MainFrame(wx.Frame):
size=wx.Size(700, 500),
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.state: AppState = AppState()
self.lobby_panel: Optional[LobbyPanel] = None
self.Center()
@@ -32,7 +31,8 @@ class MainFrame(wx.Frame):
self.SetMenuBar(self.menu_bar)
self.CreateStatusBar(1)
# self.SetStatusText("Подключение отсутствует")
pub.subscribe(self.set_statusbar_text, "mainframe.statusbar")
pub.subscribe(self.remote_server_stop, "mainframe.remote_server_stop")
self._bind_menu_events()
@@ -45,11 +45,17 @@ class MainFrame(wx.Frame):
wx.EVT_MENU, self.on_disconnect, self.menu_bar.item_disconnect
)
def set_statusbar_text(self, notice: str):
self.SetStatusText(notice)
def remote_server_stop(self, state: AppState):
self.on_disconnect(None)
def _show_lobby(self):
self._destroy_lobby()
if self.state:
self.lobby_panel = LobbyPanel(self, self.state)
if self.state.lobby:
self.lobby_panel = LobbyPanel(self, self.state.lobby)
self.main_sizer.Add(self.lobby_panel, 1, wx.EXPAND)
self.Layout()
@@ -60,51 +66,29 @@ 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()
if self.network.connect(ip):
self.state = GameState(name)
self._show_lobby()
player_name, ip = d.get_data()
if self.state.connect(player_name, ip):
self.menu_bar.set_connected_state(True)
else:
self._recreate_network_controller()
# self.SetStatusText(f"Подключено к {ip} | Ваше имя {name}")
self._show_lobby()
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)
if d.ShowModal() == wx.ID_OK:
player_name, ip = d.get_data()
self.state.serve(player_name, ip)
self.menu_bar.set_connected_state(True)
self._show_lobby()
self.menu_bar.set_connected_state(True)
# self.SetStatusText(f"Сервер запущен на {ip} | Ваше имя {name}")
d.Destroy()
def on_disconnect(self, event):
self._recreate_network_controller()
self._destroy_lobby()
self.state = None
self.state.disconnect()
self.menu_bar.set_connected_state(False)
# self.SetStatusText("Подключение отсутствует")