void HandleCallElevatorRequest(CallElevatorRequest rq) { // Handle it FloorData floor = GetFloorData(rq.level); if (floor != null) { bool isSuccess = floor.ProcessRequest(rq.direction); CallElevatorResponse rs = new CallElevatorResponse(isSuccess ? ResultCode.Succeeded : ResultCode.Failed, floor); // Send Response to Floor SendCallElevatorResponse(rs); if (isSuccess) { // Update Elevator UpdateElevator(); } } else { // Send Response to Floor CallElevatorResponse response = new CallElevatorResponse(ResultCode.Failed, null); SendCallElevatorResponse(response); } }
public async Task <bool> CallElevator(CallElevatorRequest request) { var elevator = GetNearestAvailableElevator(request.DestinationFloor); if (elevator == null) { return(false); } await SendElevator(elevator, request.DestinationFloor); return(true); }
public async Task <IActionResult> CallElevator([FromQuery] CallElevatorRequest request) { if (request.DestinationFloor > _appSettings.MaxFloors) { return(BadRequest($"Max floor {_appSettings.MaxFloors}")); } var isSuccess = await _elevatorService.CallElevator(request); if (!isSuccess) { return(NotFound("Failed to call elevator")); } return(Ok()); }
IEnumerator RoutineStimulation() { while (true) { if (IsStimulating) { int randomTerminal = Random.Range(0, (int)GameConfig.NumElevator); int randomFloor = Random.Range((int)GameConfig.GetBottomFloor(), (int)GameConfig.GetTopFloor() + 1); int randomPlace = Random.Range(1, 3); // Floor or elevator if (randomPlace == 1) // floor request elevator { // then up or down or both? int randomDirection = Random.Range(0, 2); Direction d = Direction.None; if (randomDirection == 0) { d = Direction.Up; } if (randomDirection == 1) { d = Direction.Down; } if (randomDirection == 2) { d = Direction.Both; } CallElevatorRequest request = new CallElevatorRequest((uint)randomFloor, d); terminalControllers[randomTerminal].FakeOnGetCallElevatorRequest(request); } else if (randomPlace == 2) // elevator call floor { CallFloorRequest request = new CallFloorRequest((uint)randomFloor); terminalControllers[randomTerminal].FakeOnGetCallFloorRequest(request); } } yield return(new WaitForSeconds(SpeedSendRequest)); } }
void SendCallElevatorRequest(Direction direction) { CallElevatorRequest request = new CallElevatorRequest(floorData.level, direction); onCallElevatorRequestCallback?.Invoke(request); }
public void FakeOnGetCallElevatorRequest(CallElevatorRequest rq) { Logger.Log(logTagReq, "FakeOnGetCallElevatorRequest " + JsonUtility.ToJson(rq)); HandleCallElevatorRequest(rq); }