baseimage-tutorial-framework/tfw/components/frontend/message_queue_handler/message_queue_handler.py

43 lines
1.2 KiB
Python
Raw Normal View History

2019-08-23 14:15:27 +00:00
from time import sleep
from queue import Queue
from threading import Thread
class MessageQueueHandler:
keys = ['message.queue']
type_id = 'ControlEventHandler'
2019-08-23 14:15:27 +00:00
def __init__(self, wpm):
self.connector = None
self.wpm = wpm
self._queue = Queue()
2019-08-26 11:51:28 +00:00
self._thread = Thread(target=self._dispatch_messages)
2019-08-23 14:15:27 +00:00
2019-08-26 11:51:28 +00:00
def _dispatch_messages(self):
2019-08-23 14:15:27 +00:00
for message in iter(self._queue.get, None):
wpm = message['wpm'] if 'wpm' in message else self.wpm
cps = 5 * wpm / 60
message['typing'] = not self._queue.empty()
2019-08-23 14:15:27 +00:00
self.connector.send_message(message)
sleep(len(message['message']) / cps)
2019-08-23 14:15:27 +00:00
def handle_event(self, message, _):
2019-08-26 11:51:28 +00:00
for unpacked in self._generate_messages_from_queue(message):
2019-08-23 14:15:27 +00:00
self._queue.put(unpacked)
@staticmethod
2019-08-26 11:51:28 +00:00
def _generate_messages_from_queue(queue_message):
2019-08-28 14:31:43 +00:00
for message in queue_message['messages']:
2019-08-23 14:15:27 +00:00
yield {
'key': 'message.send',
**message
}
def start(self):
self._thread.start()
def cleanup(self):
self._queue.queue.clear()
self._queue.put(None)
self._thread.join()