aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar jesopo2019-06-04 17:51:20 +0100
committerGravatar jesopo2019-06-04 17:51:20 +0100
commit8dbae6a5e93bd97a27552fbb5890c0919c592788 (patch)
treed605cb9bb0a8b042081debc2ae15b0de92483ad0 /src
parent`.on_send(` only exists on SentLines, not ParsedLines (diff)
signature
Give SentLine (and preproc.send events) a new event object, to track events
related to a line after it is sent
Diffstat (limited to 'src')
-rw-r--r--src/EventManager.py3
-rw-r--r--src/IRCLine.py12
-rw-r--r--src/IRCServer.py10
-rw-r--r--src/IRCSocket.py2
4 files changed, 13 insertions, 14 deletions
diff --git a/src/EventManager.py b/src/EventManager.py
index 18006058..473386c2 100644
--- a/src/EventManager.py
+++ b/src/EventManager.py
@@ -57,6 +57,9 @@ class EventHook(object):
self._stored_events = [] # type: typing.List[typing.Dict]
self._context_hooks = {} # type: typing.Dict[str, typing.List[EventCallback]]
+ def new_root(self) -> "EventHook":
+ return EventHook(self.log)
+
def _make_event(self, kwargs: dict) -> Event:
return Event(self._get_path(), **kwargs)
def make_event(self, **kwargs):
diff --git a/src/IRCLine.py b/src/IRCLine.py
index 53f328b8..2a52bf23 100644
--- a/src/IRCLine.py
+++ b/src/IRCLine.py
@@ -85,13 +85,13 @@ class ParsedLine(object):
return " ".join(pieces).split("\n")[0].strip("\r")
class SentLine(IRCObject.Object):
- def __init__(self, send_time: datetime.datetime, hostmask: str,
- line: ParsedLine):
+ def __init__(self, events: "EventManager.EventHook",
+ send_time: datetime.datetime, hostmask: str, line: ParsedLine):
+ self.events = events
self.send_time = send_time
self._hostmask = hostmask
self.parsed_line = line
- self._on_send: typing.List[typing.Callable[[], None]] = []
self.truncate_marker: typing.Optional[str] = None
def __repr__(self) -> str:
@@ -135,9 +135,3 @@ class SentLine(IRCObject.Object):
return self._for_wire().decode("utf8")
def truncated(self) -> str:
return self._encode_truncate()[1]
-
- def on_send(self, func: typing.Callable[[], None]):
- self._on_send.append(func)
- def sent(self):
- for func in self._on_send[:]:
- func()
diff --git a/src/IRCServer.py b/src/IRCServer.py
index 29a705c0..a8bd12ea 100644
--- a/src/IRCServer.py
+++ b/src/IRCServer.py
@@ -246,14 +246,16 @@ class Server(IRCObject.Object):
if not self.send_enabled:
return None
+ line_events = self.events.new_root()
+
self.events.on("preprocess.send").on(line_parsed.command
- ).call_unsafe(server=self, line=line_parsed)
+ ).call_unsafe(server=self, line=line_parsed, events=line_events)
self.events.on("preprocess.send").call_unsafe(server=self,
- line=line_parsed)
+ line=line_parsed, events=line_events)
line = line_parsed.format()
- line_obj = IRCLine.SentLine(datetime.datetime.utcnow(), self.hostmask(),
- line_parsed)
+ line_obj = IRCLine.SentLine(line_events, datetime.datetime.utcnow(),
+ self.hostmask(), line_parsed)
self.socket.send(line_obj, immediate=immediate)
return line_obj
def send_raw(self, line: str):
diff --git a/src/IRCSocket.py b/src/IRCSocket.py
index 4853a23f..3b3395e8 100644
--- a/src/IRCSocket.py
+++ b/src/IRCSocket.py
@@ -149,7 +149,7 @@ class Socket(IRCObject.Object):
sent_lines = [] # type: typing.List[IRCLine.SentLine]
for i in range(sent_lines_count):
sent_line = self._buffered_lines.pop(0)
- sent_line.sent()
+ sent_line.events.on("send").call()
sent_lines.append(sent_line)
self._write_buffer = self._write_buffer[bytes_written_i:]