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);
        }
Example #3
0
 public Task ProcessRestarting(RpcProcess process, ProcessRestartReason reason)
 {
     server.ProcessRestarting(process, reason);
     return(Task.CompletedTask);
 }
Example #4
0
 private void ProcessRestarting(RpcProcess process, ProcessRestartReason reason) => processManager.RaiseProcessRestart(process, reason);
Example #5
0
 public RpcProcessRestartEventArgs(RpcProcess process, ProcessRestartReason reason)
 {
     Process = process;
     Reason  = reason;
 }