def run(self): global timeout while run: self.run_event.wait() global observers # print "UDP Broadcast Listener starting listening routine..." global sock, wait if not sock: sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) sock.bind(('', UDP_PORT)) sock.settimeout(timeout) # reset variables rec = None address = None try: rec, address = sock.recvfrom(4048) except: # print "Timeout catched..." pass if rec and address: # print "Incoming data from ", str(address) if not address[0] in netutil.ip4_addresses(): # print "Incoming data not from own broadcast --> processing..." result, response = interpreter.interpret(rec) if result == INTERPRETER_SERVER_REQUEST: print "RaspMedia player found: ", str(address) if response[1] == TYPE_RASPMEDIA_PLAYER: wx.CallAfter(Publisher.sendMessage, 'host_found', host=address, playerName=str(response[0]), freeSpace=response[3]) elif result == INTERPRETER_FILELIST_REQUEST: wx.CallAfter(Publisher.sendMessage, 'remote_files', serverAddr=address, files=response) elif result == CONFIG_REQUEST: wx.CallAfter(Publisher.sendMessage, 'config', config=response) elif result == GROUP_CONFIG_REQUEST: wx.CallAfter(Publisher.sendMessage, 'group_config', group_config=response, playerIP=address[0]) elif result == PLAYER_UPDATE_ERROR: wx.CallAfter(Publisher.sendMessage, 'update_failed') elif result == PLAYER_BOOT_COMPLETE: wx.CallAfter(Publisher.sendMessage, 'boot_complete') stopListening() elif result == GROUP_CONFIG_ADD_ACTION: wx.CallAfter(Publisher.sendMessage, 'action_saved') elif result == GROUP_CONFIG_ACTION_DELETE: wx.CallAfter(Publisher.sendMessage, 'action_deleted') elif result == DISK_INFO_REQUEST: wx.CallAfter(Publisher.sendMessage, 'disk_info', diskInfo=response)
def sendMessage(data,host='<broadcast>',response_timeout=None): if host == '<broadcast>': ips = netutil.ip4_addresses() for ip in ips: print "Broadcasting over IP ",ip _sendMessage(data,host,ip,response_timeout) else: _sendMessage(data,host,None,response_timeout)
def sendMessage(data, host='<broadcast>', response_timeout=None): if host == '<broadcast>': ips = netutil.ip4_addresses() for ip in ips: print "Broadcasting over IP ", ip _sendMessage(data, host, ip, response_timeout) else: _sendMessage(data, host, None, response_timeout)
def run(self): global timeout while run: self.run_event.wait() global observers # print "UDP Broadcast Listener starting listening routine..." global sock, wait if not sock: sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) sock.bind(("", UDP_PORT)) sock.settimeout(timeout) # reset variables rec = None address = None try: rec, address = sock.recvfrom(4048) except: # print "Timeout catched..." pass if rec and address: # print "Incoming data from ", str(address) if not address[0] in netutil.ip4_addresses(): # print "Incoming data not from own broadcast --> processing..." result, response = interpreter.interpret(rec) if result == INTERPRETER_SERVER_REQUEST: print "RaspMedia player found: ", str(address) if response[1] == TYPE_RASPMEDIA_PLAYER: wx.CallAfter( Publisher.sendMessage, "host_found", host=address, playerName=str(response[0]), freeSpace=response[3], ) elif result == INTERPRETER_FILELIST_REQUEST: wx.CallAfter(Publisher.sendMessage, "remote_files", serverAddr=address, files=response) elif result == CONFIG_REQUEST: wx.CallAfter(Publisher.sendMessage, "config", config=response) elif result == GROUP_CONFIG_REQUEST: wx.CallAfter(Publisher.sendMessage, "group_config", group_config=response, playerIP=address[0]) elif result == PLAYER_UPDATE_ERROR: wx.CallAfter(Publisher.sendMessage, "update_failed") elif result == PLAYER_BOOT_COMPLETE: wx.CallAfter(Publisher.sendMessage, "boot_complete") stopListening() elif result == GROUP_CONFIG_ADD_ACTION: wx.CallAfter(Publisher.sendMessage, "action_saved") elif result == GROUP_CONFIG_ACTION_DELETE: wx.CallAfter(Publisher.sendMessage, "action_deleted") elif result == DISK_INFO_REQUEST: wx.CallAfter(Publisher.sendMessage, "disk_info", diskInfo=response)
def run(self): global timeout while run: self.run_event.wait() global observers # print "UDP Broadcast Listener starting listening routine..." global sock, wait if not sock: sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) sock.bind(("", UDP_PORT)) sock.settimeout(timeout) # reset variables rec = None address = None # print "INSIDE BROADCASTLISTENER:" # print "Waiting for incoming data..." try: rec, address = sock.recvfrom(4048) except: # print "Timeout catched..." pass if rec and address: # print "Incoming data from ", str(address) if not address[0] in netutil.ip4_addresses(): # print "Incoming data not from own broadcast --> processing..." result, response = interpreter.interpret(rec) if result == INTERPRETER_SERVER_REQUEST: print "Server request response - length: ", len(rec) # print ":".join("{:02x}".format(ord(c)) for c in rec) print "Server address: ", str(address) print "" if response[1] == TYPE_RASPMEDIA_PLAYER: wx.CallAfter(Publisher.sendMessage, "host_found", host=address, playerName=str(response[0])) elif result == INTERPRETER_FILELIST_REQUEST: # print "File list received!" # print response wx.CallAfter(Publisher.sendMessage, "remote_files", serverAddr=address, files=response) elif result == CONFIG_REQUEST: # print "Config data received:" wx.CallAfter(Publisher.sendMessage, "config", config=response) # print response elif result == PLAYER_UPDATE_ERROR: # print "Player update failed: " + response wx.CallAfter(Publisher.sendMessage, "update_failed") elif result == PLAYER_BOOT_COMPLETE: # print "Player BOOT_COMPLETE" wx.CallAfter(Publisher.sendMessage, "boot_complete") stopListening()
def sendBroadcast(data,wait_for_connection=False): if wait_for_connection: # wait until at least one interface is connected but not longer as a defined timeout t = 0 while t < STARTUP_IF_TIMEOUT and netutil.num_connected_interfaces() == 0: time.sleep(1) t += 1 if t % 5 == 0: print t print "Connected interface available..." ips = netutil.ip4_addresses() for ip in ips: print "Broadcasting over IP ",ip _sendMessage(data,ip) cleanExit()
def sendBroadcast(data, wait_for_connection=False): if wait_for_connection: # wait until at least one interface is connected but not longer as a defined timeout t = 0 while t < STARTUP_IF_TIMEOUT and netutil.num_connected_interfaces( ) == 0: time.sleep(1) t += 1 if t % 5 == 0: print t print "Connected interface available..." ips = netutil.ip4_addresses() for ip in ips: print "Broadcasting over IP ", ip _sendMessage(data, ip) cleanExit()
def handle(self): data = self.request[0] inData = self.request[0].strip() cSocket = self.request[1] curThread = threading.current_thread() if not self.client_address[0] in netutil.ip4_addresses(): result, msg = interpreter.interpret(data, self.client_address[0]) if result == SERVER_REQUEST: freeSpace = self.FreeDiskSpace() responseData = messages.getMessage(SERVER_REQUEST_ACKNOWLEDGE, ["-i", str(TYPE_RASPMEDIA_PLAYER), "-i", "0","-s", str(configtool.readConfig()['player_name']), "-i", str(freeSpace[0]), "-i", str(freeSpace[1])]) addr = (self.client_address[0], UDP_PORT) print "Sending response to client:" print (addr) if cSocket.sendto(responseData, addr): print "Response sent!" else: print "Sending response failed!" elif result == FILELIST_REQUEST: files = mediaplayer.getMediaFileList() args = ['-i', str(len(files))] for file in files: args.append('-s') args.append(file) responseData = messages.getMessage(FILELIST_RESPONSE,args) if cSocket.sendto(responseData, (self.client_address[0], UDP_PORT)): print "Filelist sent!" elif result == CONFIG_REQUEST: responseData = messages.getConfigMessage() if cSocket.sendto(responseData, (self.client_address[0], UDP_PORT)): print "Config sent!" elif result == GROUP_CONFIG_REQUEST: response = messages.getGroupConfigMessage() if cSocket.sendto(response, (self.client_address[0], UDP_PORT)): print "Group Config sent!" elif result == GROUP_CONFIG_ADD_ACTION: configtool.addGroupAction(msg) gConf = configtool.readGroupConfig() response = messages.getMessage(GROUP_CONFIG_ADD_ACTION) if cSocket.sendto(response, (self.client_address[0], UDP_PORT)): print "Action saved confirmation sent!" GroupManager.ReInitGroupManager(gConf) elif result == GROUP_CONFIG_ACTION_DELETE: configtool.deleteGroupAction(msg) gConf = configtool.readGroupConfig() response = messages.getMessage(GROUP_CONFIG_ACTION_DELETE) if cSocket.sendto(response, (self.client_address[0], UDP_PORT)): print "Action deleted confirmation sent!" GroupManager.ReInitGroupManager(gConf) elif result == PLAYER_UPDATE_ERROR: responseData = messages.getMessage(PLAYER_UPDATE_ERROR, ["-s", str(msg)]) cSocket.sendto(responseData, (self.client_address[0], UDP_PORT)) elif result == FILE_DATA_REQUEST: # send images from player over tcp to host in separate thread to not block other udp handling t = threading.Thread(target=self.SendImagesOverTCP, args=[self.client_address[0]]) t.daemon = True t.start() elif result == DISK_INFO_REQUEST: freeSpace = self.FreeDiskSpace() responseData = messages.getMessage(DISK_INFO_REQUEST, ["-i", str(freeSpace[0]), "-i", str(freeSpace[1])]) addr = (self.client_address[0], UDP_PORT) if cSocket.sendto(responseData, addr): print "Disk Info sent!" else: print "Sending disk info failed!" else: print "Received own broadcast... ignored."
def handle(self): data = self.request[0] inData = self.request[0].strip() cSocket = self.request[1] curThread = threading.current_thread() if not self.client_address[0] in netutil.ip4_addresses(): result, msg = interpreter.interpret(data, self.client_address[0]) if result == SERVER_REQUEST: freeSpace = self.FreeDiskSpace() responseData = messages.getMessage( SERVER_REQUEST_ACKNOWLEDGE, [ "-i", str(TYPE_RASPMEDIA_PLAYER), "-i", "0", "-s", str(configtool.readConfig()['player_name']), "-i", str(freeSpace[0]), "-i", str(freeSpace[1]) ]) addr = (self.client_address[0], UDP_PORT) print "Sending response to client:" print(addr) if cSocket.sendto(responseData, addr): print "Response sent!" else: print "Sending response failed!" elif result == FILELIST_REQUEST: files = mediaplayer.getMediaFileList() args = ['-i', str(len(files))] for file in files: args.append('-s') args.append(file) responseData = messages.getMessage(FILELIST_RESPONSE, args) if cSocket.sendto(responseData, (self.client_address[0], UDP_PORT)): print "Filelist sent!" elif result == CONFIG_REQUEST: responseData = messages.getConfigMessage() if cSocket.sendto(responseData, (self.client_address[0], UDP_PORT)): print "Config sent!" elif result == GROUP_CONFIG_REQUEST: response = messages.getGroupConfigMessage() if cSocket.sendto(response, (self.client_address[0], UDP_PORT)): print "Group Config sent!" elif result == GROUP_CONFIG_ADD_ACTION: configtool.addGroupAction(msg) gConf = configtool.readGroupConfig() response = messages.getMessage(GROUP_CONFIG_ADD_ACTION) if cSocket.sendto(response, (self.client_address[0], UDP_PORT)): print "Action saved confirmation sent!" GroupManager.ReInitGroupManager(gConf) elif result == GROUP_CONFIG_ACTION_DELETE: configtool.deleteGroupAction(msg) gConf = configtool.readGroupConfig() response = messages.getMessage(GROUP_CONFIG_ACTION_DELETE) if cSocket.sendto(response, (self.client_address[0], UDP_PORT)): print "Action deleted confirmation sent!" GroupManager.ReInitGroupManager(gConf) elif result == PLAYER_UPDATE_ERROR: responseData = messages.getMessage(PLAYER_UPDATE_ERROR, ["-s", str(msg)]) cSocket.sendto(responseData, (self.client_address[0], UDP_PORT)) elif result == FILE_DATA_REQUEST: # send images from player over tcp to host in separate thread to not block other udp handling t = threading.Thread(target=self.SendImagesOverTCP, args=[self.client_address[0]]) t.daemon = True t.start() elif result == DISK_INFO_REQUEST: freeSpace = self.FreeDiskSpace() responseData = messages.getMessage( DISK_INFO_REQUEST, ["-i", str(freeSpace[0]), "-i", str(freeSpace[1])]) addr = (self.client_address[0], UDP_PORT) if cSocket.sendto(responseData, addr): print "Disk Info sent!" else: print "Sending disk info failed!" else: print "Received own broadcast... ignored."