Coverage for client/parts/observe.py : 100%
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
4# -- stdlib --
5from typing import TYPE_CHECKING
6import logging
8# -- third party --
9# -- own --
10from utils.events import EventHub
11import wire
13# -- typing --
14if TYPE_CHECKING:
15 from client.core import Core # noqa: F401
18# -- code --
19log = logging.getLogger('client.parts.Observe')
20STOP = EventHub.STOP_PROPAGATION
23class Observe(object):
24 def __init__(self, core: Core):
25 self.core = core
27 D = core.events.server_command
28 D[wire.ObserverEnter] += self._observer_enter
29 D[wire.ObserverLeave] += self._observer_leave
30 D[wire.ObserveRequest] += self._observe_request
32 # ---- Reactions -----
33 def _observer_enter(self, ev: wire.ObserverEnter) -> wire.ObserverEnter:
34 core = self.core
35 core.events.observer_enter.emit((ev.observer, ev.observee))
36 return ev
38 def _observer_leave(self, ev: wire.ObserverLeave) -> wire.ObserverLeave:
39 core = self.core
40 core.events.observer_leave.emit((ev.observer, ev.observee))
41 return ev
43 def _observe_request(self, ev: wire.ObserveRequest) -> wire.ObserveRequest:
44 core = self.core
45 core.events.observe_request.emit(ev.uid)
46 return ev
48 # ----- Public Method -----
49 def observe(self, uid: int) -> None:
50 core = self.core
51 core.server.write(wire.Observe(uid=uid))
53 def grant(self, uid: int, grant: bool) -> None:
54 core = self.core
55 core.server.write(wire.GrantObserve(uid=uid, grant=grant))
57 def kick(self, uid: int) -> None:
58 core = self.core
59 core.server.write(wire.KickObserver(uid=uid))