def __init__(self): self.elevator = ElevatorWrapper() self.upOrders = [] self.downOrders = [] self.inOrders = [] self.queue = [] self.heading = -1 self.floor = -1 self.elevator.addButtonListener(self.buttonListener) self.elevator.addFloorListener(self.floorListener)
class ElevatorSystem: def __init__(self): self.elevator = ElevatorWrapper() self.upOrders = [] self.downOrders = [] self.inOrders = [] self.queue = [] self.heading = -1 self.floor = -1 self.elevator.addButtonListener(self.buttonListener) self.elevator.addFloorListener(self.floorListener) def buttonListener(self, where, what, floor, en, to): # TODO: en, to if where == "in": if not floor in self.inOrders: if self.heading == 1 and floor > self.floor: if not floor in self.queue: self.queue.append(floor) elif self.heading == 0 and floor < self.floor: if not order in self.queue: self.queue.append(floor) else: self.inOrders.append(floor) self.inOrders.sort() elif where == "out": if what == "up": if not floor in self.upOrders: if self.heading == 1 and floor > self.floor: if not floor in self.queue: self.queue.append(floor) else: self.upOrders.append(floor) self.upOrders.sort() elif what == "down": if not floor in self.downOrders: if self.heading == 0 and floor < self.floor: if not floor in self.queue: self.queue.append(floor) else: self.downOrders.append(floor) self.downOrders.sort() self.updateOrders() def updateOrders(self): if self.heading == 1: for order in self.inOrders: if order > self.floor: if order in self.queue: self.inOrders.remove(order) else: self.queue.append(order) self.inOrders.remove(order) for order in self.upOrders: if order > self.floor: if order in self.queue: self.upOrders.remove(order) else: self.queue.append(order) self.upOrders.remove(order) elif self.heading == 0: for order in self.inOrders: if order < self.floor: if order in self.queue: self.inOrders.remove(order) else: self.queue.append(order) self.inOrders.remove(order) for order in self.downOrders: if order < self.floor: if order in self.queue: self.downOrders.remove(order) else: self.queue.append(order) self.downOrders.remove(order) elif self.heading == -1: if len(self.inOrders): self.queue.append(self.inOrders.pop(0)) elif len(self.upOrders): self.queue.append(self.upOrders.pop(0)) elif len(self.downOrders): self.queue.append(self.downOrders.pop(0)) self.queue.sort() if self.heading == 0: self.queue.reverse() if len(self.queue): self.elevator.moveToFloor(self.queue[0]) self.heading = 0 if self.floor > self.queue[0] else 1 print self.upOrders, self.downOrders, self.inOrders, self.queue print "Heading:", self.heading def floorListener(self, floor): self.floor = floor print "Floor:", floor if len(self.queue) and floor == self.queue[0]: self.queue.pop(0) self.elevator.stop() sleep(1.0) if len(self.queue): self.elevator.moveToFloor(self.queue[0]) self.heading = 0 if self.floor > self.queue[0] else 1 else: self.heading = -1 self.updateOrders() elif not self.elevator.elevator.moving: print "Recovery" if len(self.queue): self.elevator.moveToFloor(self.queue[0])