view 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
line wrap: on
line source

""" module for clients to use for easy talking to the dmx
server. sending levels is now a simple call to
dmxclient.outputlevels(..)

client id is formed from sys.argv[0] and the PID.  """

import xmlrpclib,os,sys,socket,time
from twisted.web.xmlrpc import Proxy
_dmx=None

_id="%s-%s" % (sys.argv[0].replace('.py','').replace('./',''),os.getpid())

def outputlevels(levellist,twisted=0):
    """present a list of dmx channel levels, each scaled from
    0..1. list can be any length- it will apply to the first len() dmx
    channels.

    if the server is not found, outputlevels will block for a
    second."""

    global _dmx,_id

    if _dmx is None:
        host = os.getenv('DMXHOST', 'localhost')
        url = "http://%s:8030" % host
        if not twisted:
            _dmx=xmlrpclib.Server(url)
        else:
            _dmx = Proxy(url)

    if not twisted:
        try:
            _dmx.outputlevels(_id,levellist)
        except socket.error,e:
            print "dmx server error %s, waiting"%e
            time.sleep(1)
        except xmlrpclib.Fault,e:
            print "outputlevels had xml fault: %s" % e
            time.sleep(1)
    else:
        def err(error):
            print "dmx server error",error
            time.sleep(1)
        d = _dmx.callRemote('outputlevels',_id,levellist)
        d.addErrback(err)

    
dummy = os.getenv('DMXDUMMY')
if dummy:
    print "dmxclient: DMX is in dummy mode."
    def bogus(*args):
        pass
    outputlevels = bogus