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
Example #2
0
 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'
Example #3
0
 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'