On Tue, Mar 05, 2013 at 07:34:27AM +0900, FUJITA Tomonori wrote: > On Fri, 22 Feb 2013 19:14:19 +0900 > YAMADA Hideki <[email protected]> wrote: > > > Now, direct method calling is used for app-to-app communication, > > via _CONTEXTS parameters. > > This patch is more loose coupling way than direct way. > > > > Signed-off-by: YAMADA Hideki <[email protected]> > > --- > > ryu/base/app_manager.py | 29 +++++++++++++++++++++++++++++ > > ryu/controller/event.py | 17 +++++++++++++++++ > > 2 files changed, 46 insertions(+), 0 deletions(-) > > As we discussed off-line, let's do in the simpler way. > > = > >From 31c1449b18cf8c31f8cd9526d9f84645645c0e4e Mon Sep 17 00:00:00 2001 > From: FUJITA Tomonori <[email protected]> > Date: Mon, 4 Mar 2013 14:02:07 -0800 > Subject: [PATCH] Add request/reply event support > > What most of applications need to do is: > > 1) register a handler to catch a specific event > 2) The handler does multiple asynchronous tasks (query dbs, configures > switches, etc). > > 2) can be implemented in an asynchronous way, that is sending multiple > requests at the same time. However, I don't think most of developers > need to do or want to do. The API to handle multiple asynchrnous tasks > in a synchronous way is more handy. > > Signed-off-by: FUJITA Tomonori <[email protected]> > --- > ryu/base/app_manager.py | 10 ++++++++++ > ryu/controller/event.py | 12 ++++++++++++ > 2 files changed, 22 insertions(+) > > diff --git a/ryu/base/app_manager.py b/ryu/base/app_manager.py > index d977b40..f20b87c 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 59740f5..4d583d9 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 self.src = None > + > + > +class EventReplyBase(EventBase): > + def __init__(self, dst): > + super(EventReplyBase, self).__init__() > + self.dst = dst > -- > 1.7.12.4 (Apple Git-37) > > > > ------------------------------------------------------------------------------ > Everyone hates slow websites. So do we. > Make your web apps faster with AppDynamics > Download AppDynamics Lite for free today: > http://p.sf.net/sfu/appdyn_d2d_feb > _______________________________________________ > Ryu-devel mailing list > [email protected] > https://lists.sourceforge.net/lists/listinfo/ryu-devel >
-- yamahata ------------------------------------------------------------------------------ Everyone hates slow websites. So do we. Make your web apps faster with AppDynamics Download AppDynamics Lite for free today: http://p.sf.net/sfu/appdyn_d2d_feb _______________________________________________ Ryu-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/ryu-devel
