Hide keyboard shortcuts

Hot-keys on this page

r m x p   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

1# -*- coding: utf-8 -*- 

2from __future__ import annotations 

3 

4# -- stdlib -- 

5from typing import Dict, TYPE_CHECKING 

6import logging 

7 

8# -- third party -- 

9# -- own -- 

10from game.base import Game 

11from utils.events import EventHub 

12import wire 

13 

14# -- typing -- 

15if TYPE_CHECKING: 

16 from client.core import Core # noqa: F401 

17 

18 

19# -- code -- 

20log = logging.getLogger('client.parts.Lobby') 

21STOP = EventHub.STOP_PROPAGATION 

22 

23 

24class Lobby(object): 

25 def __init__(self, core: Core): 

26 self.core = core 

27 self.games: Dict[int, Game] = {} 

28 

29 core.events.server_dropped += self._server_dropped 

30 

31 D = core.events.server_command 

32 D[wire.CurrentGames] += self._current_games 

33 D[wire.CurrentUsers] += self._current_users 

34 

35 # ----- Reactions ----- 

36 def _current_games(self, ev: wire.msg.CurrentGames) -> wire.msg.CurrentGames: 

37 self.games = ev['games'] 

38 core = self.core 

39 core.events.lobby_updated.emit((self.users, self.games)) 

40 return ev 

41 

42 def _current_users(self, ev: wire.msg.CurrentUsers) -> wire.msg.CurrentUsers: 

43 self.users = ev['users'] 

44 core = self.core 

45 core.events.lobby_updated.emit((self.users, self.games)) 

46 return ev 

47 

48 def _server_dropped(self, v: bool) -> bool: 

49 self.users = [] 

50 self.games = [] 

51 return v 

52 

53 # ----- Public Method ----- 

54 def create_room(self, name: str, mode: str, flags: wire.msg.CreateRoomFlags) -> None: 

55 core = self.core 

56 core.server.write(wire.msg.CreateRoom(name=name, mode=mode, flags=flags))