medved/lib/net/Listener.py
Good Evening d782c2eb70 pew pew
2018-04-03 01:41:10 +03:00

47 lines
1.4 KiB
Python

# pylint: disable=E1101
from lib import Service
from lib.net import ActionManager, Message
import zmq
class Listener(Service):
def __init__(self, thread, id, root):
super().__init__(thread, id, root)
self._logger.add_field('service', 'Listener')
self._logger.add_field('vname', self.__class__.__name__)
class ZMQListener(Listener):
def __init__(self, id, root):
super().__init__(self.__run, id, root)
def _pre_start(self):
self._running = True
self._z_ctx = zmq.Context()
self._z_sck = self._z_ctx.socket(zmq.REP)
self._z_sck.bind("tcp://%s:%s" % (self.lcnf.listen, self.lcnf.port))
def _post_stop(self):
self._z_ctx.destroy()
def __run(self):
while self._running:
try:
reply = Message()
msg = None
try:
msg = Message.load(self._z_sck.recv())
if msg:
self._logger.info("Requested %s", msg.get('action'))
action = ActionManager.get(msg.get('action'))(self._datapool)
reply.set('data', action.run(msg.get('data')))
reply.set('status', True)
except Exception as e:
self._logger.warn("Action %s failed", msg.get('action'))
self._logger.debug(e)
reply.set('data', e)
reply.set('status', False)
self._z_sck.send(reply.dump())
except Exception as e:
self._logger.error(e)