def main(): SLAVE_TIMEOUT = 2 SLAVE_MESSAGE_TIMEOUT = 1 #instantiating classes message_handler = MessageHandler() master_handler = MasterHandler() active_master = False while True: #try: time.sleep(TICK) master_handler.update_master_alive(MY_ID) if master_handler.check_master_alive() == MY_ID: active_master = True else: slave_message = message_handler.receive_from_slave() if slave_message is not None: master_handler.update_elevator_online( slave_message['slave_id']) print "I am NOT master, my id is: " + str(MY_ID) #print elevator_online while active_master: time.sleep(TICK) #print "I AM master, my id is: " + str(my_id) master_handler.update_master_alive(MY_ID) slave_message = message_handler.receive_from_slave() if slave_message is not None: master_handler.clear_completed_orders( slave_message['direction'], slave_message['last_floor'], slave_message['next_floor']) master_handler.update_elevator_position( slave_message['slave_id'], slave_message['last_floor'], slave_message['next_floor'], slave_message['direction']) master_handler.add_new_orders( slave_message['slave_floor_up'], slave_message['slave_floor_down']) master_handler.update_sync_state(slave_message['orders_id'], slave_message['slave_id']) (orders_up, orders_down, orders_id) = master_handler.get_orders() message_handler.send_to_slave(orders_up, orders_down, MY_ID, orders_id) if master_handler.check_master_alive() != MY_ID: active_master = False
def main(): SLAVE_TIMEOUT = 2 SLAVE_MESSAGE_TIMEOUT = 1 #instantiating classes message_handler = MessageHandler() master_handler = MasterHandler() active_master = False while True: #try: time.sleep(TICK) master_handler.update_master_alive(MY_ID) if master_handler.check_master_alive() == MY_ID: active_master = True else: slave_message = message_handler.receive_from_slave() if slave_message is not None: master_handler.update_elevator_online(slave_message['slave_id']) print "I am NOT master, my id is: " + str(MY_ID) #print elevator_online while active_master: time.sleep(TICK) #print "I AM master, my id is: " + str(my_id) master_handler.update_master_alive(MY_ID) slave_message = message_handler.receive_from_slave() if slave_message is not None: master_handler.clear_completed_orders(slave_message['direction'], slave_message['last_floor'], slave_message['next_floor']) master_handler.update_elevator_position(slave_message['slave_id'],slave_message['last_floor'],slave_message['next_floor'],slave_message['direction']) master_handler.add_new_orders(slave_message['slave_floor_up'],slave_message['slave_floor_down']) master_handler.update_sync_state(slave_message['orders_id'],slave_message['slave_id']) (orders_up,orders_down,orders_id) = master_handler.get_orders() message_handler.send_to_slave(orders_up,orders_down,MY_ID,orders_id) if master_handler.check_master_alive() != MY_ID: active_master = False
def main(): #instantiating classes message_handler = MessageHandler(123) master_handler = MasterHandler() queue_id = 1 #allocating arrays button_orders = [0]*8 last_button_orders = [0]*8 elevator_positions = [[0,0,1],[0,0,1],[0,0,1]] elevator_orders = [0]*8 last_elevator_orders = [0]*8 elevator_online = [0]*N_ELEVATORS elevators_received_current_queue_id = [0]*N_ELEVATORS active_slaves = 0 #acknowledges = 0 #execute_queue = 0 arrived = 0 acknowledged_queue_id = [] goto_floor_up = [0]*4 goto_floor_down = [0]*4 last_direction = 0 executer_id = [0]*8 active_master = False #semi_active_master = False downtime_elevator_online = [time.time() + 3]*N_ELEVATORS downtime_queue_id = time.time() + 3 timeout_active_slaves = 0 while True: queue_id = 1 #allocating arrays button_orders = [0]*8 last_button_orders = [0]*8 elevator_positions = [[0,0,1],[0,0,1],[0,0,1]] elevator_orders = [0]*8 last_elevator_orders = [0]*8 elevator_online = [0]*N_ELEVATORS elevators_received_current_queue_id = [0]*N_ELEVATORS active_slaves = 0 #acknowledges = 0 #execute_queue = 0 arrived = 0 acknowledged_queue_id = [] goto_floor_up = [0]*4 goto_floor_down = [0]*4 last_direction = 0 executer_id = [0]*8 active_master = False #semi_active_master = False downtime_elevator_online = [time.time() + 3]*N_ELEVATORS downtime_queue_id = time.time() + 3 timeout_active_slaves = 0 master_handler.update_master_alive(MY_ID) #master_queue = master_handler.get_master_queue() if master_handler.check_master_alive() == MY_ID: active_master = True # button_orders = master_queue[:] print "I am NOT master, my id is: " + str(MY_ID) time.sleep(0.02) while active_master: #print "I AM master, my id is: " + str(my_id) master_handler.update_master_alive(MY_ID) slave_message = message_handler.receive_from_slave() if slave_message is not None: print slave_message last_direction = slave_message['direction'] if slave_message['last_floor'] == slave_message['next_floor']: arrived = slave_message['last_floor'] if (last_direction == DIRN_UP) or (last_direction == DIRN_STOP): #slave_message['slave_floor_up'][arrived] = 0 button_orders[arrived] = 0 if (last_direction == DIRN_DOWN) or (last_direction == DIRN_STOP): #slave_message['slave_floor_down'][arrived] = 0 button_orders[arrived+4] = 0 slave_id = slave_message['slave_id'] print str(slave_id) + ' slave id' elevator_positions[slave_id-1] = [slave_message['last_floor'],slave_message['next_floor'],slave_message['direction']] for i in range(0,4): if (button_orders[i] == 1) or (slave_message['slave_floor_up'][i] == 1): button_orders[i] = 1 for i in range(0,4): if (button_orders[i+4] == 1) or (slave_message['slave_floor_down'][i] == 1): button_orders[i+4] = 1 #print str(button_orders) + ' button_orders' #button_orders = slave_message['slave_floor_up'] + slave_message['slave_floor_down'] if queue_id == slave_message['queue_id']: elevators_received_current_queue_id[slave_id-1] = 1 active_slaves = elevator_online.count(1) #print (button_orders != last_button_orders) and (active_slaves == elevators_received_current_queue_id.count(1)) if (button_orders != last_button_orders) and (active_slaves == elevators_received_current_queue_id.count(1) or timeout_active_slaves == 1): # and (0 not in elevators_queue_id): print '1111111111111111111111111111111111' queue_id += 1 if queue_id > 9999: queue_id = 1 last_button_orders = button_orders[:] print 'hei' downtime_queue_id = time.time() + 1 timeout_active_slaves = 0 downtime_elevator_online[slave_id-1] = time.time() + 3 elevator_online[slave_id-1] = 1 print str(button_orders) + "button_orders" print str(last_button_orders) + "last_button_orders" elevator_orders = master_handler.order_elevator(last_button_orders, elevator_positions, elevator_online) print elevator_online print elevator_orders goto_floor_up[0:4] = elevator_orders[0:4] goto_floor_down[0:4] = elevator_orders[4:8] message_handler.send_to_slave(goto_floor_up,goto_floor_down,executer_id,MY_ID,queue_id) for i in range(0,N_ELEVATORS): if downtime_elevator_online[i] < time.time(): elevator_online[i] = 0 if downtime_queue_id < time.time(): for i in range(0,N_ELEVATORS): timeout_active_slaves = 1 #master_handler.update_master_button_order(button_orders) time.sleep(0.02) if master_handler.check_master_alive() != MY_ID: active_master = False
def main(): message_handler = MessageHandler() queue_id = 1 active_slaves = 1 acknowledges = 0 execute_queue = 0 arivied = 0 acknowledged_queue_id = [] last_direction = 0 executer_id = [0]*8 my_id = 1 active_master = 0 while True: message_handler.update_master_alive(my_id) print message_handler.check_master_alive() if message_handler.check_master_alive() == my_id: active_master = 1 time.sleep(0.1) while active_master == 1: message_handler.update_master_alive(my_id) slave_message = message_handler.receive_from_slave() print ['floor_up:'] + slave_message['slave_floor_up'] + ['floor_down:'] + slave_message['slave_floor_down'] print queue_id #if slave_message['direction'] is not DIRN_STOP: last_direction = slave_message['direction'] if slave_message['last_floor'] == slave_message['next_floor']: arrived = slave_message['last_floor'] if (last_direction == DIRN_UP) or (last_direction == DIRN_STOP): slave_message['slave_floor_up'][arrived] = 0 if (last_direction == DIRN_DOWN) or (last_direction == DIRN_STOP): slave_message['slave_floor_down'][arrived] = 0 #if queue_id == int(slave_message['queue_id']): # acknowledges += 1 # print '111111111111111111111111111111111111111111111111111111111' #if acknowledges == active_slaves: # execute_queue = 1 # print '12222222222222222222222222222222222222222222222222222' # message_handler.send_to_slave(slave_message['slave_floor_up'],slave_message['slave_floor_down'],executer_id,execute_queue,queue_id) # execute_queue = 0 # acknowledges = 0 # queue_id += 1 #else: # message_handler.send_to_slave(slave_message['slave_floor_up'],slave_message['slave_floor_down'],executer_id,execute_queue,queue_id) message_handler.send_to_slave(slave_message['slave_floor_up'],slave_message['slave_floor_down'],executer_id,execute_queue,queue_id) time.sleep(0.1) if message_handler.check_master_alive() != my_id: active_master = 0
def main(): #instantiating classes message_handler = MessageHandler(123) master_handler = MasterHandler() queue_id = 1 #allocating arrays button_orders = [0]*8 last_button_orders = [10]*8 elevator_positions = [[0,0,1],[0,0,1],[0,0,1]] elevator_orders = [0]*8 last_elevator_orders = [10]*8 elevator_online = [0]*N_ELEVATORS elevators_received_current_queue_id = [0]*N_ELEVATORS active_slaves = 0 #acknowledges = 0 #execute_queue = 0 arrived = 0 acknowledged_queue_id = [] goto_floor_up = [0]*4 goto_floor_down = [0]*4 last_direction = 0 executer_id = [0]*8 active_master = False #semi_active_master = False downtime_elevator_online = [time.time() + 3]*N_ELEVATORS downtime_queue_id = time.time() + 3 timeout_active_slaves = 0 while True: master_handler.update_master_alive(MY_ID) master_queue = master_handler.get_master_queue() if master_handler.check_master_alive() == MY_ID: active_master = True button_orders = master_queue[:] print "I am NOT master, my id is: " + str(MY_ID) time.sleep(0.02) while active_master: #print "I AM master, my id is: " + str(my_id) master_handler.update_master_alive(MY_ID) slave_message = message_handler.receive_from_slave() if slave_message is not None: last_direction = slave_message['direction'] if slave_message['last_floor'] == slave_message['next_floor']: arrived = slave_message['last_floor'] if (last_direction == DIRN_UP) or (last_direction == DIRN_STOP): #slave_message['slave_floor_up'][arrived] = 0 button_orders[arrived] = 0 if (last_direction == DIRN_DOWN) or (last_direction == DIRN_STOP): #slave_message['slave_floor_down'][arrived] = 0 button_orders[arrived+4] = 0 slave_id = slave_message['slave_id'] print str(slave_id) + ' slave id' elevator_positions[slave_id-1] = [slave_message['last_floor'],slave_message['next_floor'],slave_message['direction']] for i in range(0,4): if (button_orders[i] == 1) or (slave_message['slave_floor_up'][i] == 1): button_orders[i] = 1 for i in range(0,4): if (button_orders[i+4] == 1) or (slave_message['slave_floor_down'][i] == 1): button_orders[i+4] = 1 #print str(button_orders) + ' button_orders' #button_orders = slave_message['slave_floor_up'] + slave_message['slave_floor_down'] if queue_id == slave_message['queue_id']: elevators_received_current_queue_id[slave_id-1] = 1 active_slaves = elevator_online.count(1) #print (button_orders != last_button_orders) and (active_slaves == elevators_received_current_queue_id.count(1)) if (button_orders != last_button_orders) and (active_slaves == elevators_received_current_queue_id.count(1) or timeout_active_slaves == 1): # and (0 not in elevators_queue_id): print '1111111111111111111111111111111111' queue_id += 1 if queue_id > 9999: queue_id = 1 last_button_orders = button_orders[:] print 'hei' downtime_queue_id = time.time() + 1 timeout_active_slaves = 0 downtime_elevator_online[slave_id-1] = time.time() + 3 elevator_online[slave_id-1] = 1 elevator_orders = master_handler.order_elevator(last_button_orders, elevator_positions, elevator_online) print elevator_online print elevator_orders goto_floor_up[0:4] = elevator_orders[0:4] goto_floor_down[0:4] = elevator_orders[4:8] message_handler.send_to_slave(goto_floor_up,goto_floor_down,executer_id,MY_ID,queue_id) for i in range(0,N_ELEVATORS): if downtime_elevator_online[i] < time.time(): elevator_online[i] = 0 if downtime_queue_id < time.time(): for i in range(0,N_ELEVATORS): timeout_active_slaves = 1 master_handler.update_master_button_order(button_orders) time.sleep(0.02) if master_handler.check_master_alive() != MY_ID: active_master = False