2013/4/2 Murphy McCauley <[email protected]>
> On Apr 1, 2013, at 3:46 AM, chenli wrote:
> > Thanks. Now I add some extra events and named it as
> Fail_server_invoke.py like below:
> >
> > from pox.core import core
> > import pox.openflow.libopenflow_01 as of
> >
> > from pox.lib.revent.revent import EventMixin
> > log = core.getLogger()
> >
> > class define_event(EventMixin):
> > _eventMixin_events = set([raise_fail])
> >
> >
> > class Fail_server_invoke(object):
> > def __init__(self, intervals):
> > self.connections = set()# Attribute
> > self.interval = intervals
> > define_event.addListeners(self) #Add Listener
> > log.debug(" --------------------------------- ")
> > log.debug(" Fail_server_invoke_class wait for raise_fail event ")
> > log.debug(" --------------------------------- ")
> >
> > def _handle_raise_fail (self, event):
> > log.debug("Server failed")
> >
> >
> > But I got some problems when I use another component to add following
> lines in launch function.
> >
> > core.registerNew( Fail_server_invoke, interval)
> > define_event.raiseEvent(raise_fail("Generic"))
>
> Events are published from objects, not classes. define_event is a class
> -- you need an instance of it. Is there just one, or will there be an
> instance of it per server or something? In any case, you need an instance,
> and then you need to call addListeners and raiseEvent on the instance, not
> a class.
>
> I add the instance to the code, it 'll raise event by this object. And I
also modify the name from raise_fail to raisefail.
class define_event(EventMixin):
#_eventMixin_events = set([raise_fail])
_eventMixin_events = set([
raisefail,
])
class Fail_server_invoke(object):
def __init__(self, intervals):
self.connections = set()# Attribute
self.interval = intervals
define_event_obj = define_event()
define_event_obj.addListeners(self) #Add Listener
log.debug(" --------------------------------- ")
log.debug(" Fail_server_invoke_class wait for raise_fail event ")
log.debug(" --------------------------------- ")
def _handle_raisefail (self, event):# _handle_ function
log.debug("Server failed")
> > And I also import the module Fail_server_invoke like below:
> > from Fail_server_invoke import *
> >
> > The error message is 'NameError: name 'raise_fail' is not defined', but
> I already define 'raise_fail' in Fail_server_invoke.py
>
> Hard to say what the problem is here without the code and/or a stack trace.
>
Sorry, the stack trace is like below:
> Traceback (most recent call last):
> File "/pox/pox/boot.py", line 88, in do_import2
> __import__(name, globals(), locals())
> File "/pox/ext/server_check.py", line 21, in <module>
> from Fail_server_invoke import *
> File "/pox/ext/Fail_server_invoke.py", line 12, in <module>
> class define_event(EventMixin):
> File "/pox/ext/Fail_server_invoke.py", line 16, in define_event
> raisefail,
> NameError: name 'raisefail' is not defined
> Could not import module: server_check
>
> Thanks for helping.
>
> Hope that helps.
>
> -- Murphy
>
>