From 90cf8a882284a68e76c4eb6f40b8de85b0b90c6f Mon Sep 17 00:00:00 2001
From: Stefano Borini <sborini@enthought.com>
Date: Wed, 9 Aug 2017 10:50:39 +0100
Subject: [PATCH] Introduced basic zeromq pub

---
 force_bdss/core_plugins/dummy/dummy_plugin.py |  7 +++++-
 .../dummy/ui_notification/__init__.py         |  0
 .../dummy/ui_notification/ui_notification.py  | 17 ++++++++++++++
 .../ui_notification_factory.py                | 23 +++++++++++++++++++
 .../ui_notification/ui_notification_model.py  |  7 ++++++
 requirements/requirements.txt                 |  1 +
 6 files changed, 54 insertions(+), 1 deletion(-)
 create mode 100644 force_bdss/core_plugins/dummy/ui_notification/__init__.py
 create mode 100644 force_bdss/core_plugins/dummy/ui_notification/ui_notification.py
 create mode 100644 force_bdss/core_plugins/dummy/ui_notification/ui_notification_factory.py
 create mode 100644 force_bdss/core_plugins/dummy/ui_notification/ui_notification_model.py

diff --git a/force_bdss/core_plugins/dummy/dummy_plugin.py b/force_bdss/core_plugins/dummy/dummy_plugin.py
index bc64438..15bc6ef 100644
--- a/force_bdss/core_plugins/dummy/dummy_plugin.py
+++ b/force_bdss/core_plugins/dummy/dummy_plugin.py
@@ -2,6 +2,9 @@ from force_bdss.api import BaseExtensionPlugin, plugin_id
 from force_bdss.core_plugins.dummy.dummy_notification_listener\
     .dummy_notification_listener_factory import \
     DummyNotificationListenerFactory
+from force_bdss.core_plugins.dummy.ui_notification.ui_notification_factory \
+    import \
+    UINotificationFactory
 from .csv_extractor.csv_extractor_factory import CSVExtractorFactory
 from .kpi_adder.kpi_adder_factory import KPIAdderFactory
 from .dummy_dakota.dakota_factory import DummyDakotaFactory
@@ -26,4 +29,6 @@ class DummyPlugin(BaseExtensionPlugin):
                 KPIAdderFactory(self)]
 
     def _notification_listener_factories_default(self):
-        return [DummyNotificationListenerFactory(self)]
+        return [DummyNotificationListenerFactory(self),
+                UINotificationFactory(self)
+                ]
diff --git a/force_bdss/core_plugins/dummy/ui_notification/__init__.py b/force_bdss/core_plugins/dummy/ui_notification/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/force_bdss/core_plugins/dummy/ui_notification/ui_notification.py b/force_bdss/core_plugins/dummy/ui_notification/ui_notification.py
new file mode 100644
index 0000000..e12c646
--- /dev/null
+++ b/force_bdss/core_plugins/dummy/ui_notification/ui_notification.py
@@ -0,0 +1,17 @@
+from traits.api import Any
+
+from force_bdss.api import BaseNotificationListener
+import zmq
+
+
+class UINotification(BaseNotificationListener):
+    _zmq_context = Any()
+    _zmq_socket = Any()
+
+    def deliver(self, model, message):
+        self._zmq_socket.send(("ACTION {}".format(message)).encode("utf-8"))
+
+    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")
diff --git a/force_bdss/core_plugins/dummy/ui_notification/ui_notification_factory.py b/force_bdss/core_plugins/dummy/ui_notification/ui_notification_factory.py
new file mode 100644
index 0000000..2af65f8
--- /dev/null
+++ b/force_bdss/core_plugins/dummy/ui_notification/ui_notification_factory.py
@@ -0,0 +1,23 @@
+from traits.api import String
+
+from force_bdss.ids import factory_id
+from force_bdss.notification_listeners.base_notification_listener_factory \
+    import \
+    BaseNotificationListenerFactory
+from .ui_notification import UINotification
+from .ui_notification_model import UINotificationModel
+
+
+class UINotificationFactory(BaseNotificationListenerFactory):
+    id = String(factory_id("enthought", "ui_notification"))
+
+    name = String("UI Notification")
+
+    def create_model(self, model_data=None):
+        if model_data is None:
+            model_data = {}
+
+        return UINotificationModel(self, **model_data)
+
+    def create_listener(self):
+        return UINotification(self)
diff --git a/force_bdss/core_plugins/dummy/ui_notification/ui_notification_model.py b/force_bdss/core_plugins/dummy/ui_notification/ui_notification_model.py
new file mode 100644
index 0000000..c20ad09
--- /dev/null
+++ b/force_bdss/core_plugins/dummy/ui_notification/ui_notification_model.py
@@ -0,0 +1,7 @@
+from force_bdss.notification_listeners.base_notification_listener_model \
+    import \
+    BaseNotificationListenerModel
+
+
+class UINotificationModel(BaseNotificationListenerModel):
+    pass
diff --git a/requirements/requirements.txt b/requirements/requirements.txt
index cfc2705..7f6b07c 100644
--- a/requirements/requirements.txt
+++ b/requirements/requirements.txt
@@ -2,3 +2,4 @@ envisage==4.6.0
 click==6.7
 six==1.10.0
 stevedore==1.24.0
+pyzmq==16.0.2
-- 
GitLab