diff --git a/force_bdss/core_plugins/dummy/ui_notification/ui_notification.py b/force_bdss/core_plugins/dummy/ui_notification/ui_notification.py index e12c646542301a895feb6c976c3ef03755e8433b..eb419db426cd516da30f5f953b8a52850a470d79 100644 --- a/force_bdss/core_plugins/dummy/ui_notification/ui_notification.py +++ b/force_bdss/core_plugins/dummy/ui_notification/ui_notification.py @@ -1,17 +1,31 @@ -from traits.api import Any +from traits.api import Any, List from force_bdss.api import BaseNotificationListener import zmq class UINotification(BaseNotificationListener): - _zmq_context = Any() - _zmq_socket = Any() + _context = Any() + _pub_socket = Any() + _rep_socket = Any() + _msg_cache = List() def deliver(self, model, message): - self._zmq_socket.send(("ACTION {}".format(message)).encode("utf-8")) + try: + data = self._rep_socket.recv(flags=zmq.NOBLOCK) + except zmq.ZMQError: + pass + else: + self._rep_socket.send_multipart(self._msg_cache) + + msg = "ACTION {}".format(message).encode("utf-8") + self._msg_cache.append(msg) + self._pub_socket.send(msg) def init_persistent_state(self, model): - self._zmq_context = zmq.Context() - self._zmq_socket = self._zmq_context.socket(zmq.PUB) - self._zmq_socket.bind("tcp://*:12345") + self._context = zmq.Context() + self._pub_socket = self._context.socket(zmq.PUB) + self._pub_socket.bind("tcp://*:12345") + + self._rep_socket = self._context.socket(zmq.REP) + self._rep_socket.bind("tcp://*:12346") diff --git a/utils/zmq_client.py b/utils/zmq_client.py index 60961f8f1ae05e9a07bd6bcf3c095a0ed9f0ad1e..03a2b44a3644a640ea5d1124d68f80ff760d8453 100644 --- a/utils/zmq_client.py +++ b/utils/zmq_client.py @@ -5,9 +5,20 @@ port = "5556" # Socket to talk to server context = zmq.Context() socket = context.socket(zmq.SUB) -socket.connect ("tcp://localhost:12345") - +socket.connect("tcp://localhost:12345") socket.setsockopt(zmq.SUBSCRIBE, "".encode("utf-8")) +send_socket = context.socket(zmq.REQ) +send_socket.connect("tcp://localhost:12346") +send_socket.send("hello".encode("utf-8")) +while True: + try: + data = send_socket.recv_multipart(flags=zmq.NOBLOCK) + except zmq.ZMQError: + pass + else: + print("RECOVERING CACHE", data) + break + while True: string = socket.recv()