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); }
/// <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(); } }