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}");
            }
        }
Ejemplo n.º 4
0
        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();
        }
Ejemplo n.º 5
0
        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();
        }
Ejemplo n.º 6
0
        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
     });
 }
Ejemplo n.º 9
0
 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),
         }
     });
 }
Ejemplo n.º 10
0
 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),
         }
     });
 }
Ejemplo n.º 11
0
 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}'");
     }
 }
Ejemplo n.º 12
0
        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}");
            }
        }
Ejemplo n.º 13
0
        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}");
            }
        }