0
|
1 """ module for clients to use for easy talking to the dmx
|
|
2 server. sending levels is now a simple call to
|
|
3 dmxclient.outputlevels(..)
|
|
4
|
|
5 client id is formed from sys.argv[0] and the PID. """
|
|
6
|
|
7 import xmlrpclib,os,sys,socket,time
|
|
8 from twisted.web.xmlrpc import Proxy
|
|
9 _dmx=None
|
|
10
|
|
11 _id="%s-%s" % (sys.argv[0].replace('.py','').replace('./',''),os.getpid())
|
|
12
|
|
13 def outputlevels(levellist,twisted=0):
|
|
14 """present a list of dmx channel levels, each scaled from
|
|
15 0..1. list can be any length- it will apply to the first len() dmx
|
|
16 channels.
|
|
17
|
|
18 if the server is not found, outputlevels will block for a
|
|
19 second."""
|
|
20
|
|
21 global _dmx,_id
|
|
22
|
|
23 if _dmx is None:
|
|
24 host = os.getenv('DMXHOST', 'localhost')
|
|
25 url = "http://%s:8030" % host
|
|
26 if not twisted:
|
|
27 _dmx=xmlrpclib.Server(url)
|
|
28 else:
|
|
29 _dmx = Proxy(url)
|
|
30
|
|
31 if not twisted:
|
|
32 try:
|
|
33 _dmx.outputlevels(_id,levellist)
|
|
34 except socket.error,e:
|
|
35 print "dmx server error %s, waiting"%e
|
|
36 time.sleep(1)
|
|
37 except xmlrpclib.Fault,e:
|
|
38 print "outputlevels had xml fault: %s" % e
|
|
39 time.sleep(1)
|
|
40 else:
|
|
41 def err(error):
|
|
42 print "dmx server error",error
|
|
43 time.sleep(1)
|
|
44 d = _dmx.callRemote('outputlevels',_id,levellist)
|
|
45 d.addErrback(err)
|
|
46
|
|
47
|
|
48 dummy = os.getenv('DMXDUMMY')
|
|
49 if dummy:
|
|
50 print "dmxclient: DMX is in dummy mode."
|
|
51 def bogus(*args):
|
|
52 pass
|
|
53 outputlevels = bogus
|