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(); }
/// <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); }
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(); }
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)); } }