annotate light8/dmxserver.py @ 112:afbdae5e1359

dmx light output is now via a separate process which light8 talks to. dmx light output is now via a separate process which light8 talks to. other programs can also submit dmx to the server
author drewp
date Wed, 11 Jun 2003 09:36:35 +0000
parents 45b12307c695
children 9ddea0c614ee
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
1 """
45b12307c695 Initial revision
drewp
parents:
diff changeset
2
45b12307c695 Initial revision
drewp
parents:
diff changeset
3 this is the only process to talk to the dmx hardware. other clients
45b12307c695 Initial revision
drewp
parents:
diff changeset
4 can connect to this server and present dmx output, and this server
45b12307c695 Initial revision
drewp
parents:
diff changeset
5 will max ('pile-on') all the client requests.
45b12307c695 Initial revision
drewp
parents:
diff changeset
6
45b12307c695 Initial revision
drewp
parents:
diff changeset
7 this server has a level display which is the final set of values that
45b12307c695 Initial revision
drewp
parents:
diff changeset
8 goes to the hardware.
45b12307c695 Initial revision
drewp
parents:
diff changeset
9
45b12307c695 Initial revision
drewp
parents:
diff changeset
10 clients shall connect to the xmlrpc server and send:
45b12307c695 Initial revision
drewp
parents:
diff changeset
11
45b12307c695 Initial revision
drewp
parents:
diff changeset
12 their PID (or some other cookie)
45b12307c695 Initial revision
drewp
parents:
diff changeset
13
45b12307c695 Initial revision
drewp
parents:
diff changeset
14 a length-n list of 0..1 levels which will represent the channel
45b12307c695 Initial revision
drewp
parents:
diff changeset
15 values for the n first dmx channels.
45b12307c695 Initial revision
drewp
parents:
diff changeset
16
45b12307c695 Initial revision
drewp
parents:
diff changeset
17 server is port 8030; xmlrpc method is called outputlevels(pid,levellist).
45b12307c695 Initial revision
drewp
parents:
diff changeset
18
45b12307c695 Initial revision
drewp
parents:
diff changeset
19 """
45b12307c695 Initial revision
drewp
parents:
diff changeset
20
45b12307c695 Initial revision
drewp
parents:
diff changeset
21 from __future__ import division
45b12307c695 Initial revision
drewp
parents:
diff changeset
22 from twisted.internet import reactor
45b12307c695 Initial revision
drewp
parents:
diff changeset
23 from twisted.web import xmlrpc, server
112
afbdae5e1359 dmx light output is now via a separate process which light8 talks to.
drewp
parents: 0
diff changeset
24
afbdae5e1359 dmx light output is now via a separate process which light8 talks to.
drewp
parents: 0
diff changeset
25 import sys
afbdae5e1359 dmx light output is now via a separate process which light8 talks to.
drewp
parents: 0
diff changeset
26 sys.path.append("../light8")
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
27 from io import ParportDMX
45b12307c695 Initial revision
drewp
parents:
diff changeset
28
45b12307c695 Initial revision
drewp
parents:
diff changeset
29 class XMLRPCServe(xmlrpc.XMLRPC):
112
afbdae5e1359 dmx light output is now via a separate process which light8 talks to.
drewp
parents: 0
diff changeset
30 def __init__(self):
afbdae5e1359 dmx light output is now via a separate process which light8 talks to.
drewp
parents: 0
diff changeset
31 self.clientlevels={} # clientPID : list of levels
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
32 self.combinedlevels=[] # list of levels, after max'ing the clients
45b12307c695 Initial revision
drewp
parents:
diff changeset
33 self.clientschanged=1 # have clients sent anything since the last send?
45b12307c695 Initial revision
drewp
parents:
diff changeset
34
45b12307c695 Initial revision
drewp
parents:
diff changeset
35 print "starting parport connection"
45b12307c695 Initial revision
drewp
parents:
diff changeset
36 self.parportdmx=ParportDMX()
112
afbdae5e1359 dmx light output is now via a separate process which light8 talks to.
drewp
parents: 0
diff changeset
37 self.parportdmx.golive()
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
38
45b12307c695 Initial revision
drewp
parents:
diff changeset
39 # start the loop
112
afbdae5e1359 dmx light output is now via a separate process which light8 talks to.
drewp
parents: 0
diff changeset
40 self.numupdates=0
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
41 self.sendlevels()
45b12307c695 Initial revision
drewp
parents:
diff changeset
42
45b12307c695 Initial revision
drewp
parents:
diff changeset
43 def sendlevels(self):
112
afbdae5e1359 dmx light output is now via a separate process which light8 talks to.
drewp
parents: 0
diff changeset
44 reactor.callLater(.02,self.sendlevels)
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
45 if self.clientschanged:
45b12307c695 Initial revision
drewp
parents:
diff changeset
46 # recalc levels
112
afbdae5e1359 dmx light output is now via a separate process which light8 talks to.
drewp
parents: 0
diff changeset
47 self.combinedlevels=[]
afbdae5e1359 dmx light output is now via a separate process which light8 talks to.
drewp
parents: 0
diff changeset
48 for chan in range(0,self.parportdmx.dimmers):
afbdae5e1359 dmx light output is now via a separate process which light8 talks to.
drewp
parents: 0
diff changeset
49 x=0
afbdae5e1359 dmx light output is now via a separate process which light8 talks to.
drewp
parents: 0
diff changeset
50 for clientlist in self.clientlevels.values():
afbdae5e1359 dmx light output is now via a separate process which light8 talks to.
drewp
parents: 0
diff changeset
51 if len(clientlist)>chan:
afbdae5e1359 dmx light output is now via a separate process which light8 talks to.
drewp
parents: 0
diff changeset
52 x=max(x,clientlist[chan])
afbdae5e1359 dmx light output is now via a separate process which light8 talks to.
drewp
parents: 0
diff changeset
53 self.combinedlevels.append(x)
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
54
112
afbdae5e1359 dmx light output is now via a separate process which light8 talks to.
drewp
parents: 0
diff changeset
55 self.numupdates=self.numupdates+1
afbdae5e1359 dmx light output is now via a separate process which light8 talks to.
drewp
parents: 0
diff changeset
56 if (self.numupdates%200)==0:
afbdae5e1359 dmx light output is now via a separate process which light8 talks to.
drewp
parents: 0
diff changeset
57 print self.combinedlevels
afbdae5e1359 dmx light output is now via a separate process which light8 talks to.
drewp
parents: 0
diff changeset
58
afbdae5e1359 dmx light output is now via a separate process which light8 talks to.
drewp
parents: 0
diff changeset
59 # now send combinedlevels (they'll get divided by 100)
afbdae5e1359 dmx light output is now via a separate process which light8 talks to.
drewp
parents: 0
diff changeset
60 self.parportdmx.sendlevels([l*100 for l in self.combinedlevels])
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
61
45b12307c695 Initial revision
drewp
parents:
diff changeset
62 def xmlrpc_echo(self,x):
45b12307c695 Initial revision
drewp
parents:
diff changeset
63 return x
45b12307c695 Initial revision
drewp
parents:
diff changeset
64
112
afbdae5e1359 dmx light output is now via a separate process which light8 talks to.
drewp
parents: 0
diff changeset
65 def xmlrpc_outputlevels(self,pid,levellist):
afbdae5e1359 dmx light output is now via a separate process which light8 talks to.
drewp
parents: 0
diff changeset
66 self.clientlevels[pid]=levellist
afbdae5e1359 dmx light output is now via a separate process which light8 talks to.
drewp
parents: 0
diff changeset
67 self.clientschanged=1
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
68 return "ok"
45b12307c695 Initial revision
drewp
parents:
diff changeset
69
112
afbdae5e1359 dmx light output is now via a separate process which light8 talks to.
drewp
parents: 0
diff changeset
70 print "starting server on 8030"
afbdae5e1359 dmx light output is now via a separate process which light8 talks to.
drewp
parents: 0
diff changeset
71 reactor.listenTCP(8030,server.Site(XMLRPCServe()))
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
72 reactor.run()
45b12307c695 Initial revision
drewp
parents:
diff changeset
73