comparison bin/dmxserver @ 1009:ba47676dde49

dmxserver can receive OSC requests too Ignore-this: cafc864acd008d8bf7af75b4200fb188
author drewp@bigasterisk.com
date Sun, 08 Sep 2013 05:09:53 +0000
parents ce159eea90b5
children d5e99fee786d
comparison
equal deleted inserted replaced
1008:f7de3c3c0e9a 1009:ba47676dde49
26 from twisted.internet import reactor 26 from twisted.internet import reactor
27 from twisted.web import xmlrpc, server 27 from twisted.web import xmlrpc, server
28 import sys,time,os 28 import sys,time,os
29 from optparse import OptionParser 29 from optparse import OptionParser
30 import run_local 30 import run_local
31 import txosc.dispatch, txosc.async
31 from light9.io import ParportDMX, UsbDMX 32 from light9.io import ParportDMX, UsbDMX
32 33
33 from light9.updatefreq import Updatefreq 34 from light9.updatefreq import Updatefreq
34 from light9 import networking 35 from light9 import networking
36
37
38 class ReceiverApplication(object):
39 """
40 receive UDP OSC messages. address is /dmx/1 for dmx channel 1,
41 arguments are 0-1 floats for that channel and any number of
42 following channels.
43 """
44 def __init__(self, port, lightServer):
45 self.port = port
46 self.lightServer = lightServer
47 self.receiver = txosc.dispatch.Receiver()
48 self.receiver.addCallback("/dmx/*", self.pixel_handler)
49 self._server_port = reactor.listenUDP(
50 self.port,
51 txosc.async.DatagramServerProtocol(self.receiver),
52 interface='0.0.0.0')
53 print "Listening OSC on udp port %s" % (self.port)
54
55 def pixel_handler(self, message, address):
56 # this is already 1-based though I don't know why
57 startChannel = int(message.address.split('/')[2])
58 levels = [a.value for a in message.arguments]
59 allLevels = [0] * (startChannel - 1) + levels
60 self.lightServer.xmlrpc_outputlevels("osc@%s" % startChannel,
61 allLevels)
35 62
36 class XMLRPCServe(xmlrpc.XMLRPC): 63 class XMLRPCServe(xmlrpc.XMLRPC):
37 def __init__(self,options): 64 def __init__(self,options):
38 65
39 xmlrpc.XMLRPC.__init__(self) 66 xmlrpc.XMLRPC.__init__(self)
213 print options 240 print options
214 241
215 if options.dummy: 242 if options.dummy:
216 os.environ['DMXDUMMY'] = "1" 243 os.environ['DMXDUMMY'] = "1"
217 244
245
218 port = networking.dmxServer.port 246 port = networking.dmxServer.port
219 print "starting xmlrpc server on port %s" % port 247 print "starting xmlrpc server on port %s" % port
220 reactor.listenTCP(port,server.Site(XMLRPCServe(options))) 248 xmlrpcServe = XMLRPCServe(options)
249 reactor.listenTCP(port,server.Site(xmlrpcServe))
250
251 oscApp = ReceiverApplication(9051, xmlrpcServe)
252
221 reactor.run() 253 reactor.run()
222 254