def receive(self, addr_source, port_source): print 'thread start' code = 0 s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.bind((addr_source, port_source)) msgHandler = MsgHandler() while True: data, addr = s.recvfrom(1024) print 'received' + data type_msg = msgHandler.Decode(data) if type_msg == 1: temp, code = msgHandler.Decode_CH_Change_Msg(data) if code == 0: self.clusterHead = temp self.RefreshNetwork(temp) print 'CH changed:' + self.clusterHead else: print "error in decoding CH change msg." elif type_msg == 2: temp, code = msgHandler.Decode_List_Info_Msg(data) if code == 0: self.network = temp print self.network else: print "error in decoding list of info msg" elif type_msg == 3: temp, code = msgHandler.Decode_Info_Msg(data) if code == 0: print '-----------------3.--------' Ischanged = self.RefreshNode(temp) print temp print Ischanged else: print 'Error in decoding info msg' elif type_msg == 4: temp, code = msgHandler.Decode_Sensor_Data(data) if code == 0: self.allSensorData = self.allSensorData + temp with self.networkLock: for i in range(len(self.network)): if self.network[i][0][0] == self.addrCH: self.network[i][0][3] = time.time() print temp else: print 'Error in decoding sensor data' elif type_msg == 0: print 'error in decode message'
def receive(self,addr_source, port_source): code=0 s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.bind((addr_source, port_source)) msgHandler=MsgHandler() while True: data, addr = s.recvfrom(1024) #print 'received' + data type_msg=msgHandler.Decode(data) if type_msg==1: temp,code=msgHandler.Decode_CH_Change_Msg(data) if code==0: judge = self.calculateCoor(temp[2], self.coordinate) if judge: self.clusterHead=temp self.RefreshNetwork(temp) print '******************************' print 'Received: CH change message: ' + str(temp) else: newInfo = [self.addr, self.energy, self.coor] self.clusterHead = newInfo self.RefreshNetwork(newInfo) print '******************************' print 'Received: CH change message: ' + str(newInfo) print ' ' print 'CH is changed to: ' + str(self.clusterHead) print ' ' else: print "Error in decoding CH change msg." print ' ' elif type_msg==2: temp,code=msgHandler.Decode_List_Info_Msg(data) if code==0: self.network=temp print 'Received: ' + addr_source print self.network else: print "error in decoding list of info msg" elif type_msg==3: temp,code=msgHandler.Decode_Info_Msg(data) if code==0: Ischanged=self.RefreshNetwork(temp) print '******************************' #print temp[0] print 'Received Info msg from: ' + str(temp[0]) print ' ' #print temp #print Ischanged else: print 'Error in decoding info msg' print ' ' elif type_msg==4: temp,code=msgHandler.Decode_Sensor_Data(data) if code==0: self.allSensorData=self.allSensorData+temp print '******************************' print 'Received sensor data: ' + str(temp) print ' ' else: print 'Error in decoding sensor data' print ' ' #TODO: boradcast response elif type_msg==5: addr_des,code=msgHandler.Decode_Broadcast_msg(data) if code==0: print '******************************' print 'Received broadcast from:' + addr_des print ' ' msg=msgHandler.Encode_Info_Msg(self.addr,self.energy,self.coordinate) IsSent = self.send(addr_des, PORT, msg) #print 'IsSent; ' + str(IsSent) else: print 'Error in decoding broadcast message.' print ' ' elif type_msg==0: print 'Error in decode message: ' + data print ' ' #analyze data # connect to the speicified address and port # receive message # analyze message # store important information into the msg # return action status code # 0: success # 1: fail return code