protected override async void HandleWorkerConnectionEstablished() { base.HandleWorkerConnectionEstablished(); Worker.World.GetOrCreateSystem <MetricSendSystem>(); if (SimulatedPlayerWorkerConnector == null) { return; } tokenSource = new CancellationTokenSource(); try { // If we connect via dev auth. We are connecting via the Alpha Locator & we want to use worker flags // to change the parameters.. if (connectPlayersWithDevAuth) { await WaitForWorkerFlags(flagDevAuthTokenId, flagTargetDeployment, flagClientCount, flagCreationInterval); var simulatedPlayerDevAuthTokenId = Worker.GetWorkerFlag(flagDevAuthTokenId); var simulatedPlayerTargetDeployment = Worker.GetWorkerFlag(flagTargetDeployment); int.TryParse(Worker.GetWorkerFlag(flagCreationInterval), out var originalInterval); int.TryParse(Worker.GetWorkerFlag(flagClientCount), out var originalCount); using (var workerFlagTracker = new WorkerFlagTracker(Worker.World.GetExistingSystem <WorkerFlagCallbackSystem>())) { await Monitor(originalCount, originalInterval, connector => connector.ConnectSimulatedPlayer(simulatedPlayerDevAuthTokenId, simulatedPlayerTargetDeployment), (ref int count, ref int interval) => MonitorWorkerFlags(workerFlagTracker, ref count, ref interval)); } } // If not using dev auth flow, we are in the editor or standalone worker on a local deployment. // Connect via receptionist & use prefabs to change the parameters. else { await Monitor(MaxSimulatedPlayerCount, SimulatedPlayerCreationInterval, connector => connector.ConnectSimulatedPlayer(), (ref int count, ref int interval) => { count = MaxSimulatedPlayerCount; interval = SimulatedPlayerCreationInterval; }); } } catch (TaskCanceledException) { // This is fine. Means we have triggered a cancel via Dispose(). } }
// Update worker flags if they have changed. private void MonitorWorkerFlags(WorkerFlagTracker tracker, ref int count, ref int interval) { if (tracker.TryGetFlagChange(flagCreationInterval, out var intervalStr) && int.TryParse(intervalStr, out var newInterval)) { interval = newInterval; } if (tracker.TryGetFlagChange(flagClientCount, out var newCountStr) && int.TryParse(newCountStr, out var newCount)) { count = newCount; } tracker.Reset(); }