Mercurial > code > home > repos > light9
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 |