2018-04-03 12:49:14 +00:00
|
|
|
# Copyright (C) 2018 Avatao.com Innovative Learning Kft.
|
|
|
|
# All Rights Reserved. See LICENSE file for details.
|
|
|
|
|
2017-11-27 17:16:35 +00:00
|
|
|
import zmq
|
|
|
|
from zmq.eventloop.zmqstream import ZMQStream
|
|
|
|
|
2018-06-29 09:58:05 +00:00
|
|
|
from tfw.networking import ZMQConnectorBase, serialize_tfw_msg, with_deserialize_tfw_msg
|
2018-03-25 14:36:31 +00:00
|
|
|
from tfw.config import TFWENV
|
2018-02-06 13:19:41 +00:00
|
|
|
from tfw.config.logs import logging
|
2018-03-25 14:06:59 +00:00
|
|
|
|
|
|
|
LOG = logging.getLogger(__name__)
|
2017-11-27 17:16:35 +00:00
|
|
|
|
2018-01-29 17:36:29 +00:00
|
|
|
|
2018-01-29 14:28:51 +00:00
|
|
|
class EventHandlerDownlinkConnector(ZMQConnectorBase):
|
|
|
|
def __init__(self, zmq_context=None):
|
2018-01-29 15:02:52 +00:00
|
|
|
super(EventHandlerDownlinkConnector, self).__init__(zmq_context)
|
2018-01-29 14:28:51 +00:00
|
|
|
self._zmq_pull_socket = self._zmq_context.socket(zmq.PULL)
|
|
|
|
self._zmq_pull_stream = ZMQStream(self._zmq_pull_socket)
|
2018-04-19 07:21:41 +00:00
|
|
|
address = f'tcp://*:{TFWENV.RECEIVER_PORT}'
|
2018-01-29 14:28:51 +00:00
|
|
|
self._zmq_pull_socket.bind(address)
|
2018-03-25 14:25:01 +00:00
|
|
|
LOG.debug('Pull socket bound to %s', address)
|
2017-11-27 17:16:35 +00:00
|
|
|
|
|
|
|
|
2018-01-29 14:28:51 +00:00
|
|
|
class EventHandlerUplinkConnector(ZMQConnectorBase):
|
|
|
|
def __init__(self, zmq_context=None):
|
2018-01-29 15:02:52 +00:00
|
|
|
super(EventHandlerUplinkConnector, self).__init__(zmq_context)
|
2018-01-29 14:28:51 +00:00
|
|
|
self._zmq_pub_socket = self._zmq_context.socket(zmq.PUB)
|
2018-04-19 07:21:41 +00:00
|
|
|
address = f'tcp://*:{TFWENV.PUBLISHER_PORT}'
|
2018-01-29 14:28:51 +00:00
|
|
|
self._zmq_pub_socket.bind(address)
|
2018-03-25 14:25:01 +00:00
|
|
|
LOG.debug('Pub socket bound to %s', address)
|
2017-11-27 17:16:35 +00:00
|
|
|
|
|
|
|
|
2018-01-29 14:28:51 +00:00
|
|
|
class EventHandlerConnector(EventHandlerDownlinkConnector, EventHandlerUplinkConnector):
|
|
|
|
def register_callback(self, callback):
|
2018-06-29 09:58:05 +00:00
|
|
|
callback = with_deserialize_tfw_msg(callback)
|
2018-01-29 15:02:52 +00:00
|
|
|
self._zmq_pull_stream.on_recv(callback)
|
2018-01-29 14:28:51 +00:00
|
|
|
|
2018-04-13 18:33:35 +00:00
|
|
|
def send_message(self, message: dict):
|
2018-04-13 17:57:04 +00:00
|
|
|
self._zmq_pub_socket.send_multipart(serialize_tfw_msg(message))
|