def start_simulation(ndict, cdict, sink_node): lrec = LogRecord('packetlogger.txt') lrec.truncate_log() beginner_node = 1 queues = Queues() #Create dissipation event dissipation_event = threading.Event() transmission_event = threading.Event() transmission_done_event = threading.Event() #initialize the beginner, node and the sink threads try: for nod in neighbor_dict: if nod == beginner_node: bthread = node.Node(beginner_node, cdict[beginner_node], ndict, queues, dissipation_event, transmission_event, True) else: exec("Thread_" + str(nod) + " = node.Node(" + str(nod) + ", " + str(cdict[nod]) + ",ndict, queues, dissipation_event, transmission_event)") except Exception: print "Thread already started" #Get the node level dictionary of all nodes according to their neighbors node_level_dict = thread_start_order(ndict, beginner_node) for keyy in node_level_dict: #Get unique values of node IDs in the list node_set = set(node_level_dict[keyy]) unique_node_list = list(node_set) node_level_dict.update({keyy: unique_node_list}) #Start the beginner thread bthread.start() time.sleep(1) #Start rest of the threads level-wise wait_constant = 0.2 popped_level_0 = node_level_dict.pop(0) for key in node_level_dict: for every_node in node_level_dict[key]: try: thname = "Thread_" + str(every_node) exec("alive_status = " + thname + ".isAlive()") if not alive_status: exec("Thread_" + str(every_node) + ".start()") except Exception: print "Thread already started" time.sleep(wait_constant * key) sthread = sink.Sink(sink_node, cdict[sink_node], ndict, queues, dissipation_event, transmission_event, transmission_done_event) print "Starting the sink node" sthread.start() result = start_transmission(queues, transmission_event) transmission_done_event.wait() return
def __init__(self, nodeID, coordinates, neighbor_dict, q_obj, dissipation_event, transmission_event, transmission_done_event): threading.Thread.__init__(self) self.nodeID = nodeID self.coordinates = coordinates self.neighbor_dict = neighbor_dict self.q_obj = q_obj self.dissipation_event = dissipation_event self.transmission_event = transmission_event self.transmission_done_event = transmission_done_event self.sink_pattern = '51NK' self.pend_on_queue_time = 600 self.packet_logger = LogRecord('packetlogger.txt') self.sent_flag = 'SENT' self.received_flag = 'RCVD'
def __init__(self, nodeID, coordinates, neighbor_dict, q_obj, dissipation_event, transmission_event, beginner=False): threading.Thread.__init__(self) self.nodeID = nodeID self.coordinates = coordinates self.neighbor_dict = neighbor_dict self.beginner = beginner self.q_obj = q_obj self.dissipation_event = dissipation_event self.transmission_event = transmission_event self.queue = None self.pend_on_queue_time = 480 self.packet_types = {1: 'INIT_ROUTE', 2: 'PATTERN', 3: 'DATA'} self.packet_logger = LogRecord('packetlogger.txt') self.sent_flag = 'SENT' self.received_flag = 'RCVD'