|
|
- from asyncio import StreamReader, StreamWriter, Queue
- from dataclasses import dataclass, field
- from typing import Any, Set
-
-
- @dataclass
- class Client:
- hostname: str
- reader: StreamReader
- writer: StreamWriter
- msg_queue: Queue = field(default_factory=Queue)
-
- nickname: str = ""
- username: str = ""
- realname: str = ""
- registered: bool = False
-
- channels: Set[str] = field(default_factory=set)
-
- def id(self) -> str:
- return f"{self.nickname}!{self.username}@{self.hostname}"
-
- async def write_forever(self) -> None:
- while True:
- msg = await self.msg_queue.get()
- self.writer.write(msg)
- await self.writer.drain()
|