/// <summary> /// Connects to the mod loader assembler server. /// </summary> private static void ConnectToServer() { // Get port from file. if (File.Exists(ModLoaderAssemblerPort)) { _serverPort = Convert.ToInt32(File.ReadAllText(ModLoaderAssemblerPort)); } // Is server not running? if (System.Diagnostics.Process.GetProcessesByName("Reloaded-Assembler").Length < 1) { // Get path to assembler. string currentExecutingFolder = Assembly.GetExecutingAssembly().Location; // Check if library is packed, if it is (no location), get current directory. // ReSharper disable once ConvertIfStatementToConditionalTernaryExpression if (currentExecutingFolder == "") { currentExecutingFolder = Path.GetTempPath(); } else { currentExecutingFolder = Path.GetDirectoryName(currentExecutingFolder); } // Create and define path in subdirectory string assemblerDirectory = currentExecutingFolder + "//Reloaded-Assembler"; string reloadedPath = assemblerDirectory + "//" + "Reloaded-Assembler.exe"; Directory.CreateDirectory(assemblerDirectory); // Extract the executable and run it. ExtractFodyCosturaFile.ExtractResource("Reloaded-Assembler.exe", assemblerDirectory); // Start the assembler. System.Diagnostics.Process.Start(reloadedPath); // Connect to our server. ConnectToServer(); } // Else try to find/connect to the server if already running. else { // Create the client instance. _assemblerClient = new Client(IPAddress.Loopback, _serverPort); // Try to connect. bool isConnected = _assemblerClient.StartClient(); // Check below if connected client is our assembler. if (isConnected) { // If it is our assembler, return. if (CheckAssembler()) { return; } // Shutdown and try another port. TrySecondPort(); } else { TrySecondPort(); } } }
/// <summary> /// Connects to the mod loader assembler server. /// </summary> private static void ConnectToServer() { // Is server not running? if (System.Diagnostics.Process.GetProcessesByName("Reloaded-Assembler").Length < 1) { // Get path to assembler. string currentExecutingFolder = Assembly.GetExecutingAssembly().Location; // Check if library is packed, if it is (no location), get current directory. // ReSharper disable once ConvertIfStatementToConditionalTernaryExpression if (currentExecutingFolder == "") { currentExecutingFolder = Path.GetTempPath(); } else { currentExecutingFolder = Path.GetDirectoryName(currentExecutingFolder); } // Create and define path in subdirectory string assemblerDirectory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); string reloadedPath = assemblerDirectory + "//Reloaded-Assembler.exe"; Directory.CreateDirectory(assemblerDirectory); // Extract the executable and run it. ExtractFodyCosturaFile.ExtractResource("Reloaded-Assembler.exe", assemblerDirectory); // Start the assembler. System.Diagnostics.Process.Start(reloadedPath); // Connect to our server. ConnectToServer(); } // Else try to find/connect to the server if already running. else { // Get port from file. if (File.Exists(ModLoaderAssemblerPort)) { _serverPort = Convert.ToInt32(File.ReadAllText(ModLoaderAssemblerPort)); } // Setup Local Server Client _reloadedClientListener = new EventBasedNetListener(); ReloadedClient = new NetManager(_reloadedClientListener, 10, ReloadedCheckMessage); ReloadedClient.Start(IPAddress.Loopback, IPAddress.IPv6Loopback, 0); ReloadedClient.ReconnectDelay = 50; ReloadedClient.MaxConnectAttempts = 5; ReloadedClient.DisconnectTimeout = Int64.MaxValue; ReloadedClient.UpdateTime = 1; ReloadedClient.UnsyncedEvents = true; ReloadedClient.Connect(IPAddress.Loopback.ToString(), _serverPort); // Check below if connected client is our assembler. if (ReloadedClient.PeersCount < 1) { // Shutdown and try another port. TrySecondPort(); } else { // Wait for full connection with peer. NetPeer[] peers = ReloadedClient.GetPeers(); foreach (var peer in peers) { while (peer.ConnectionState == ConnectionState.InProgress) { Thread.Sleep(1); } } } } }