[Twisted-Python] simple multicast beacon problem ...

I'm relatively new to Twisted and am struggling to create a multicast beacon with the application framework. This beacon simply sends out a datagram every second, no listening at all. I've appended a short sample program and traceback to this email in the hope that someone can point out the presumably simple usage error. For the life of me I can't spot it. Here's the last bit of the traceback: 2005/04/12 13:15 EST [-] p = udp.MulticastPort(port, protocol, interface, maxPacketSize, self) 2005/04/12 13:15 EST [-] File "/System/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/site-packages/twisted/internet/udp.py", line 66, in __init__ 2005/04/12 13:15 EST [-] assert isinstance(proto, protocol.DatagramProtocol) 2005/04/12 13:15 EST [-] AssertionError A quick debug shows that proto is HeartBeatFactory rather than its class attribute protocol. Any help is much appreciated. Cheers, Darran -- Darran Edmundson (darran.edmundson@anu.edu.au) ANU Supercomputer Facility Vizlab Australian National University, Canberra, ACT 2600 tel: +61 2 6125-0517 fax: +61 2 6125-5088 ------------------------------------- application.py --------------------------------------------------- from twisted.internet import protocol, reactor from twisted.internet import threads from twisted.application import internet, service class HeartBeat(protocol.DatagramProtocol): def start_protocol(self): self.send_datagram() def send_datagram(self): self.transport.write("message",(self.factory.group,self.factory.port)) self.reactor.callLater(1,self.send_datagram) class HeartBeatFactory(protocol.ServerFactory): protocol = HeartBeat def __init__(self,group,port): self.group = group self.port = port factory = HeartBeatFactory("234.32.23.1", 9999) application = service.Application('HeartBeat') service = internet.MulticastServer(9999, factory, interface='0.0.0.0') service.setServiceParent(application) ------------------------------------- traceback --------------------------------------------------- $ python twistd.py -noy application.py 2005/04/12 13:15 EST [-] Log opened. 2005/04/12 13:15 EST [-] twistd 1.1.1 (/usr/bin/python 2.3.0) starting up 2005/04/12 13:15 EST [-] reactor class: twisted.internet.default.SelectReactor 2005/04/12 13:15 EST [-] Loading application.py... 2005/04/12 13:15 EST [-] Loaded. 2005/04/12 13:15 EST [-] Traceback (most recent call last): 2005/04/12 13:15 EST [-] File "/System/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/site-packages/twisted/scripts/twistd.py", line 192, in ? 2005/04/12 13:15 EST [-] run() 2005/04/12 13:15 EST [-] File "/System/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/site-packages/twisted/scripts/twistd.py", line 188, in run 2005/04/12 13:15 EST [-] app.run(runApp, ServerOptions) 2005/04/12 13:15 EST [-] File "/System/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/site-packages/twisted/application/app.py", line 200, in run 2005/04/12 13:15 EST [-] runApp(config) 2005/04/12 13:15 EST [-] File "/System/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/site-packages/twisted/scripts/twistd.py", line 179, in runApp 2005/04/12 13:15 EST [-] startApplication(config, application) 2005/04/12 13:15 EST [-] File "/System/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/site-packages/twisted/scripts/twistd.py", line 163, in startApplication 2005/04/12 13:15 EST [-] service.IService(application).privilegedStartService() 2005/04/12 13:15 EST [-] File "/System/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/site-packages/twisted/application/service.py", line 188, in privilegedStartService 2005/04/12 13:15 EST [-] service.privilegedStartService() 2005/04/12 13:15 EST [-] File "/System/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/site-packages/twisted/application/internet.py", line 53, in privilegedStartService 2005/04/12 13:15 EST [-] self._port = self._getPort() 2005/04/12 13:15 EST [-] File "/System/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/site-packages/twisted/application/internet.py", line 68, in _getPort 2005/04/12 13:15 EST [-] return getattr(reactor, 'listen'+self.method)(*self.args, **self.kwargs) 2005/04/12 13:15 EST [-] File "/System/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/site-packages/twisted/internet/default.py", line 210, in listenMulticast 2005/04/12 13:15 EST [-] p = udp.MulticastPort(port, protocol, interface, maxPacketSize, self) 2005/04/12 13:15 EST [-] File "/System/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/site-packages/twisted/internet/udp.py", line 66, in __init__ 2005/04/12 13:15 EST [-] assert isinstance(proto, protocol.DatagramProtocol) 2005/04/12 13:15 EST [-] AssertionError

On Tue, 12 Apr 2005 13:29:11 +1000, Darran Edmundson <darran.edmundson@anu.edu.au> wrote:
I'm relatively new to Twisted and am struggling to create a multicast beacon with the application framework. This beacon simply sends out a datagram every second, no listening at all. I've appended a short sample program and traceback to this email in the hope that someone can point out the presumably simple usage error. For the life of me I can't spot it. Here's the last bit of the traceback:
[snip]
UDP and multicast don't use factories. Instantiate your DatagramProtocol directly and pass it to listenMulticast(). Jp
participants (2)
-
Darran Edmundson
-
Jp Calderone