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);
        }
    }
Пример #2
0
        public async Task <bool> CallElevator(CallElevatorRequest request)
        {
            var elevator = GetNearestAvailableElevator(request.DestinationFloor);

            if (elevator == null)
            {
                return(false);
            }

            await SendElevator(elevator, request.DestinationFloor);

            return(true);
        }
Пример #3
0
        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));
        }
    }
Пример #5
0
    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);
 }