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 }
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 })