# Server program from socket import * import sys print "Startup" try: import Growl except ImportError: print "No growl available. Downbload bindings at http://growl.info/" sys.exit(-1) notifier = Growl.GrowlNotifier('xap_display', ['display']) notifier.register() # Set the socket parameters host = "0.0.0.0" port = 3639 buf = 1500 addr = (host,port) # Create socket and bind to address UDPSock = socket(AF_INET,SOCK_DGRAM) UDPSock.bind(addr) #basic functions def xapparse(msgtxt): basemessage=msgtxt.split(chr(10)) msg={} msg['header']={} msg['body']={} msg['type']=basemessage[0] #Flags msgPart=0 msgSection="" for value in basemessage: #Store section name if msgPart==1: msgPart=2 msgSection=value.lower() msg['body'][msgSection]={} #end of header if value=="}": msgPart=1 #store header if msgPart==0: if value.find("=")>0: lbit=value[0:value.find("=")].lower().strip() rbit=value[value.find("=")+1:1000] msg['header'][lbit]=rbit if msgPart==3 and value!="": if value.find("=")>0: lbit=value[0:value.find("=")].lower().strip() rbit=value[value.find("=")+1:1000] msg['body'][msgSection][lbit]=rbit #begin of body if msgPart==2 and value=="{": msgPart=3 return msg # Receive messages while 1: data,addr = UDPSock.recvfrom(buf) if not data: print "Client has exited!" break else: msg=xapparse(data) if msg['header']['class']=="message.display": tmpmsg=msg['body']['display.text']['line1'] for i in range(2,9): if msg['body']['display.text'].has_key('line' + str(i)): tmpmsg=tmpmsg + "\n" + msg['body']['display.text']['line' + str(i)] notifier.notify('display',msg['body']['display.text']['line1'],tmpmsg) print "-------------------------------------------------------------------" print tmpmsg print "-------------------------------------------------------------------" # Close socket UDPSock.close()