- def _write_line(self, line: str) -> None:
- 'Send line-separator-delimited message over socket.'
- if not (self._socket and self._assumed_open):
- self.broadcast(LogConnEvent,
- 'ALERT: cannot send, assuming connection closed.')
- return
- self._socket.sendall(line.encode('utf-8') + _IRCSPEC_LINE_SEPARATOR)
-
- def handle(self, event: ConnEvent) -> None:
- 'Process connection-directed Event into further steps.'
- if isinstance(event, InitReconnectEvent):
- if self._assumed_open:
- self.broadcast(LogConnEvent,
- 'ALERT: Reconnect called, but still seem '
- 'connected, so nothing to do.')
- else:
- self._start_connecting()
- elif isinstance(event, _ConnectedEvent):
- # self.send('CAP', ('LS', '302'))
- self.send('USER', (self.login.user, '0', '*', self.login.real))
- self.send('NICK', (self.login.nick,))
- # self.send('CAP', ('LIST',))
- # self.send('CAP', ('END',))
- elif isinstance(event, _DisconnectedEvent):
- self.close()
- elif isinstance(event, _SendEvent):
- self.broadcast(LogConnEvent, f'->: {event.payload.raw}')
- self._write_line(event.payload.raw)
-
-
-class _RecvLoop(Loop, ConnMixin):
- 'Loop to react on messages from server.'
-
- def process_bonus(self, yielded: str) -> None:
- msg = _IrcMessage.from_raw(yielded)
- self.conn.broadcast(LogConnEvent, f'<-: {msg.raw}')