public void ReconnectToNewClient() { var c = new ClientMessagePipe("a"); var s = new ServerMessagePipe("a"); var e = new AutoResetEvent(false); s.Callback = O => { Console.WriteLine(O); e.Set(); }; Thread.Sleep(2000); c.SendMessage(new ClientHostComData() { Command = ClientHostCommand.Game_Update }); e.WaitOne(); c.Dispose(); Thread.Sleep(2000); e.Reset(); c = new ClientMessagePipe("a"); Thread.Sleep(2000); c.SendMessage(new ClientHostComData() { Command = ClientHostCommand.Game_Update }); e.WaitOne(); }
public void Game_Start(ModGameAPI dediAPI) { GameAPI = dediAPI; GameAPI.Console_Write($"ModClientDll: start"); CurrentConfig = new ConfigurationManager <Configuration>() { ConfigFilename = Path.Combine(Path.GetDirectoryName(Assembly.GetAssembly(GetType()).Location), "Configuration.xml") }; CurrentConfig.Load(); CurrentConfig.Current.EmpyrionToModPipeName = string.Format(CurrentConfig.Current.EmpyrionToModPipeName, Guid.NewGuid().ToString("N")); CurrentConfig.Current.ModToEmpyrionPipeName = string.Format(CurrentConfig.Current.ModToEmpyrionPipeName, Guid.NewGuid().ToString("N")); CurrentConfig.Save(); GameAPI.Console_Write($"ModClientDll (CurrentDir:{Directory.GetCurrentDirectory()}): Config:{CurrentConfig.ConfigFilename}"); InServerMessageHandler = new Dictionary <Type, Action <object> > { { typeof(EmpyrionGameEventData), M => HandleGameEvent((EmpyrionGameEventData)M) }, { typeof(ClientHostComData), M => HandleClientHostCommunication((ClientHostComData)M) }, { typeof(ModComData), M => HandleModCommunication((ModComData)M) } }; OutServer = new ClientMessagePipe(CurrentConfig.Current.EmpyrionToModPipeName) { log = GameAPI.Console_Write }; InServer = new ServerMessagePipe(CurrentConfig.Current.ModToEmpyrionPipeName) { log = GameAPI.Console_Write }; InServer.Callback = Msg => { if (InServerMessageHandler.TryGetValue(Msg.GetType(), out Action <object> Handler)) { Handler(Msg); } }; new Thread(() => { while (!Exit) { Thread.Sleep(1000); CheckHostProcess(); } }) { IsBackground = true }.Start(); new Thread(() => ReadGlobalStructureInfoForEvent()) { IsBackground = true }.Start(); GameAPI.Console_Write($"ModClientDll: started"); }
private void StartModToEmpyrionPipe() { GameAPI.Console_Write($"StartModToEmpyrionPipe: start {CurrentConfig.Current.ModToEmpyrionPipeName}"); try { InServer?.Close(); } catch { } Thread.Sleep(1000); InServer = new ServerMessagePipe(CurrentConfig.Current.ModToEmpyrionPipeName) { log = GameAPI.Console_Write }; InServer.Callback = Msg => { if (InServerMessageHandler.TryGetValue(Msg.GetType(), out Action <object> Handler)) { Handler(Msg); } }; GameAPI.Console_Write($"StartModToEmpyrionPipe: startet {CurrentConfig.Current.ModToEmpyrionPipeName}"); }
public void InitComunicationChannels() { ToEmpyrion = new ClientMessagePipe(CommandLineOptions.GetOption("-ModToEmpyrionPipe", "EWAToEmpyrionPipe")) { log = LogOut }; FromEmpyrion = new ServerMessagePipe(CommandLineOptions.GetOption("-EmpyrionToModPipe", "EmpyrionToEWAPipe")) { log = LogOut }; FromEmpyrion.Callback = Msg => { if (InServerMessageHandler.TryGetValue(Msg.GetType(), out Action <object> Handler)) { Handler(Msg); } }; Parallel.ForEach(Plugins.OfType <IClientHostCommunication>(), async P => await SaveApiCall(() => P.ToEmpyrion = ToEmpyrion, P, "ToEmpyrion")); Parallel.ForEach(Plugins, async P => await SaveApiCall(() => P.Game_Start(this), P, "Game_Start")); }
public void InitComunicationChannels() { Dispatcher = new ModDispatcher(); ToEmpyrion = new ClientMessagePipe(CommandLineOptions.GetOption("-ModToEmpyrionPipe", "ModToEmpyrionPipe")) { log = LogOut }; FromEmpyrion = new ServerMessagePipe(CommandLineOptions.GetOption("-EmpyrionToModPipe", "EmpyrionToModPipe")) { log = LogOut }; FromEmpyrion.Callback = Msg => { if (InServerMessageHandler.TryGetValue(Msg.GetType(), out Action <object> Handler)) { Handler(Msg); } }; Dispatcher.Game_Start(this); }