internal void RaiseProcessRestart(RpcProcess process, ProcessRestartReason reason) { if (!wrappers.TryGetValue(process.Id, out var list) || !schedulers.TryGetValue(process.Id, out var scheduler)) { throw new InvalidOperationException( $"OnRestart for process {process.Id} was called but there's no record of it in the process list."); } foreach (var wrapper in list) { scheduler.Schedule(s => OnProcessRestart?.Invoke(this, (RpcProcessRestartEventArgs)s), new RpcProcessRestartEventArgs(process, reason), cts.Token); } }
private void RestartProcess(string id) { if (cts.IsCancellationRequested) { return; } var client = GetClient(id); var process = GetProcess(id); ProcessRestartReason reason = ProcessRestartReason.UserInitiated; if (process.ProcessOptions.MonitorOptions == MonitorOptions.KeepAlive) { reason = ProcessRestartReason.KeepAlive; } try { client.GetRemoteTarget <IServerNotifications>().ProcessRestarting(process, reason); } catch (SocketException) { // client is gone, oh well } catch (TaskCanceledException) { // we're shutting down return; } catch (Exception ex) { // something else is wrong logger.LogError(ex, nameof(RestartProcess)); } SetupProcess(client, process); RunProcess(process.Id, accessToken); }
public Task ProcessRestarting(RpcProcess process, ProcessRestartReason reason) { server.ProcessRestarting(process, reason); return(Task.CompletedTask); }
private void ProcessRestarting(RpcProcess process, ProcessRestartReason reason) => processManager.RaiseProcessRestart(process, reason);
public RpcProcessRestartEventArgs(RpcProcess process, ProcessRestartReason reason) { Process = process; Reason = reason; }