public void GivenIHaveARunningServer(string serverConfig, string clusterConfig) { NameValueCollection parameters = new NameValueCollection { { "port", GetFreePort().ToString() } }; DarkRiftServerConfigurationBuilder serverConfigurationBuilder = DarkRiftServerConfigurationBuilder.CreateFromXml("Configurations/Server/" + serverConfig, parameters); #if PRO serverConfigurationBuilder.AddPluginType(typeof(InMemoryServerRegistryConnector)); DarkRiftServer server = new DarkRiftServer( serverConfigurationBuilder.ServerSpawnData, ClusterSpawnData.CreateFromXml("Configurations/Cluster/" + clusterConfig, new NameValueCollection()) ); #else DarkRiftServer server = new DarkRiftServer( serverConfigurationBuilder.ServerSpawnData ); #endif server.StartServer(); world.AddServer(server); #if DEBUG // We've just requested a load of objects that wont be returned until we close // UDP receive TCP accept performanceSteps.ExpectedUnaccountedForSocketAsyncEventArgs += 2; #endif }
/// <summary> /// Start a server with our listener and a basic configuration. /// </summary> /// <param name="group">The server group to create the server in.</param> /// <param name="withHealthCheckAvailable">Whether the health cehck plugin should be loaded.</param> /// <returns>The created server.</returns> private DarkRiftServer StartServer(string group, bool withHealthCheckAvailable = true) { // Create a two group cluster ClusterSpawnData clusterSpawnData = new ClusterSpawnData(); clusterSpawnData.Groups.Groups.Add(new ClusterSpawnData.GroupsSettings.GroupSettings { Name = "Group1", Visibility = ServerVisibility.Internal }); clusterSpawnData.Groups.Groups.Add(new ClusterSpawnData.GroupsSettings.GroupSettings { Name = "Group2", Visibility = ServerVisibility.External, }); clusterSpawnData.Groups.Groups[1].ConnectsTo.Add(new ClusterSpawnData.GroupsSettings.GroupSettings.ConnectsToSettings { Name = "Group1" }); // And a server config ServerSpawnData serverSpawnData = new ServerSpawnData(); serverSpawnData.Server.ServerGroup = group; // Create listener config ushort port = GetFreePort(); serverSpawnData.Listeners.NetworkListeners.Add(new ServerSpawnData.ListenersSettings.NetworkListenerSettings { Name = "DefaultListener", Type = "BichannelListener", Address = IPAddress.Loopback, Port = port }); // Add a logger serverSpawnData.Logging.LogWriters.Add(new ServerSpawnData.LoggingSettings.LogWriterSettings { Name = "ConsoleWriter", Type = "ConsoleWriter", LogLevels = new LogType[] { LogType.Trace, LogType.Info, LogType.Warning, LogType.Error, LogType.Fatal } }); serverSpawnData.Logging.LogWriters[0].Settings.Add("useFastAnsiColoring", "false"); // Add the registry connector type serverSpawnData.PluginSearch.PluginTypes.Add(typeof(ConsulServerRegistryConnector)); // And load it in serverSpawnData.ServerRegistry = new ServerSpawnData.ServerRegistrySettings { AdvertisedHost = "localhost", AdvertisedPort = port }; serverSpawnData.ServerRegistry.ServerRegistryConnector.Type = nameof(ServerRegistryConnector1); // Create a health check if necessary if (withHealthCheckAvailable) { ushort healthPort = GetFreePort(); serverSpawnData.Plugins.Plugins.Add(new ServerSpawnData.PluginsSettings.PluginSettings { Type = "HealthCheckPlugin" }); serverSpawnData.Plugins.Plugins[0].Settings.Add("port", healthPort.ToString()); // Add port to the registry connector serverSpawnData.ServerRegistry.ServerRegistryConnector.Settings.Add("healthCheckUrl", $"http://localhost:{healthPort}/health"); } DarkRiftServer server = new DarkRiftServer(serverSpawnData, clusterSpawnData); server.StartServer(); return(server); }
// TODO add to docs // TODO test private DarkRiftClusterConfigurationBuilder(ClusterSpawnData clusterSpawnData) { ClusterSpawnData = clusterSpawnData; }