aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar jesopo2019-06-06 19:21:18 +0100
committerGravatar jesopo2019-06-06 19:21:18 +0100
commit5b7d8dea917a285fb12006cc5295f2eab8d8f138 (patch)
tree0abd02c6c47e4d39731f1019167cb5f2de9b726c /src
parentprint lines as soon as they're read, don't wait for _post_send (diff)
signature
Only trigger read/write threads once
Diffstat (limited to 'src')
-rw-r--r--src/IRCBot.py19
1 files changed, 17 insertions, 2 deletions
diff --git a/src/IRCBot.py b/src/IRCBot.py
index 6cd1f4e6..80446601 100644
--- a/src/IRCBot.py
+++ b/src/IRCBot.py
@@ -40,6 +40,11 @@ class Bot(object):
self._write_poll.register(self._wtrigger_server.fileno(),
select.EPOLLIN)
+ self._rtrigger_lock = threading.Lock()
+ self._rtriggered = False
+ self._wtrigger_lock = threading.Lock()
+ self._wtriggered = False
+
self._read_thread = None
self._write_thread = None
@@ -50,9 +55,15 @@ class Bot(object):
self.trigger_read()
self.trigger_write()
def trigger_read(self):
- self._rtrigger_client.send(b"TRIGGER")
+ with self._rtrigger_lock:
+ if not self._rtriggered:
+ self._rtriggered = True
+ self._rtrigger_client.send(b"TRIGGER")
def trigger_write(self):
- self._wtrigger_client.send(b"TRIGGER")
+ with self._wtrigger_lock:
+ if not self._wtriggered:
+ self._wtriggered = True
+ self._wtrigger_client.send(b"TRIGGER")
def trigger(self,
func: typing.Optional[typing.Callable[[], typing.Any]]=None
@@ -251,6 +262,8 @@ class Bot(object):
if fd == self._wtrigger_server.fileno():
# throw away data from trigger socket
self._wtrigger_server.recv(1024)
+ with self._wtrigger_lock:
+ self._wtriggered = False
elif event & select.EPOLLOUT:
self._write_poll.unregister(fd)
server = self.servers[fd]
@@ -287,6 +300,8 @@ class Bot(object):
if fd == self._rtrigger_server.fileno():
# throw away data from trigger socket
self._rtrigger_server.recv(1024)
+ with self._rtrigger_lock:
+ self._rtriggered = False
else:
server = self.servers[fd]
if event & select.EPOLLIN: