public void TestAddGroup()
        {
            // GIVEN an empty config builder
            DarkRiftClusterConfigurationBuilder builder = DarkRiftClusterConfigurationBuilder.Create();

            // WHEN a group is added
            builder.AddGroup("name", ServerVisibility.Internal, "group 1", "group 2");

            // THEN the group is added to the spawn data
            Assert.AreEqual(1, builder.ClusterSpawnData.Groups.Groups.Count);
            Assert.AreEqual("name", builder.ClusterSpawnData.Groups.Groups[0].Name);
            Assert.AreEqual(ServerVisibility.Internal, builder.ClusterSpawnData.Groups.Groups[0].Visibility);
            Assert.AreEqual(2, builder.ClusterSpawnData.Groups.Groups[0].ConnectsTo.Count);
            Assert.AreEqual("group 1", builder.ClusterSpawnData.Groups.Groups[0].ConnectsTo[0].Name);
            Assert.AreEqual("group 2", builder.ClusterSpawnData.Groups.Groups[0].ConnectsTo[1].Name);
        }
コード例 #2
0
        /// <summary>
        ///     Main entry point of the server which starts a single server.
        /// </summary>
        /// <param name="args"></param>
        private static void Main(string[] args)
        {
            string[]            rawArguments = CommandEngine.ParseArguments(string.Join(" ", args));
            string[]            arguments    = CommandEngine.GetArguments(rawArguments);
            NameValueCollection variables    = CommandEngine.GetFlags(rawArguments);

            foreach (DictionaryEntry environmentVariable in Environment.GetEnvironmentVariables())
            {
                variables.Add((string)environmentVariable.Key, (string)environmentVariable.Value);
            }

            string serverConfigFile;
            string clusterConfigFile;

            if (arguments.Length < 1)
            {
                serverConfigFile  = "Server.config";
                clusterConfigFile = "Cluster.config";
            }
            else if (arguments.Length == 1)
            {
                serverConfigFile  = arguments[0];
                clusterConfigFile = "Cluster.config";
            }
            else if (arguments.Length == 2)
            {
                serverConfigFile  = arguments[0];
                clusterConfigFile = arguments[1];
            }
            else
            {
                System.Console.Error.WriteLine("Unexpected number of comand line arguments passed. Expected 0-2 but found " + arguments.Length + ".");
                System.Console.WriteLine("Press any key to exit...");
                System.Console.ReadKey();
                return;
            }

            DarkRiftServerConfigurationBuilder serverConfigurationBuilder;

            try
            {
                serverConfigurationBuilder = DarkRiftServerConfigurationBuilder.CreateFromXml(serverConfigFile, variables);
            }
            catch (IOException e)
            {
                System.Console.Error.WriteLine("Could not load the server config file needed to start (" + e.Message + "). Are you sure it's present and accessible?");
                System.Console.WriteLine("Press any key to exit...");
                System.Console.ReadKey();
                return;
            }
            catch (XmlConfigurationException e)
            {
                System.Console.Error.WriteLine($"Failed to load '{serverConfigFile}': {e.Message}");
                System.Console.Error.WriteLine();
                System.Console.Error.WriteLine(e.DocumentationLink != null ? $"See {e.DocumentationLink} for more information." : "No additional documentation available.");
                System.Console.Error.WriteLine();
                System.Console.Error.WriteLine(e.LineInfo != null && e.LineInfo.HasLineInfo() ? $"Line {e.LineInfo.LineNumber} Col: {e.LineInfo.LinePosition}" : "(Unknown location)");
                System.Console.Error.WriteLine();
                System.Console.WriteLine("Press any key to exit...");
                System.Console.ReadKey();
                return;
            }

            // Set this thread as the one executing dispatcher tasks
            serverConfigurationBuilder.WithDispatcherExecutorThreadID(Thread.CurrentThread.ManagedThreadId);

#if PRO
            if (File.Exists(clusterConfigFile))
            {
                DarkRiftClusterConfigurationBuilder clusterConfigurationBuilder;
                try
                {
                    clusterConfigurationBuilder = DarkRiftClusterConfigurationBuilder.CreateFromXml(clusterConfigFile, variables);
                }
                catch (IOException e)
                {
                    System.Console.Error.WriteLine("Could not load the cluster config file needed to start (" + e.Message + "). Are you sure it's present and accessible?");
                    System.Console.WriteLine("Press any key to exit...");
                    System.Console.ReadKey();
                    return;
                }
                catch (XmlConfigurationException e)
                {
                    System.Console.Error.WriteLine($"Failed to load '{clusterConfigFile}': {e.Message}");
                    System.Console.Error.WriteLine();
                    System.Console.Error.WriteLine(e.DocumentationLink != null ? $"See {e.DocumentationLink} for more information." : "No additional documentation available.");
                    System.Console.Error.WriteLine();
                    System.Console.Error.WriteLine(e.LineInfo != null && e.LineInfo.HasLineInfo() ? $"Line {e.LineInfo.LineNumber} Col: {e.LineInfo.LinePosition}" : "(Unknown location)");
                    System.Console.Error.WriteLine();
                    System.Console.WriteLine("Press any key to exit...");
                    System.Console.ReadKey();
                    return;
                }

                server = new DarkRiftServer(serverConfigurationBuilder.ServerSpawnData, clusterConfigurationBuilder.ClusterSpawnData);
            }
            else
            {
                server = new DarkRiftServer(serverConfigurationBuilder.ServerSpawnData);
            }
#else
            server = new DarkRiftServer(serverConfigurationBuilder.ServerSpawnData);
#endif


            server.StartServer();

            new Thread(new ThreadStart(ConsoleLoop)).Start();

            while (!server.Disposed)
            {
                server.DispatcherWaitHandle.WaitOne();
                server.ExecuteDispatcherTasks();
            }
        }