Пример #1
0
        /// <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();
                }
            }
        }
Пример #2
0
        /// <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);
                        }
                    }
                }
            }
        }