//Response to service by sending elevator public Elevator ServiceRequest(Floor floor) { Elevator returnElevator = new Elevator(); foreach (Elevator elevator in elevators) { if (elevator.Status == Utility.Status_Dormant) { elevator.CureentFloor = floor.CureentFloor; returnElevator = elevator; return returnElevator; } } //If all above elevators are busy then add in pending foreach (Elevator elevator in elevators) { if (elevator.Status != Utility.Status_Disabled) { //all elevators are busy store in pending request; if (!returnElevator.PendingRequests.ContainsKey(floor.CureentFloor)) { returnElevator = elevator; //add pending request returnElevator.PendingRequests.Add(floor.CureentFloor, floor.Direction); return returnElevator; } } } return returnElevator; }
public void ControllerConfigureElevatorFloor() { Floor floor50 = new Floor(50); //Get first elevator elevator1 = _controller.elevators[0]; elevator1.CureentFloor = 48; floor50.CureentFloor = 50; _controller.ConfigureElevatorForFloor(elevator1, floor50); //wait for 10 secs = 2 floors 6 seconds + 4 for door open and close System.Threading.Thread.Sleep(10500); Assert.AreEqual(elevator1.CureentFloor, 50); }
//send particular elevator to floor request public Elevator ConfigureElevatorForFloor(Elevator elevator, Floor floor) { int floorcount = (elevator.CureentFloor - floor.CureentFloor) * -1; int direction = 0; if (floor.CureentFloor >= elevator.CureentFloor) { direction = 1; } else { direction = 0; } elevator.Direction = direction; elevator.FloorCount = floorcount; this.StartService(elevator); return elevator; }
//Start floor request Service public void StartService(Elevator elevator) { try { if (elevator.Direction == 1) { elevator.DestinationFloor = elevator.CureentFloor + elevator.FloorCount; } else { elevator.DestinationFloor = elevator.CureentFloor - elevator.FloorCount; } elevator.StartFloor = elevator.CureentFloor; elevator.FloorCount = elevator.FloorCount; elevator.StartTime = DateTime.Now; elevator.EndTime = getEndTime(elevator.FloorCount, elevator); elevator.IsRunning = 1; setStatus(elevator); } catch (Exception ex) { _errorMessage = ex.Message; } }
//start timer and initialise elevator public void StartController() { elevators[0] = new Elevator(); elevators[1] = new Elevator(); elevators[2] = new Elevator(); elevators[3] = new Elevator(); if (_timerStatus == false) { _timer = new Timer(1000); _timer.Interval = 1000; _timer.Enabled = true; _timer.Elapsed += new ElapsedEventHandler(timer_Elapsed); _timerStatus = true; foreach (Elevator elevator in elevators) { elevator.Status = Utility.Status_Dormant; elevator.IsRunning = 0; } } }
public void ElevatorCheckDoorClosing() { //This method request from floor and returns elevator elevator1 = _controller.ServiceRequest(floor30); //Elevator1 requests: From floor 30, direction up, up 2 floors elevator1.CureentFloor = 30; elevator1.Direction = 1; elevator1.FloorCount = 2; _controller.StartService(elevator1); //2 floors wait for 6 +2 8 secs for door close System.Threading.Thread.Sleep(8500); Assert.AreEqual(elevator1.Status, Utility.Status_Door_Closing); }
public void ElevatorCheckMovingDown1Floor() { elevator1 = _controller.ServiceRequest(floor30); //Elevator1 requests: From floor 70, direction down, down 3 floors elevator1.CureentFloor = 70; elevator1.Direction = 0; elevator1.FloorCount = 3; _controller.StartService(elevator1); //1 floor wait for 3 secs for status of next floor System.Threading.Thread.Sleep(3500); Assert.AreEqual(elevator1.CureentFloor, 69); }
//Set status of elevator private void setStatus(Elevator elevator) { //check time and set floor number TimeSpan span = DateTime.Now.Subtract(elevator.StartTime); Int32 spanDoors = DateTime.Now.Subtract(elevator.EndTime).Seconds * -1; double noOfSeconds = Math.Round(span.Seconds / (double)elevator.SpeedBetweenFloors, 2); int FloorCount = (int)noOfSeconds; if (elevator.Direction == 1) { elevator.Status = Utility.Status_Moving_Up; elevator.CureentFloor = elevator.StartFloor + FloorCount; } else { elevator.Status = Utility.Status_Moving_Down; elevator.CureentFloor = elevator.StartFloor - FloorCount; } if (spanDoors <= 4 && spanDoors > 2) { elevator.Status = Utility.Status_Door_Opening; elevator.CureentFloor = elevator.DestinationFloor; } else if (spanDoors <= 2) { elevator.Status = Utility.Status_Door_Closing; elevator.CureentFloor = elevator.DestinationFloor; } }
public void TopFloorCheckDownButtonEnabled() { elevator1 = _controller.ServiceRequest(floor100); Assert.AreEqual(floor100.ButtonDown, true); }
public void OutstandingRequestCheckFloorNo() { Elevator elevator3 = new Elevator(); Elevator elevator4 = new Elevator(); Floor floor10 = new Floor(10); Floor floor70 = new Floor(70); elevator1 = _controller.ServiceRequest(floor30); elevator1.CureentFloor = 30; elevator1.Direction = 1; elevator1.FloorCount = 2; _controller.StartService(elevator1); elevator2 = _controller.ServiceRequest(floor80); elevator2.CureentFloor = 30; elevator2.Direction = 1; elevator2.FloorCount = 2; _controller.StartService(elevator2); elevator3 = _controller.ServiceRequest(floor100); elevator3.CureentFloor = 30; elevator3.Direction = 1; elevator3.FloorCount = 2; _controller.StartService(elevator3); elevator4 = _controller.ServiceRequest(floor0); elevator4.CureentFloor = 30; elevator4.Direction = 1; elevator4.FloorCount = 2; _controller.StartService(elevator4); //Fifth request outstanding elevator1 = _controller.ServiceRequest(floor70); string floorNumber = ""; string direction; //loop through all pending request foreach (DictionaryEntry entry in elevator1.PendingRequests) { floorNumber = entry.Key.ToString(); direction = entry.Value.ToString(); if (direction == "1") { direction = Utility.Status_Moving_Up; } else { direction = Utility.Status_Moving_Down; } } Assert.AreEqual(floorNumber, "70"); }
public void OutstandingRequestCheck() { Elevator elevator3 = new Elevator(); Elevator elevator4 = new Elevator(); Floor floor10 = new Floor(10); Floor floor70 = new Floor(70); elevator1 = _controller.ServiceRequest(floor30); elevator1.CureentFloor = 30; elevator1.Direction = 1; elevator1.FloorCount = 2; _controller.StartService(elevator1); elevator2 = _controller.ServiceRequest(floor80); elevator2.CureentFloor = 30; elevator2.Direction = 1; elevator2.FloorCount = 2; _controller.StartService(elevator2); elevator3 = _controller.ServiceRequest(floor100); elevator3.CureentFloor = 30; elevator3.Direction = 1; elevator3.FloorCount = 2; _controller.StartService(elevator3); elevator4 = _controller.ServiceRequest(floor0); elevator4.CureentFloor = 30; elevator4.Direction = 1; elevator4.FloorCount = 2; _controller.StartService(elevator4); //Fifth outstanding request elevator1 = _controller.ServiceRequest(floor70); //total number of outstanding is one int pendReqCount = elevator1.PendingRequests.Count; Assert.AreEqual(1, pendReqCount); }
public void FloorRequestReturnElevator() { //This method request from floor and returns elevator elevator1 = _controller.ServiceRequest(floor30); Assert.AreEqual(elevator1.CureentFloor, 30); }
public void Floor30CheckUpDownButtonEnabled() { elevator1 = _controller.ServiceRequest(floor30); bool upButton = floor30.ButtonUp; bool downButton = floor30.ButtonDown; bool expectedresult = true; bool finalResult = false; if (upButton && downButton) { finalResult = true; } Assert.AreEqual(finalResult, expectedresult); }
public void ElevatorCheckMovingUp2Floor() { elevator1 = _controller.ServiceRequest(floor30); //Elevator1 requests: From floor 30, direction up, up 3 floors elevator1.CureentFloor = 30; elevator1.Direction = 1; elevator1.FloorCount = 3; _controller.StartService(elevator1); //2 floors wait for 6 secs for status of 2nd floor System.Threading.Thread.Sleep(6500); Assert.AreEqual(elevator1.CureentFloor, 32); }
public void ElevatorCheckMovingUp() { //This method request from floor and returns elevator elevator1 = _controller.ServiceRequest(floor30); //Elevator1 requests: From floor 30, direction up, up 2 floors elevator1.CureentFloor = 30; elevator1.Direction = 1; elevator1.FloorCount = 2; _controller.StartService(elevator1); Assert.AreEqual(elevator1.Status, Utility.Status_Moving_Up); }
//get expected end time based on speed between the floors, door open time and door close time private DateTime getEndTime(Int32 floorcount, Elevator elevator) { DateTime returnDatetime; returnDatetime = DateTime.Now.AddSeconds((floorcount * elevator.SpeedBetweenFloors) + elevator.DoorOpenTime + elevator.DoorCloseTime); return returnDatetime; }
//Process request for each timer tick private void ProcessRequest(Elevator elevator) { if (elevator.EndTime > DateTime.Now && elevator.IsRunning == 1) { setStatus(elevator); } else { elevator.Status = Utility.Status_Dormant; elevator.CureentFloor = elevator.DestinationFloor; elevator.IsRunning = 0; } }
public void TopFloorCheckUpButtonDisabled() { elevator1 = _controller.ServiceRequest(floor100); Assert.AreEqual(floor100.ButtonUp, false); }
public void BottomFloorCheckDownButtonDisabled() { elevator1 = _controller.ServiceRequest(floor0); Assert.AreEqual(floor0.ButtonDown, false); }
public void BottomFloorCheckUpButtonEnabled() { elevator1 = _controller.ServiceRequest(floor0); Assert.AreEqual(floor0.ButtonUp, true); }
//enable disable elevator by chaing the new status //new status Status_Dormant equal to enable. //new status Status_Disabled equal to disabled. public void SetElevatorStatus(Elevator elevator, string newStatus) { elevator.Status = newStatus; }
public void ElevatorCheckMovingDown() { //This method request from floor and returns elevator elevator2 = _controller.ServiceRequest(floor80); //Elevator2 requests: From floor 30, direction down, down 5 floors elevator2.CureentFloor = 80; elevator2.Direction = 0; elevator2.FloorCount = 5; _controller.StartService(elevator2); Assert.AreEqual(elevator2.Status, Utility.Status_Moving_Down); }