Exemplo n.º 1
0
        public void StartServer(string serverId, RemotingAddress serverRA, uint maxFaults, uint minDelay, uint maxDelay)
        {
            if (Program.serverProcesses.ContainsKey(serverId))
            {
                throw new RemotingException($"PCS: Server with ID '{ serverId }' already exists.");
            }

            var procPath = Path.GetFullPath(Path.Combine(Directory.GetCurrentDirectory() +
                                                         @"\..\..\..\Server\bin\Debug\Server.exe"));

            Console.WriteLine($"Starting server:\n\t" +
                              $"ID: {serverId}\n\t" +
                              $"URL: {serverRA.ToString()}\n\t" +
                              $"Max Faults: {maxFaults}\n\t" +
                              $"Min Delay: {minDelay}\n\t" +
                              $"Max Delay: {maxDelay}\n\t" +
                              $"Proc. path: {procPath}");

            Process server = RunProcess(procPath,
                                        $"{serverId} {serverRA.ToString()} {maxFaults} {minDelay} {maxDelay}");

            server.Exited += new EventHandler(delegate(Object o, EventArgs a)
            {
                Program.serverProcesses.Remove(serverId);
                Console.WriteLine($"Server '{serverId}' has exited.");
                try
                {
                    PM.InformServerExited(serverId);
                }
                catch (Exception ex)
                {
                    Utilities.WriteError($"Error informing PM that server exited: {ex.Message}.");
                }
            });

            Program.serverProcesses.Add(serverId, server);
        }