void StartProcess (TProcess.TName name) { if (m_Process.ContainsKey (name)) { var currentProcess = m_Process [name]; if (currentProcess.HasExited) { currentProcess.Start (); } } else { var moduleKey = TProcess.ModuleKey [name]; var processExecutable = TProcess.ModuleExecutable [name]; Process process = new Process { StartInfo = new ProcessStartInfo (processExecutable, moduleKey) }; try { process.Start (); m_Process.Add (name, process); } catch (Exception) { string error = $"Process --{processExecutable}-- NOT FOUND! Launcher will ABORT"; throw new Exception (error); } } }
void StartProcessDispatcher (TProcess.TName name) { StartProcess (name); Model.MenuOnly (); ApplyChanges (); }
internal void ProcessAlive (TProcess.TName name, bool alive) { if (m_Process.ContainsKey (name)) { m_Process [name] = alive; } else { m_Process.Add (name, alive); } }
void RemoveProcess (TProcess.TName name) { // remove process if (m_Process.ContainsKey (name)) { try { var process = m_Process [name]; if (process.HasExited.IsFalse ()) { process.Kill (); } m_Process.Remove (name); if (m_Process.Count.Equals (0)) { Model.EnableAll (); ApplyChanges (); } } catch (Exception ex) { throw new Exception (ex.Message); } } }
void OnCommunicationHandle (object sender, TMessagingEventArgs<TDataComm> e) { TProcess.TName module = (TProcess.TName) Enum.Parse (typeof (TProcess.TName), e.Data.ClientName); switch (module) { case TProcess.TName.ModuleSettings: { switch (e.Data.Command) { case TCommandComm.Shutdown: { RemoveProcess (module); } break; case TCommandComm.Closed: { RemoveProcess (module); Model.EnableAll (); ApplyChanges (); } break; case TCommandComm.Success: { Model.SettingsValidated (); ApplyChanges (); } break; case TCommandComm.Error: { Model.SettingsHasError (); ApplyChanges (); THelper.DispatcherLater (RemoveProcessPartialDispatcher); } break; } } break; case TProcess.TName.GadgetMaterial: { switch (e.Data.Command) { case TCommandComm.Closed: { RemoveProcess (module); } break; } } break; case TProcess.TName.GadgetTarget: { switch (e.Data.Command) { case TCommandComm.Closed: { RemoveProcess (module); } break; } } break; case TProcess.TName.GadgetTest: { switch (e.Data.Command) { case TCommandComm.Closed: { RemoveProcess (module); } break; } } break; case TProcess.TName.GadgetRegistration: { switch (e.Data.Command) { case TCommandComm.Closed: { RemoveProcess (module); } break; } } break; case TProcess.TName.GadgetResult: { switch (e.Data.Command) { case TCommandComm.Closed: { RemoveProcess (module); } break; } } break; case TProcess.TName.GadgetReport: { switch (e.Data.Command) { case TCommandComm.Closed: { RemoveProcess (module); } break; } } break; } }
bool IsProcessAlive (TProcess.TName name) { return (m_Process.ContainsKey (name) ? m_Process [name] : false); }