2013/4/2 Murphy McCauley <murphy.mccau...@gmail.com>

> 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
>
>

Reply via email to