public ConnectionTracker(Lifetime lifetime, ILogger logger, UnityHost host, UnityEditorProtocol editorProtocol, IShellLocks locks, UnitySolutionTracker unitySolutionTracker) { // TODO: this shouldn't be up in tests until we figure out how to test unity-editor requiring features if (locks.Dispatcher.IsAsyncBehaviorProhibited) { return; } unitySolutionTracker.IsUnityProjectFolder.AdviseOnce(lifetime, args => { //check connection between backend and unity editor locks.QueueRecurring(lifetime, "PeriodicallyCheck", TimeSpan.FromSeconds(1), () => { if (editorProtocol.UnityModel.Value == null) { myLastCheckResult = UnityEditorState.Disconnected; } else { var rdTask = editorProtocol.UnityModel.Value.GetUnityEditorState.Start(RdVoid.Instance); rdTask?.Result.Advise(lifetime, result => { myLastCheckResult = result.Result; logger.Trace($"myIsConnected = {myLastCheckResult}"); }); } logger.Trace($"Sending connection state. State: {myLastCheckResult}"); host.PerformModelAction(m => m.EditorState.Value = Wrap(myLastCheckResult)); }); }); }
public ConnectionTracker(Lifetime lifetime, ILogger logger, UnityEditorProtocol unityEditorProtocolController, IShellLocks locks, ISolution solution) { // this shouldn't be up in tests until we figure out how to test unity-editor requiring features if (locks.Dispatcher.IsAsyncBehaviorProhibited) { return; } //check connection between backend and unity editor locks.QueueRecurring(lifetime, "PeriodicallyCheck", TimeSpan.FromSeconds(1), () => { if (unityEditorProtocolController.UnityModel.Value == null) { myLastCheckResult = UnityEditorState.Disconnected; } else { var rdTask = unityEditorProtocolController.UnityModel.Value.GetUnityEditorState.Start(RdVoid.Instance); rdTask?.Result.Advise(lifetime, result => { myLastCheckResult = result.Result; logger.Trace($"myIsConnected = {myLastCheckResult}"); }); } logger.Trace($"Sending connection state. State: {myLastCheckResult}"); solution.GetProtocolSolution().SetCustomData("UNITY_EditorState", Wrap(myLastCheckResult)); }); }
public ConnectionTracker(Lifetime lifetime, ILogger logger, UnityHost host, UnityEditorProtocol editorProtocol, IShellLocks locks, UnitySolutionTracker unitySolutionTracker) { unitySolutionTracker.IsUnityProjectFolder.AdviseOnce(lifetime, args => { //check connection between backend and unity editor locks.QueueRecurring(lifetime, "PeriodicallyCheck", TimeSpan.FromSeconds(1), () => { if (editorProtocol.UnityModel.Value == null) { myLastCheckResult = UnityEditorState.Disconnected; } else { var rdTask = editorProtocol.UnityModel.Value.GetUnityEditorState.Start(Unit.Instance); rdTask?.Result.Advise(lifetime, result => { myLastCheckResult = result.Result; logger.Trace($"myIsConnected = {myLastCheckResult}"); }); } logger.Trace($"Sending connection state. State: {myLastCheckResult}"); host.PerformModelAction(m => m.EditorState.Value = Wrap(myLastCheckResult)); }); }); }
public ConnectionTracker(Lifetime lifetime, ILogger logger, UnityHost host, UnityEditorProtocol editorProtocol, IThreading locks, UnitySolutionTracker unitySolutionTracker) { State = new Property <UnityEditorState>(lifetime, "UnityEditorPlugin::ConnectionState", UnityEditorState.Disconnected); if (locks.Dispatcher.IsAsyncBehaviorProhibited) { return; } unitySolutionTracker.IsUnityProject.AdviseOnce(lifetime, args => { if (!args) { return; } //check connection between backend and unity editor locks.QueueRecurring(lifetime, "PeriodicallyCheck", TimeSpan.FromSeconds(1), () => { var model = editorProtocol.UnityModel.Value; if (model == null) { State.SetValue(UnityEditorState.Disconnected); } else { if (!model.IsBound) { State.SetValue(UnityEditorState.Disconnected); } var rdTask = model.GetUnityEditorState.Start(Unit.Instance); rdTask?.Result.Advise(lifetime, result => { State.SetValue(result.Result); logger.Trace($"Inside Result. Sending connection state. State: {State.Value}"); host.PerformModelAction(m => m.EditorState.Value = Wrap(State.Value)); }); var waitTask = Task.Delay(TimeSpan.FromSeconds(2)); waitTask.ContinueWith(_ => { if (rdTask != null && !rdTask.AsTask().IsCompleted) { logger.Trace($"There were no response from Unity in one second. Set connection state to Disconnected."); State.SetValue(UnityEditorState.Disconnected); } }, locks.Tasks.GuardedMainThreadScheduler); } logger.Trace($"Sending connection state. State: {State.Value}"); host.PerformModelAction(m => m.EditorState.Value = Wrap(State.Value)); }); }); }
public ConnectionTracker(Lifetime lifetime, ILogger logger, UnityHost host, UnityEditorProtocol editorProtocol, IThreading locks, UnitySolutionTracker unitySolutionTracker) { State = new Property <UnityEditorState>(lifetime, "UnityEditorPlugin::ConnectionState", UnityEditorState.Disconnected); if (locks.Dispatcher.IsAsyncBehaviorProhibited) { return; } unitySolutionTracker.IsUnityProject.AdviseOnce(lifetime, args => { if (!args) { return; } //check connection between backend and unity editor locks.QueueRecurring(lifetime, "PeriodicallyCheck", TimeSpan.FromSeconds(1), () => { var model = editorProtocol.UnityModel.Value; if (model == null) { State.SetValue(UnityEditorState.Disconnected); } else { try { var rdTask = model.GetUnityEditorState.Start(Unit.Instance); rdTask?.Result.Advise(lifetime, result => { State.SetValue(result.Result); logger.Trace($"myIsConnected = {State.Value}"); }); } catch (Exception e) { e.Data.Add("UnityModel", editorProtocol.UnityModel.Value); throw; } } logger.Trace($"Sending connection state. State: {State.Value}"); host.PerformModelAction(m => m.EditorState.Value = Wrap(State.Value)); }); }); }
public ConnectionTracker(Lifetime lifetime, ILogger logger, UnityHost host, UnityEditorProtocol editorProtocol, IThreading locks, UnitySolutionTracker unitySolutionTracker) { State = new Property <UnityEditorState>(lifetime, "UnityEditorPlugin::ConnectionState", UnityEditorState.Disconnected); if (locks.Dispatcher.IsAsyncBehaviorProhibited) { return; } unitySolutionTracker.IsUnityProject.AdviseOnce(lifetime, args => { //periodically check connection between backend and unity editor lifetime.StartMainUnguardedAsync(async() => { while (lifetime.IsAlive) { var model = editorProtocol.UnityModel.Value; if (model == null) { State.SetValue(UnityEditorState.Disconnected); } else { try { var rdTask = model.GetUnityEditorState.Start(Unit.Instance); rdTask?.Result.Advise(lifetime, result => { State.SetValue(result.Result); logger.Trace($"myIsConnected = {State.Value}"); }); } catch (Exception e) { e.Data.Add("UnityModel", editorProtocol.UnityModel.Value); throw; } } logger.Trace($"Sending connection state. State: {State.Value}"); host.PerformModelAction(m => m.EditorState.Value = Wrap(State.Value)); await Task.Delay(1000, lifetime); } }); }); }
public ConnectionTracker(Lifetime lifetime, ILogger logger, UnityHost host, UnityEditorProtocol editorProtocol, IThreading locks, UnitySolutionTracker unitySolutionTracker, IIsApplicationActiveState isApplicationActiveState) { State = new Property <UnityEditorState>(lifetime, "UnityEditorPlugin::ConnectionState", UnityEditorState.Disconnected); if (locks.Dispatcher.IsAsyncBehaviorProhibited) { return; } unitySolutionTracker.IsUnityProject.AdviseOnce(lifetime, args => { if (!args) { return; } var updateConnectionAction = new Action(() => { var model = editorProtocol.UnityModel.Value; if (model == null) { State.SetValue(UnityEditorState.Disconnected); } else { if (!model.IsBound) { State.SetValue(UnityEditorState.Disconnected); } var rdTask = model.GetUnityEditorState.Start(Unit.Instance); rdTask?.Result.Advise(lifetime, result => { State.SetValue(result.Result); logger.Trace($"Inside Result. Sending connection state. State: {State.Value}"); host.PerformModelAction(m => m.EditorState.Value = Wrap(State.Value)); }); var waitTask = Task.Delay(TimeSpan.FromSeconds(2)); waitTask.ContinueWith(_ => { if (rdTask != null && !rdTask.AsTask().IsCompleted) { logger.Trace("There were no response from Unity in two seconds. Set connection state to Disconnected."); State.SetValue(UnityEditorState.Disconnected); } }, locks.Tasks.GuardedMainThreadScheduler); } logger.Trace($"Sending connection state. State: {State.Value}"); host.PerformModelAction(m => m.EditorState.Value = Wrap(State.Value)); }); lifetime.StartMainUnguardedAsync(async() => { while (lifetime.IsAlive) { if (isApplicationActiveState.IsApplicationActive.Value || host.GetValue(rdUnityModel => rdUnityModel.RiderFrontendTests).HasTrueValue()) { updateConnectionAction(); } await Task.Delay(1000, lifetime); } }); }); }