feat(ui): добавление работы с сетью через графический интерфейс
This commit is contained in:
@@ -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()
|
||||
if self.network.connect(ip):
|
||||
self.state = GameState(name)
|
||||
|
||||
self._show_lobby()
|
||||
|
||||
self.menu_bar.set_connected_state(True)
|
||||
self.SetStatusText(f"Подключено к {ip} | Ваше имя {name}")
|
||||
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("Подключение отсутствует")
|
||||
|
||||
Reference in New Issue
Block a user