Ejemplo n.º 1
0
        public void Simulate()
        {
            var failObj  = DataAccessor.DeserializeData();
            var duration = Decimal.Divide(new Decimal(SecondsDuration), new Decimal(TimeFrame));

            _thread = new Thread(() =>
            {
                for (int i = 0; i < TimeFrame; i++)
                {
                    Thread.Sleep(TimeSpan.FromSeconds((int)Math.Round(duration)));
                    int index   = new Random().Next(0, FailureXes.Count);
                    int boolean = new Random().Next(0, 2);
                    if (boolean == 1)
                    {
                        int numberOfErrors = new Random().Next();
                        for (int j = 0; j == MAXERRORCOUNT; j++)
                        {
                            var idF    = FailureXes[index];
                            var idComp = failObj.IdComponentFailureX[new Random().Next(0, failObj.IdComponentFailureX.Length)];
                            ErrorOccured?.Invoke(Plane, idF, PlaneType, idComp);
                        }
                    }
                    var idFailure          = FailureXes[index];
                    var idComponentFailure = failObj.IdComponentFailureX[new Random().Next(0, failObj.IdComponentFailureX.Length)];
                    ErrorOccured?.Invoke(Plane, idFailure, PlaneType, idComponentFailure);
                }
                SimulationFinished?.Invoke();
            });

            _thread.Start();
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Обработка заявок.
        /// </summary>
        /// <param name="size">Ожидаемое количество заявок от населения</param>
        public void Manage(int size)
        {
            RequestCounter = 0;
            var rand = new Random(83);

            while (RequestCounter < size)
            {
                CheckRequests();
                Thread.Sleep(rand.Next(1000, 2000));
            }
            ContextProvider.GetInstance().Context.Send(obj => SimulationFinished?.Invoke(), null);
        }
Ejemplo n.º 3
0
        public HouseManagement()
        {
            _requests = new Queue <Request>();

            _departments = CreateDepartments();
            _departments.Subscribe((request, employee) => RequestFinished?.Invoke(request, employee));

            _committee = new RequestCommittee(_requests);
            _committee.RequestAdded += request => RequestAdded?.Invoke(request);

            _dispatcher = new Dispatcher(_departments, _requests);
            _dispatcher.RequestProcessed   += request => RequestProcessed?.Invoke(request);
            _dispatcher.RequestPostponed   += request => RequestPostponed?.Invoke(request);
            _dispatcher.SimulationFinished += () => SimulationFinished?.Invoke();
        }
Ejemplo n.º 4
0
        private void FinishSimulationRPC(int winnerPhotonPlayerID, int finishReason)
        {
            //Check if simulation has been already finished.
            //Simulation finish can be triggered by few events (see SimulationFinishReason enum)
            if (false == IsSimulationFinished)
            {
                //Stop time so events in game are no longer updated
                GameTimeComponent.StopTime();
                IsSimulationFinished = true;
                IsSimulationActive   = false;
                this.WinnerPlayer    = PhotonNetwork.playerList.FirstOrDefault(x => x.ID == winnerPhotonPlayerID);
                this.FinishReason    = (SimulationFinishReason)finishReason;
                string finishSimulationInfoMsg = "Game finished";

                //Check if player didnt left already
                if (null != WinnerPlayer)
                {
                    switch (this.FinishReason)
                    {
                    case SimulationFinishReason.PlayerCompanyReachedTargetBalance:
                        string winnerInfo = (WinnerPlayer.IsLocal ? "You have" : WinnerPlayer.NickName) + " won";
                        finishSimulationInfoMsg = string.Format("Game finished !\n{0}", winnerInfo);
                        break;

                    case SimulationFinishReason.PlayerCompanyReachedMinimalBalance:
                        finishSimulationInfoMsg = string.Format("Your company's balance reached minimum allowed balance ({0} $)",
                                                                SimulationSettings.MinimalBalance);
                        break;

                    case SimulationFinishReason.OnePlayerInRoom:
                        finishSimulationInfoMsg = "You are the only player left in simulation.\nYou have won !";
                        break;

                    case SimulationFinishReason.Disconnected:
                        finishSimulationInfoMsg = "You have been disconnected from server";
                        break;

                    default:
                        break;
                    }
                }

                SimulationFinished?.Invoke(winnerPhotonPlayerID, (SimulationFinishReason)finishReason);
                GameManagerComponent.FinishSession();
                InfoWindowComponent.ShowOk(finishSimulationInfoMsg, () => GameManagerComponent.LoadScene(SceneIndex.Menu));
            }
        }