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
Example #2
0
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,))