Source code for scrolls.listener

from socketserver import BaseRequestHandler


[docs]class Listener(object): def __init__(self, serverClass, dependencies): self.serverClass = serverClass self.clock = dependencies.getClock() self.messages = dependencies.getMessageImporter() self.message = dependencies.getMessageFactory()
[docs] def listen(self): class Handler(BaseRequestHandler): def handle(self): data = self.request[0].decode() client = self.client_address[0] self.server.cache.append((client, data)) nextFlushTime = self.clock.time() + 0.05 server = self.serverClass(("0.0.0.0", 8514), Handler) server.timeout = 0.05 server.cache = [] while True: try: server.handle_request() if self.clock.time() >= nextFlushTime: self.flushCache(server) nextFlushTime = self.clock.time() + 0.05 except KeyboardInterrupt: break
[docs] def flushCache(self, server): nCached = len(server.cache) tuples = list(reversed([server.cache.pop() for _ in range(nCached)])) newMessages = [self.message.parseFrom(t[1]) for t in tuples] self.messages.import_(newMessages)