コード例 #1
0
def colorPage(type, path, headers, args):
    socketVal = {'r': 0, 'g':0, 'b':0}
    nodelist = []
    random_mode = False
    change_speed = 6
    change_speed_changed = False
    if args is not None:
        for arg in args.split("&"):
            argsp = arg.split('=')
            argkey = argsp[0].lower()
            argval = ""
            if len(argsp) > 1: argval = unquote(argsp[1])
            argval = argval.replace('+', ' ')
            print "key: "+argkey+" val: "+argval
            if argkey == "red":
                socketVal['r'] = int(argval)
            elif argkey == "green":
                socketVal['g'] = int(argval)
            elif argkey == "blue":
                socketVal['b'] = int(argval)
            elif argkey == "speed":
                change_speed = int(argval)
                change_speed_changed = True
            elif argkey == "color":
                if colors.has_key(argval.lower()):
                    socketVal = colors[argval.lower()]
            elif argkey == "node":
                nodelist.append(argval)
            elif argkey == "random":
                random_mode = True
            elif argkey == "quit":
                print "Stopping server"
                sys.exit()
            
    colorList = ""
    ckeys = colors.keys()
    ckeys.sort(cmp=lambda x,y:RGBtoHSV(colors[x]['r'],colors[x]['g'],colors[x]['b'])[0] - RGBtoHSV(colors[y]['r'],colors[y]['g'],colors[y]['b'])[0])
    for c in ckeys:
        comps = colors[c]
        luma=comps['r']*.3 + comps['g']*.59 + comps['b']*.11
        if luma < 128: textcolor = 'white' 
        else: textcolor = 'black'
        colorList += "<DIV style=\"background-color:#%02x%02x%02x;color:%s;text-align:center;margin:2px 0px;cursor:pointer;\" onclick=\"setcolor(this)\">%s</DIV>" % (comps['r'], comps['g'], comps['b'], textcolor, c)
    return web_template % {
            'red':socketVal['r'], 'green':socketVal['g'], 'blue':socketVal['b'],'speed':change_speed,
            'nodes':[], 'colors':colorList }
コード例 #2
0
def colorPage(args):
    socketVal = {'r': 0, 'g':0, 'b':0, 'r2':0, 'g2':0, 'b2':0}
    nodelist = []
    random_mode = False
    change_speed = 6
    change_speed_changed = False
    
    if args is not None:
        ignrgb = False
        for arg in args.keys():
            argkey = arg.lower()
            argval = args[arg]
            if argval is not None: argval = unquote(argval)
            print "key: "+argkey+" val: "+argval
            if not ignrgb and argkey == "red":
                socketVal['r'] = int(argval)
            elif not ignrgb and argkey == "green":
                socketVal['g'] = int(argval)
            elif not ignrgb and argkey == "blue":
                socketVal['b'] = int(argval)
            elif not ignrgb and argkey == "red2":
                socketVal['r2'] = int(argval)
            elif not ignrgb and argkey == "green2":
                socketVal['g2'] = int(argval)
            elif not ignrgb and argkey == "blue2":
                socketVal['b2'] = int(argval)
            elif argkey == "speed":
                change_speed = int(argval)
                change_speed_changed = True
            elif argkey == "color":
                if colors.has_key(argval.lower()):
                    socketVal = colors[argval.lower()]
                    for k in ('r','g','b'):
                        socketVal[k+"2"] = socketVal[k]
                    ignrgb = True
            elif argkey == "node":
                nodelist.append(argval)
            elif argkey == "random":
                random_mode = True
            elif argkey == "quit":
                print "Stopping server"
                sd.close()
                exitRequest = True
                sys.exit()
                return (digiweb.TextHtml, "exiting")
    
    if random_mode:
        socketdata = "n"
    else:
        if args is None or not args.has_key("red2"):
            socketdata = "A"+"".join([k+str(socketVal[k]) for k in ('r','g','b')])
        else:
            try:
                socketdata = "F"+"".join([k+str(socketVal[k]) for k in ('r','g','b')])
            except:
                pass
            try:
                socketdata += "C"+"".join([k[0]+str(socketVal[k]) for k in ('r2','g2','b2')])
            except:
                pass

        if change_speed_changed:
            socketdata += "s"+str(change_speed)
    
    socketdata += "\n"
    print "sending "+socketdata+" to "+str(nodelist) + "\n"
        
    if 'all' in nodelist:
        nodelist = nodeData.keys()

    for node in nodelist:
        try:
            sd.sendto(socketdata, 0, (node, 0xe8, 0xc105, 0x11))
        except:
            print "Failed to send to "+node
                
    nodeList = ""
    for node in nodeData.keys():
        try:
            nodeline = "<OPTION value='"+node+"'"
            if node in nodelist:
                nodeline += " selected"
            nodeline += ">"+\
                nodeData[node]['nodeId']+\
                "</OPTION>"
            nodeList += nodeline
        except:
            pass
    
    colorList = ""
    ckeys = colors.keys()
    ckeys.sort()
    for c in ckeys:
        comps = colors[c]
        luma=comps['r']*.3 + comps['g']*.59 + comps['b']*.11
        if luma < 128: textcolor = 'white' 
        else: textcolor = 'black'
        colorEntry = "<DIV style=\"background-color:#%02x%02x%02x;color:%s;text-align:center;margin:2px 0px;cursor:pointer;\" onclick=\"setcolor(this)\">%s</DIV>" % (comps['r'], comps['g'], comps['b'], textcolor, c)
        colorList += colorEntry

    if len(nodelist) > 0:
        try:
            nodeaddr = nodelist[0]
            nodeData[nodeaddr]['red'] = socketVal['r']
            nodeData[nodeaddr]['green'] = socketVal['g']
            nodeData[nodeaddr]['blue'] = socketVal['b']
            nodeData[nodeaddr]['red2'] = socketVal['r2']
            nodeData[nodeaddr]['green2'] = socketVal['g2']
            nodeData[nodeaddr]['blue2'] = socketVal['b2']
            if change_speed_changed:
                nodeData[nodeaddr]['speed'] = change_speed
        except:
            exctype, value = sys.exc_info()[:2]
            print "failed to update nodeData: "+str(exctype)+", "+str(value)
    elif len(nodeData) > 0:
        nodeaddr = nodeData.keys()[0]
        socketVal = { 'r': nodeData[nodeaddr]['red'],
            'g': nodeData[nodeaddr]['green'],
            'b': nodeData[nodeaddr]['blue'],
            'r2': nodeData[nodeaddr]['red2'],
            'g2': nodeData[nodeaddr]['green2'],
            'b2': nodeData[nodeaddr]['blue2'] }

    return (digiweb.TextHtml, web_template % {
            'red':socketVal['r'], 'green':socketVal['g'], 'blue':socketVal['b'],'speed':change_speed,
            'red2':socketVal['r2'], 'green2':socketVal['g2'], 'blue2':socketVal['b2'],
            'nodes':nodeList, 'colors':colorList })