def initReceive(self): code=0 s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.bind(('', PORT)) 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 ' ' s.close() break elif type_msg==5: addr_des,code=msgHandler.Decode_Broadcast_msg(data) if code==0: print '******************************' print 'Received broadcast from:' + addr_des print 'Own address' + self.addr msg=msgHandler.Encode_Info_Msg(self.addr,self.energy,self.coordinate) IsSent = self.send(addr_des, PORT,msg) else: print 'Error in decoding broadcast message.' print ' ' return code
if __name__ == '__main__': base = BaseStation() choseCH = time.time() s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) try: thread.start_new_thread(base.receive, ( '', 14800, )) except: print 'no' time.sleep(1) msgHandler = MsgHandler() msg = msgHandler.Encode_Info_Msg('12', 100, [3, 5]) try: s.sendto(msg, ('127.0.0.1', 14800)) print 'sent:' + msg except: print 'no send' '''finally: s.close()''' msg = msgHandler.Encode_Info_Msg('1', 110, [2, 8]) try: s.sendto(msg, ('127.0.0.1', 14800)) print 'sent:' + msg except: print 'no send' '''finally:
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
def selectNextHead(self): code=0 try: self.network.sort(key= lambda x : x[1], reverse=True) self.clusterHead=self.network[0] except: code=1 return code if __name__ == '__main__': buff = [] node = Node(1,'node1') MS_Handler=MsgHandler() print node.clusterHead node.send(BS_addr, BS_port, MS_Handler.Encode_Info_Msg(node.addr, node.energy, node.coordinate)) node.initReceive() print node.clusterHead #timerSendMsg = threading.Timer() #buffSize = 10 # for the cluster head beginTime = time.time() timerUpdateHead = time.time() lastSend = time.time() sensorTime = time.time() CH_start = 0 # 1: Yes ; 0: No HOST='' try: thread.start_new_thread(node.rechargeEnergyThread, ()) thread.start_new_thread(node.receive,(HOST,PORT,))