public void Shutdown() { OutServer?.SendMessage(new ModComData() { Command = ModCommand.Shutdown }); }
public void Game_Exit() { Exit = true; GameAPI.Console_Write($"ModClientDll: Game_Exit {CurrentConfig.Current.ModToEmpyrionPipeName}"); OutServer?.SendMessage(new ClientHostComData() { Command = ClientHostCommand.Game_Exit }); if (!ExposeShutdownHost && CurrentConfig.Current.AutoshutdownModHost && mHostProcess != null) { try { try { mHostProcess.CloseMainWindow(); } catch { } CurrentConfig.Current.HostProcessId = 0; CurrentConfig.Save(); Thread.Sleep(1000); } catch (Exception Error) { GameAPI.Console_Write($"ModClientDll: Game_Exit {Error}"); } } InServer?.Close(); OutServer?.Close(); }
private void HandleModCommunication(ModComData msg) { if (OutServer == null) { return; } try { switch (msg.Command) { case ModCommand.GetPathFor: OutServer.SendMessage(new ModComData() { Command = msg.Command, SequenceId = msg.SequenceId, Data = ModAPI.Application.GetPathFor((AppFolder)msg.Data) }); break; case ModCommand.PlayfieldDataReceived: { var data = msg.Data as PlayfieldNetworkData; ModAPI.Network.SendToPlayfieldServer(data.Sender, data.PlayfieldName, data.Data); break; } } } catch (System.Exception Error) { GameAPI.Console_Write($"ModClientDll: {Error.Message}"); } }
void CheckHostProcess() { if (Exit || WithinUpdate) { return; } if (!ExistsStartFile()) { try { if (mHostProcess != null && !mHostProcess.HasExited) { GameAPI.Console_Write($"ModClientDll: start.txt not found"); OutServer?.SendMessage(new ClientHostComData() { Command = ClientHostCommand.Game_Exit }); Thread.Sleep(1000); GameAPI.Console_Write($"ModClientDll: stopped"); } } catch { } return; } try{ OutServer?.SendMessage(new ClientHostComData() { Command = ClientHostCommand.ProcessInformation }); } catch {} if (CurrentConfig.Current.AutostartModHostAfterNSeconds == 0 || !CurrentConfig.Current.AutostartModHost) { return; } try { if (mHostProcess != null && !mHostProcess.HasExited) { return; } } catch { } if (!mHostProcessAlive.HasValue) { mHostProcessAlive = DateTime.Now; } if ((DateTime.Now - mHostProcessAlive.Value).TotalSeconds <= CurrentConfig.Current.AutostartModHostAfterNSeconds) { return; } mHostProcessAlive = null; CheckForBinCopyFile(); StartHostProcess(); }
void CheckHostProcess() { if (Exit) { return; } if (ExistsStopFile()) { try { if (mHostProcess != null && !mHostProcess.HasExited) { GameAPI.Console_Write($"ModClientDll: stop.txt found"); OutServer?.SendMessage(new ClientHostComData() { Command = ClientHostCommand.Game_Exit }); Thread.Sleep(1000); InServer?.Close(); OutServer?.Close(); GameAPI.Console_Write($"ModClientDll: stopped"); } } catch { } return; } if (CurrentConfig.Current.AutostartModHostAfterNSeconds == 0 || !CurrentConfig.Current.AutostartModHost) { return; } try { if (mHostProcess != null && !mHostProcess.HasExited) { return; } } catch { } if (!mHostProcessAlive.HasValue) { mHostProcessAlive = DateTime.Now; } if ((DateTime.Now - mHostProcessAlive.Value).TotalSeconds <= CurrentConfig.Current.AutostartModHostAfterNSeconds) { return; } mHostProcessAlive = null; StartModToEmpyrionPipe(); StartHostProcess(); StartEmpyrionToModPipe(); }
private void UpdateEWA(ProcessInformation aProcessInformation) { if (!Directory.Exists(Path.Combine(EmpyrionConfiguration.ModPath, @"EWALoader\Update\EWALoader\EWA"))) { return; } try { WithinUpdate = true; RetrieveHostProcessInformation(aProcessInformation); GameAPI.Console_Write($"ModClientDll: EWA_Update"); OutServer?.SendMessage(new ClientHostComData() { Command = ClientHostCommand.UpdateEWA }); if (mHostProcess != null) { try { mHostProcessAlive = null; for (int i = 0; i < 5 * 60; i++) { Thread.Sleep(1000); if (mHostProcess.HasExited) { break; } } try { mHostProcess.CloseMainWindow(); } catch { } mHostProcess = null; CurrentConfig.Current.HostProcessId = 0; CurrentConfig.Save(); } catch (Exception Error) { GameAPI.Console_Write($"UpdateEWA: Game_Exit {Error}"); } } UpdateEWAFiles(); } catch (Exception Error) { GameAPI.Console_Write($"UpdateEWA: EWA_Update {Error}"); } finally { WithinUpdate = false; } }
private void PlayfieldDataReceived(string sender, string playfieldName, byte[] data) { OutServer?.SendMessage(new ModComData() { Command = ModCommand.PlayfieldDataReceived, Data = new PlayfieldNetworkData() { Sender = sender, PlayfieldName = playfieldName, Data = data } }); }
public void Game_Update() { if (Exit) { return; } OutServer?.SendMessage(new ClientHostComData() { Command = ClientHostCommand.Game_Update }); }
private void ReturnProcessInformation() { OutServer.SendMessage(new ClientHostComData() { Command = ClientHostCommand.ProcessInformation, Data = new ProcessInformation() { Id = Process.GetCurrentProcess().Id, CurrentDirecrory = Directory.GetCurrentDirectory(), FileName = "EmpyrionDedicated.exe", Arguments = Environment.GetCommandLineArgs().Aggregate("", (S, A) => S + " " + A), } }); }
private void ReturnProcessInformation() { OutServer.SendMessage(new ClientHostComData() { Command = ClientHostCommand.ProcessInformation, Data = new ProcessInformation() { Id = Process.GetCurrentProcess().Id, CurrentDirecrory = Directory.GetCurrentDirectory(), FileName = "EmpyrionDedicated.exe", Arguments = Environment.GetCommandLineArgs().Aggregate(string.Empty, HandleQuoteWhenNotSwitchOrContainsQuote), } }); }
private void StartEmpyrionToModPipe() { try { try { OutServer?.Close(); } catch { } Thread.Sleep(1000); OutServer = new ClientMessagePipe(CurrentConfig.Current.EmpyrionToModPipeName) { log = GameAPI.Console_Write }; } catch (Exception Error) { GameAPI.Console_Write($"ModClientDll: ClientMessagePipe '{CurrentConfig.Current.EmpyrionToModPipeName} -> {Error}'"); } }
public void Game_Event(CmdId eventId, ushort seqNr, object data) { if (OutServer == null) { return; } try { var msg = new EmpyrionGameEventData() { eventId = eventId, seqNr = seqNr }; msg.SetEmpyrionObject(data); OutServer.SendMessage(msg); } catch (System.Exception Error) { GameAPI.Console_Write($"ModClientDll: {Error.Message}"); } }
public void Game_Event(CmdId eventId, ushort seqNr, object data) { if (OutServer == null) { return; } try { //GameAPI.Console_Write($"ModClientDll: eventId:{eventId} seqNr:{seqNr} data:{data}"); OutServer.SendMessage(new EmpyrionGameEventData() { eventId = eventId, seqNr = seqNr, data = data }); //GameAPI.Console_Write($"ModClientDll: send"); } catch (System.Exception Error) { GameAPI.Console_Write($"ModClientDll: {Error.Message}"); } }