annotate light8/dmxclient.py @ 116:9ddea0c614ee

much prettier stdout, including a clock (so you can tell the server's running) much prettier stdout, including a clock (so you can tell the server's running) and channel updates only when the levels change, and throttled to every 100 updates even then.
author drewp
date Fri, 13 Jun 2003 06:15:28 +0000
parents 45b12307c695
children b75bfbcf5979
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
1 """ module for clients to use for easy talking to the dmx
45b12307c695 Initial revision
drewp
parents:
diff changeset
2 server. sending levels is now a simple call to
45b12307c695 Initial revision
drewp
parents:
diff changeset
3 dmxclient.outputlevels(..)
45b12307c695 Initial revision
drewp
parents:
diff changeset
4
45b12307c695 Initial revision
drewp
parents:
diff changeset
5 client id is formed from sys.argv[0] and the PID. """
45b12307c695 Initial revision
drewp
parents:
diff changeset
6
45b12307c695 Initial revision
drewp
parents:
diff changeset
7 import xmlrpclib,os,sys,socket,time
45b12307c695 Initial revision
drewp
parents:
diff changeset
8 from twisted.web.xmlrpc import Proxy
45b12307c695 Initial revision
drewp
parents:
diff changeset
9 _dmx=None
45b12307c695 Initial revision
drewp
parents:
diff changeset
10
45b12307c695 Initial revision
drewp
parents:
diff changeset
11 _id="%s-%s" % (sys.argv[0].replace('.py','').replace('./',''),os.getpid())
45b12307c695 Initial revision
drewp
parents:
diff changeset
12
45b12307c695 Initial revision
drewp
parents:
diff changeset
13 def outputlevels(levellist,twisted=0):
45b12307c695 Initial revision
drewp
parents:
diff changeset
14 """present a list of dmx channel levels, each scaled from
45b12307c695 Initial revision
drewp
parents:
diff changeset
15 0..1. list can be any length- it will apply to the first len() dmx
45b12307c695 Initial revision
drewp
parents:
diff changeset
16 channels.
45b12307c695 Initial revision
drewp
parents:
diff changeset
17
45b12307c695 Initial revision
drewp
parents:
diff changeset
18 if the server is not found, outputlevels will block for a
45b12307c695 Initial revision
drewp
parents:
diff changeset
19 second."""
45b12307c695 Initial revision
drewp
parents:
diff changeset
20
45b12307c695 Initial revision
drewp
parents:
diff changeset
21 global _dmx,_id
45b12307c695 Initial revision
drewp
parents:
diff changeset
22
45b12307c695 Initial revision
drewp
parents:
diff changeset
23 if _dmx is None:
45b12307c695 Initial revision
drewp
parents:
diff changeset
24 host = os.getenv('DMXHOST', 'localhost')
45b12307c695 Initial revision
drewp
parents:
diff changeset
25 url = "http://%s:8030" % host
45b12307c695 Initial revision
drewp
parents:
diff changeset
26 if not twisted:
45b12307c695 Initial revision
drewp
parents:
diff changeset
27 _dmx=xmlrpclib.Server(url)
45b12307c695 Initial revision
drewp
parents:
diff changeset
28 else:
45b12307c695 Initial revision
drewp
parents:
diff changeset
29 _dmx = Proxy(url)
45b12307c695 Initial revision
drewp
parents:
diff changeset
30
45b12307c695 Initial revision
drewp
parents:
diff changeset
31 if not twisted:
45b12307c695 Initial revision
drewp
parents:
diff changeset
32 try:
45b12307c695 Initial revision
drewp
parents:
diff changeset
33 _dmx.outputlevels(_id,levellist)
45b12307c695 Initial revision
drewp
parents:
diff changeset
34 except socket.error,e:
45b12307c695 Initial revision
drewp
parents:
diff changeset
35 print "dmx server error %s, waiting"%e
45b12307c695 Initial revision
drewp
parents:
diff changeset
36 time.sleep(1)
45b12307c695 Initial revision
drewp
parents:
diff changeset
37 except xmlrpclib.Fault,e:
45b12307c695 Initial revision
drewp
parents:
diff changeset
38 print "outputlevels had xml fault: %s" % e
45b12307c695 Initial revision
drewp
parents:
diff changeset
39 time.sleep(1)
45b12307c695 Initial revision
drewp
parents:
diff changeset
40 else:
45b12307c695 Initial revision
drewp
parents:
diff changeset
41 def err(error):
45b12307c695 Initial revision
drewp
parents:
diff changeset
42 print "dmx server error",error
45b12307c695 Initial revision
drewp
parents:
diff changeset
43 time.sleep(1)
45b12307c695 Initial revision
drewp
parents:
diff changeset
44 d = _dmx.callRemote('outputlevels',_id,levellist)
45b12307c695 Initial revision
drewp
parents:
diff changeset
45 d.addErrback(err)
45b12307c695 Initial revision
drewp
parents:
diff changeset
46
45b12307c695 Initial revision
drewp
parents:
diff changeset
47
45b12307c695 Initial revision
drewp
parents:
diff changeset
48 dummy = os.getenv('DMXDUMMY')
45b12307c695 Initial revision
drewp
parents:
diff changeset
49 if dummy:
45b12307c695 Initial revision
drewp
parents:
diff changeset
50 print "dmxclient: DMX is in dummy mode."
45b12307c695 Initial revision
drewp
parents:
diff changeset
51 def bogus(*args):
45b12307c695 Initial revision
drewp
parents:
diff changeset
52 pass
45b12307c695 Initial revision
drewp
parents:
diff changeset
53 outputlevels = bogus