def toBeCH(self): listNodeNoCH = [] for i in range(len(self.network)): NodeCH = False for j in range(len(self.clusterH)): if self.network[i][0][0] == self.clusterH[j][0]: NodeCH = True if NodeCH == False and self.alive(self.network[i][0][0]) == 1: listNodeNoCH.append(self.network[i]) if len(listNodeNoCH) == 0: listNodeNoCH = copy.deepcopy(self.network) self.clusterH[:] = [] print('lisnoch') print(listNodeNoCH) e = listNodeNoCH[0][0][1] print("ener", e) coorCH = listNodeNoCH[0][0][2] for i in range(len(listNodeNoCH)): if listNodeNoCH[i][0][1] >= e: self.adrrCH = listNodeNoCH[i][0][0] e = listNodeNoCH[i][0][1] coorCH = listNodeNoCH[i][0][2] self.clusterH.append([self.adrrCH, e]) print(self.clusterH) msgHandler = MsgHandler() print(coorCH) msgCH = msgHandler.Encode_CH_Change_Msg(self.adrrCH, e, coorCH) print("New Cluster Head :", self.adrrCH, e) return self.adrrCH, msgCH
def receive(self,addr_source, port_source): code=0 s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.bind((addr_source, port_source)) s.setblocking(0) msgHandler=MsgHandler() #a=time.time() #time.sleep(5) #b=time.time() #print b-a lastSend=time.time() start_time=lastSend number_node_activated=0 while True: try: #time.sleep(1) #print str(time.time()-lastSend) if (time.time()-lastSend)>COMMUNICATION_TIMEOUT and self.HasInit==True and lastSend!=start_time: print 'lost connection with cluster head for : ' + str(time.time()-lastSend) self.Change_to_spare_CH() print 'change to spare cluster head: '+ str(self.clusterHead) msg=msgHandler.Encode_CH_Change_Msg(self.clusterHead[0],self.clusterHead[1],self.clusterHead[2]) for eachNode in self.network: code=self.send(eachNode[0], PORT, msg) lastSend=time.time() print 'Reset lastSend time: ' +str (lastSend) 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 '******************************' print 'received: ' + str(temp) print 'CH changed:' print 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 self.clusterHead=temp[0] lastSend=time.time() print 'Received network info: ' print str(self.network) print ' ' else:
for tempNode in node.network: if node.calculateCoor(node.clusterHead[2], tempNode[2]): tempNet.append(tempNode) node.network = tempNet print 'Network after change: ' print node.network print ' ' # tell the BS the information of the network node.send(BS_addr, BS_port, MS_Handler.Encode_List_Info_Msg(node.network)) # send information to the new cluster head to let him be the new cluster head for eachNode in node.network: code=node.send(eachNode[0], PORT, MS_Handler.Encode_CH_Change_Msg(node.clusterHead[0],node.clusterHead[1],node.clusterHead[2])) #print '++++++++++++++++' #print code #timerUpdateHead= CH_start=0 #elif (len(buff)==buffSize): # node.send(BS_addr, BS_port, buff) # lastSend = time.time() ''' timerUpdateHead = threading.Timer(100, node.selectNextHead) timerSendBS = threading.Timer(