Thanks Murphy, I've ported it to my system and it does work well. I had a
trial with the SimpleXMLRPCServer as  indicated below

        #self.server = SimpleXMLRPCServer.SimpleXMLRPCServer(("localhost",
8080))
        #self.server.register_instance(self)

I was running it from  def __init__() of samplerouting and it seemed to
work, but judging from the trials I have had with twisted it wasn't the
case. Twisted is a better option.

Chris


On Tue, Aug 23, 2011 at 9:04 AM, Murphy McCauley <jam...@nau.edu> wrote:

> You couldn't have gotten too much closer without it working.  Attached is a
> modified version of pyswitch with an example xmlrpc service (running on
> port
> 11111) with the echo and add methods, plus a couple methods to actually
> enable
> and disable the switch functionality.
>
> -- Murphy
>
> On Monday, August 22, 2011 07:01:50 AM chris oleke wrote:
> > Hi
> >
> > I opted to use twisted but I'm not having any luck as well. My
> application
> > is an extension of the samplerouting component. I'm still new to python
> so
> > not exactly certain on how to run another class within the samplerouting
> > component. I have had a couple of tries including creating a class
> outside
> > samplerouting but no response. One of my trials had NOX return an error
> > involving pyoxidereactor. I had a look at the webserver.py but didn't
> > really get much help from it. I tried to setup a class in my
> samplerouting
> >  def install() like this:
> >
> > def install()
> >      class Example(xmlrpc.XMLRPC):
> >             def __init__(self):
> >                 xmlrpc.XMLRPC.__init__(self)
> >                 self.component = component
> >
> >             def xmlrpc_echo(self,x):
> >                 return x
> >         self.r = self.Example(self)
> >         reactor.listenTCP(8080, server.Site(r))
> >         reactor.run()
> > It returned this error:
> >
> > 00002|nox|ERR:Cannot change the state of 'samplerouting' to INSTALLED:
> > 'samplerouting' ran into an error:
> >         cannot install the Python component: Traceback (most recent call
> > last):
> >           File "./nox/netapps/routing/samplerouting.py", line 130, in
> > install
> >             self.r = self.Example(self)
> >         AttributeError: SampleRouting instance has no attribute 'Example'
> >
> > The other trials I have had that return no errors seem to have no
> response
> > with my third party application. I still get a "connection refused"
> > response. I still think I'm making the call in a wrong way so would
> > appreciate any advice.
> >
> > Regards,
> > Chris
> >
> > On Sat, Aug 20, 2011 at 11:19 AM, Murphy McCauley <jam...@nau.edu>
> wrote:
> > > I assume the typo on the last line isn't in your actual code
> > > (server.serve_forever()).  But yes, this won't work.
> > > server.serve_forever() will block forever, freezing NOX.  And you can't
> > > just put it in another thread because that will crash or hang or cause
> > > other bad things to happen in NOX.
> > >
> > > You should be able to make this work by setting the server timeout to
> 0,
> > > and periodically calling its handle_request() inside a timer you'd
> > > created with post_callback().  However, this essentially would poll for
> > > requests at some rate and is not a terribly efficient or elegant
> > > solution, and I wouldn't suggest doing it if you don't have to...
> > >
> > > And I don't think you have to -- the recommended way to do XML-RPC in
> NOX
> > > would be to use Twisted.  The following page has some info on doing
> > > XML-RPC in Twisted:
> > > http://twistedmatrix.com/documents/current/web/howto/xmlrpc.html
> > >
> > > That might more or less just work in NOX.  If it doesn't, take a look
> in
> > > NOX's webserver.py to fill in any blanks.
> > >
> > > Hope that helps.
> > >
> > > -- Murphy
> > >
> > >
> > > On Aug 20, 2011, at 12:26 AM, chris oleke wrote:
> > >
> > > Hi, I've got another question still related to my NOX application. It
> is
> > > supposed to receive replies from the third party application through
> use
> > > of XML-RPC. I have had a go at the SimpleXMLRPCServer but seem to have
> > > no connection established, my thought is that I'm calling it the wrong
> > > way. This is how I call it from my application
> > >
> > > def run(self):
> > >         self.server = SimpleXMLRPCServer(("localhost", 8080),
> > >
> > > requestHandler=RequestHandler)
> > >
> > >         self.register_introspection_functions()
> > >         self.register_function(test_xml, 'reply_one.test')
> > >         server.server_forever()
> > >
> > > test_xml is a function  defined within my application. Any help I can
> get
> > > will be highly appreciated.
> > >
> > > Regards,
> > > Chris
> > >
> > > On Tue, Aug 16, 2011 at 7:38 AM, chris oleke <chrisol...@gmail.com>
> wrote:
> > >> Thanks Murphy!! I have tried testing it and I can receive the Hello
> > >> World continuously on my other application. But since I'm sending the
> > >> flows from a separate function, I have made some modifications and
> > >> called the sock.connect from my component's init() and I can receive
> > >> the flows continuously.
> > >>
> > >> On Tue, Aug 16, 2011 at 6:44 AM, Murphy McCauley <jam...@nau.edu>
> wrote:
> > >>> If the application you're working with requires that you close the
> > >>> socket, then it seems like you should be creating, connecting,
> sending
> > >>> on, and closing a new socket every ten seconds in response to your
> > >>> flow stats coming in.
> > >>>
> > >>> It looks like you may be not creating and connecting a new socket
> after
> > >>> the first run, and are trying to reuse a socket that you'd closed
> (made
> > >>> possible by the fact that you're saving a reference to an old one as
> > >>> self.sock, which you can never actually reuse since you close it).
> > >>>
> > >>> I put the following code in an app (and then kick it off by calling
> it
> > >>> in my Component's install()), and it seems to work just fine:
> > >>>
> > >>> def handle_timer (self):
> > >>>   import socket
> > >>>   self.post_callback(5, self.handle_timer)
> > >>>   sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
> > >>>   sock.connect(("",5000))
> > >>>   sock.send("Hello world!\n")
> > >>>   sock.close()
> > >>>
> > >>> Can you test if this seems to work for you?  (I just run "nc -lk
> 5000"
> > >>> to give it something to connect to.)
> > >>>
> > >>> As a sidenote: These calls are blocking, and it's not nice to block
> the
> > >>> thread.  Using Twisted is the preferred solution.  But since this is
> > >>> only periodic and is connecting to localhost, etc., I am not sure
> > >>> that's worth worrying about.  As I said, it has been a long time
> since
> > >>> I have looked at NOX's threading stuff, but nothing immediately comes
> > >>> to mind about why this wouldn't work.
> > >>>
> > >>> -- Murphy
> > >>>
> > >>> On Aug 15, 2011, at 2:15 PM, chris oleke wrote:
> > >>>
> > >>> Murphy, the thing is I'd pretty much want to maintain the sockets
> that
> > >>> I'm using at the moment since the third party application is tailored
> > >>> to work with them. When I send the data from NOX, I have to close the
> > >>> sockets because the data won't be received on the other end if the
> > >>> sockets remain open. My flow stats are generated every 10 seconds so
> > >>> my aim is to have them sent continously. I had previously tried using
> > >>> sock.setblocking(0) but encountered an error *"operation already in
> > >>> progress"* so abandoned using it.
> > >>>
> > >>> On Sat, Aug 13, 2011 at 2:34 AM, Murphy McCauley <jam...@nau.edu>
> wrote:
> > >>>> It has been long enough since I've looked at the co-op threading in
> > >>>> NOX that I don't immediately know what the problem you're having
> with
> > >>>> the file descriptors going away is.  You're sure you're not calling
> > >>>> close() on them?
> > >>>>
> > >>>>  You could try setting the socket to non-blocking mode with
> > >>>>
> > >>>> sock.setblocking(0).
> > >>>>
> > >>>> It might be possible to get asynccore to work, but I think it'd
> > >>>> probably be some trouble.  Twisted, on the other hand, should more
> or
> > >>>> less just work.
> > >>>>
> > >>>>  I think you can probably look at the NOX webservice stuff for a bit
> > >>>>  of an
> > >>>>
> > >>>> example, but it shouldn't be much different than any other Twisted
> > >>>> code.
> > >>>>
> > >>>> Or if you would be okay with communicating with the other process
> via
> > >>>> JSON strings, you could use jsonmessenger.  Look in monitoring.py
> from
> > >>>> the monitoring component for an example.
> > >>>>
> > >>>> Hope that helps.
> > >>>>
> > >>>> -- Murphy
> > >>>>
> > >>>> On Aug 12, 2011, at 2:03 PM, chris oleke wrote:
> > >>>>
> > >>>> Hi
> > >>>>
> > >>>>
> > >>>> Hopefully this is still within the Nox domain. I have a python
> > >>>> application that is using sockets to send out flows that I have
> > >>>> obtained from a flow_stats_in_event to an application external of
> > >>>> Nox. This is how I’m doing it
> > >>>> self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
> > >>>> self.sock.connect(("",5000))
> > >>>> self.sock.send(repr(flows))
> > >>>> self.sock.close()
> > >>>>
> > >>>> Unfortunately I can only send the flows once before the sockets
> close
> > >>>> after which I get the errors below
> > >>>> self.sock.send(repr(flows))
> > >>>>
> > >>>>   File "/usr/lib/python2.6/socket.py", line 167, in _dummy
> > >>>>
> > >>>>     raise error(EBADF, 'Bad file descriptor')
> > >>>>
> > >>>> error: [Errno 9] Bad file descriptor
> > >>>>
> > >>>>
> > >>>> It’s obviously as a result of trying to send information out on a
> > >>>> socket that’s been closed. I have tried to look at asyncore and see
> > >>>> if I can have an asynchronous socket but haven’t had any luck and my
> > >>>> application’s seems to lock/freeze the few times I have tried. Is
> > >>>> there a way I can have the socket remain connected so I can have
> > >>>> flows sent constantly and also be able to receive data when sent
> from
> > >>>> the external application. I would like a demonstration as well if
> > >>>> it’s possible.
> > >>>>
> > >>>>
> > >>>> Thanks
> > >>>>
> > >>>> Chris
> > >>>> _______________________________________________
> > >>>> nox-dev mailing list
> > >>>> nox-dev@noxrepo.org
> > >>>> http://noxrepo.org/mailman/listinfo/nox-dev
>
_______________________________________________
nox-dev mailing list
nox-dev@noxrepo.org
http://noxrepo.org/mailman/listinfo/nox-dev

Reply via email to