summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--ryu/base/app_manager.py10
-rw-r--r--ryu/controller/event.py12
2 files changed, 22 insertions, 0 deletions
diff --git a/ryu/base/app_manager.py b/ryu/base/app_manager.py
index d977b409..f20b87cc 100644
--- a/ryu/base/app_manager.py
+++ b/ryu/base/app_manager.py
@@ -62,6 +62,7 @@ class RyuApp(object):
self.observers = {}
self.threads = []
self.events = Queue()
+ self.replies = Queue()
self.threads.append(gevent.spawn(self._event_loop))
def register_handler(self, ev_cls, handler):
@@ -84,6 +85,15 @@ class RyuApp(object):
return observers
+ def send_reply(self, rep):
+ SERVICE_BRICKS[rep.dst].replies.put(rep)
+
+ def send_request(self, req):
+ req.src = self.name
+ self.send_event(req.dst, req)
+ # going to sleep for the reply
+ return self.replies.get()
+
def _event_loop(self):
while True:
ev = self.events.get()
diff --git a/ryu/controller/event.py b/ryu/controller/event.py
index 59740f51..4d583d9d 100644
--- a/ryu/controller/event.py
+++ b/ryu/controller/event.py
@@ -18,3 +18,15 @@
class EventBase(object):
# Nothing yet
pass
+
+
+class EventRequestBase(EventBase):
+ def __init__(self, dst):
+ super(EventRequestBase, self).__init__()
+ self.dst = dst
+
+
+class EventReplyBase(EventBase):
+ def __init__(self, dst):
+ super(EventReplyBase, self).__init__()
+ self.dst = dst