python ircd using asyncio
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

27 lines
696 B

  1. from asyncio import StreamReader, StreamWriter, Queue
  2. from dataclasses import dataclass, field
  3. from typing import Any, Set
  4. @dataclass
  5. class Client:
  6. hostname: str
  7. reader: StreamReader
  8. writer: StreamWriter
  9. msg_queue: Queue = field(default_factory=Queue)
  10. nickname: str = ""
  11. username: str = ""
  12. realname: str = ""
  13. registered: bool = False
  14. channels: Set[str] = field(default_factory=set)
  15. def id(self) -> str:
  16. return f"{self.nickname}!{self.username}@{self.hostname}"
  17. async def write_forever(self) -> None:
  18. while True:
  19. msg = await self.msg_queue.get()
  20. self.writer.write(msg)
  21. await self.writer.drain()