47 lines
1.2 KiB
Python
47 lines
1.2 KiB
Python
import logging
|
|
from threading import Lock
|
|
from json import dumps, loads, JSONDecodeError
|
|
|
|
from pipe_io_server import PipeReaderServer
|
|
|
|
from .pipe_connector import PipeConnector
|
|
|
|
LOG = logging.getLogger(__name__)
|
|
|
|
|
|
class ProxyPipeConnectorHandler:
|
|
keys = ['']
|
|
|
|
def __init__(self, path):
|
|
self.connector, self.pipes = None, None
|
|
self.path = path
|
|
|
|
def start(self):
|
|
self.pipes = ProxyPipeConnector(self.path, self.connector)
|
|
|
|
def handle_event(self, message, _):
|
|
self.pipes.broadcast(dumps(message).encode())
|
|
|
|
def cleanup(self):
|
|
self.pipes.stop()
|
|
|
|
|
|
class ProxyPipeConnector(PipeConnector):
|
|
def __init__(self, path, connector):
|
|
self.connector = connector
|
|
self.mutex = Lock()
|
|
super().__init__(path)
|
|
|
|
def build_reader(self, path):
|
|
reader = PipeReaderServer(path, manage_pipes=False)
|
|
reader.handle_message = self._handle_message
|
|
return reader
|
|
|
|
def _handle_message(self, message):
|
|
try:
|
|
json_object = loads(message)
|
|
with self.mutex:
|
|
self.connector.send_message(json_object)
|
|
except JSONDecodeError:
|
|
LOG.error('Received invalid JSON message: %s', message)
|