from pathlib import Path
from queue import SimpleQueue
from sys import argv, exit as sys_exit
+from typing import Optional
# non-standard libs
from plomlib.setup import dependency_hint
try:
- from ircplom.events import ExceptionEvent, QuitEvent
+ from ircplom.events import CrashingException, ExceptionEvent, QuitEvent
from ircplom.client import ClientsDb, ClientEvent, NewClientEvent
from ircplom.tui_base import BaseTui, Terminal, TerminalInterface, TuiEvent
from ircplom.client_tui import ClientTui
q_events: SimpleQueue = SimpleQueue()
clients_db: ClientsDb = {}
try:
+ to_raise: Optional[CrashingException] = None
with cls_term(_q_out=q_events).setup() as term:
tui = cls_tui(_q_out=q_events, term=term)
while True:
if isinstance(event, QuitEvent):
break
if isinstance(event, ExceptionEvent):
- raise event.exception
+ to_raise = event.exception
+ break
if isinstance(event, TuiEvent):
event.affect(tui)
elif isinstance(event, NewClientEvent):
event.affect(clients_db)
elif isinstance(event, ClientEvent):
event.affect(clients_db[event.client_id])
+ if to_raise:
+ raise to_raise
finally:
for client in clients_db.values():
client.close()