/// <summary> /// Initializes a new instance of the <see cref="AdminPanel" /> class. /// </summary> /// <param name="port">The port.</param> /// <param name="servers">All manageable servers, including game servers, connect servers etc.</param> /// <param name="persistenceContextProvider">The persistence context provider.</param> /// <param name="changeListener">The change listener.</param> /// <param name="loggingConfigurationPath">The logging configuration file path.</param> public AdminPanel(ushort port, IList <IManageableServer> servers, IPersistenceContextProvider persistenceContextProvider, IServerConfigurationChangeListener changeListener, string loggingConfigurationPath) { Configuration.Default.MemoryAllocator = ArrayPoolMemoryAllocator.CreateWithMinimalPooling(); // you might need to allow it first with netsh: // netsh http add urlacl http://+:1234/ user=[Username] var host = Host.CreateDefaultBuilder() .ConfigureLogging(configureLogging => { configureLogging.ClearProviders(); var settings = new Log4NetSettings { ConfigFile = loggingConfigurationPath, Watch = true }; configureLogging.AddLog4Net(settings); }) .ConfigureServices(serviceCollection => { serviceCollection.AddSingleton(servers); serviceCollection.AddSingleton(persistenceContextProvider); serviceCollection.AddSingleton(changeListener); }) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup <Startup>(); webBuilder.UseStaticWebAssets(); // For testing purposes, we use http. Later we need to switch to https. // The self-signed certificate would otherwise cause a lot of warnings in the browser. webBuilder.UseUrls($"http://*:{port}"); }) .Build(); host.Start(); }
/// <summary> /// Initializes a new instance of the <see cref="AdminPanel" /> class. /// </summary> /// <param name="port">The port.</param> /// <param name="servers">All manageable servers, including game servers, connect servers etc.</param> /// <param name="persistenceContextProvider">The persistence context provider.</param> /// <param name="changeListener">The change listener.</param> /// <param name="loggingConfigurationPath">The logging configuration file path.</param> public AdminPanel(ushort port, IList <IManageableServer> servers, IPersistenceContextProvider persistenceContextProvider, IServerConfigurationChangeListener changeListener, string loggingConfigurationPath) { // you might need to allow it first with netsh: // netsh http add urlacl http://+:1234/ user=[Username] var host = WebHost.CreateDefaultBuilder() .ConfigureLogging(configureLogging => { configureLogging.ClearProviders(); var settings = new Log4NetSettings { ConfigFile = loggingConfigurationPath, Watch = true }; configureLogging.AddLog4Net(settings); }) .ConfigureServices(serviceCollection => { serviceCollection.AddSingleton(servers); serviceCollection.AddSingleton(persistenceContextProvider); serviceCollection.AddSingleton(changeListener); }) .UseKestrel(options => { // Default port options.ListenAnyIP(port); }) .UseStartup <Startup>() .Build(); host.Start(); SignalRGameServerStateObserver.Services = host.Services; SignalRMapStateObserver.Services = host.Services; }
/// <summary> /// Adds log4net support using the settings defined in the passed in <see cref="IConfiguration"/> section /// </summary> /// <param name="self">The logger factory to update for log4net support</param> /// <param name="configuration">The settings to use for configuring log4net. /// These settings are defined in <see cref="Log4NetSettings"/></param> /// <returns>The passed in logger factory</returns> public static ILoggerFactory AddLog4Net(this ILoggerFactory self, IConfiguration configuration) { var settings = new Log4NetSettings(); configuration.Bind(settings); return(AddLog4Net(self, settings)); }
/// <summary> /// Runs the host. /// </summary> /// <param name="gameServers">The game servers.</param> /// <param name="connectServers">The connect servers.</param> /// <param name="loggingConfigurationPath">The path to the logging configuration.</param> /// <returns>The async task.</returns> public static Task RunAsync(ICollection <IGameServer> gameServers, IEnumerable <IConnectServer> connectServers, string?loggingConfigurationPath) { var builder = Host.CreateDefaultBuilder(); if (!string.IsNullOrEmpty(loggingConfigurationPath)) { builder = builder.ConfigureLogging(configureLogging => { configureLogging.ClearProviders(); var settings = new Log4NetSettings { ConfigFile = loggingConfigurationPath, Watch = true }; configureLogging.AddLog4Net(settings); }); } return(builder .ConfigureServices(s => { s.Add(new ServiceDescriptor(typeof(ICollection <IGameServer>), gameServers)); s.Add(new ServiceDescriptor(typeof(IEnumerable <IConnectServer>), connectServers)); }) .ConfigureWebHostDefaults(webBuilder => { webBuilder .UseStartup <Startup>() .UseUrls("http://*:80", "https://*:443"); }) .Build() .RunAsync()); }
public void InitializingTwoProvidersDoesNotThrow() { var settings = new Log4NetSettings(); var providerA = new Log4NetProvider(); var providerB = new Log4NetProvider(); providerA.Initialize(settings); providerB.Initialize(settings); }
/// <summary> /// Adds log4net support using the provided <see cref="Log4NetSettings"/> /// </summary> /// <param name="self">The logger factory to update for log4net support</param> /// <param name="settings">The settings to use for configuring log4net.</param> /// <returns>The passed in logger factory</returns> public static ILoggerFactory AddLog4Net(this ILoggerFactory self, Log4NetSettings settings) { var provider = new Log4NetProvider(); provider.Initialize(settings); self.AddProvider(provider); return(self); }
private static Log4NetProvider CreateProvider(XDocument configuration) { var settings = new Log4NetSettings { RootRepository = Guid.NewGuid().ToString() }; var provider = new Log4NetProvider(x => configuration, x => true); provider.Initialize(settings); return(provider); }
public void InitializingTwoProvidersDoesNotThrow() { var settings = new Log4NetSettings { RootRepository = Guid.NewGuid().ToString() }; var providerA = new Log4NetProvider(); var providerB = new Log4NetProvider(); providerA.Initialize(settings); providerB.Initialize(settings); }
private async Task <IHost> CreateHost(string[] args) { // Ensure GameLogic and GameServer Assemblies are loaded _ = GameLogic.Rand.NextInt(1, 2); _ = OpenMU.GameServer.ClientVersionResolver.DefaultVersion; var host = Host.CreateDefaultBuilder() .ConfigureLogging(configureLogging => { configureLogging.ClearProviders(); var settings = new Log4NetSettings { ConfigFile = Log4NetConfigFilePath, Watch = true }; configureLogging.AddLog4Net(settings); }) .ConfigureServices(c => c.AddSingleton(this.servers) .AddSingleton(s => s.GetService <IPersistenceContextProvider>().CreateNewConfigurationContext().Get <ChatServerDefinition>().First()) .AddSingleton(s => s.GetService <ChatServerDefinition>().ConvertToSettings()) .AddIpResolver(args) .AddSingleton(this.gameServers) .AddSingleton(this.gameServers.Values) .AddSingleton(s => this.DeterminePersistenceContextProvider(args, s.GetService <ILoggerFactory>())) .AddSingleton <IServerConfigurationChangeListener, ServerConfigurationChangeListener>() .AddSingleton <ILoginServer, LoginServer>() .AddSingleton <IGuildServer, GuildServer>() .AddSingleton <IFriendServer, FriendServer>() .AddSingleton <IChatServer, ChatServer>() .AddSingleton <ConnectServerFactory>() .AddSingleton <ConnectServerContainer>() .AddSingleton <IEnumerable <IConnectServer> >(provider => provider.GetService <ConnectServerContainer>()) .AddSingleton <GameServerContainer>() .AddSingleton <PlugInManager>() .AddSingleton <IPlugInConfigurationChangeListener, PlugInConfigurationChangeListener>() .AddSingleton <ICollection <PlugInConfiguration> >(s => s.GetService <IPersistenceContextProvider>().CreateNewTypedContext <PlugInConfiguration>().Get <PlugInConfiguration>().ToList()) .AddHostedService(provider => provider.GetService <IChatServer>()) .AddHostedService(provider => provider.GetService <ConnectServerContainer>()) .AddHostedService(provider => provider.GetService <GameServerContainer>()) .AddHostedService <AdminPanel>() .AddSingleton(new AdminPanelSettings(this.DetermineAdminPort(args))) .AddHostedService <ApiHost>()) .Build(); Log.Info("Host created"); NpgsqlLoggingProvider.Initialize(host.Services.GetService <ILoggerFactory>()); this.servers.Add(host.Services.GetService <IChatServer>()); this.LoadGameClientDefinitions(host.Services.GetService <IPersistenceContextProvider>().CreateNewConfigurationContext()); Log.Info("Starting host..."); var stopwatch = new Stopwatch(); stopwatch.Start(); await host.StartAsync(default);
/// <summary> /// Adds log4net support using the provided <see cref="Log4NetSettings"/> /// </summary> /// <param name="self">The logging builder to update for log4net support</param> /// <param name="settings">The settings to use for configuring log4net.</param> /// <returns>The passed in logging builder</returns> public static ILoggingBuilder AddLog4Net(this ILoggingBuilder self, Log4NetSettings settings) { var provider = new Log4NetProvider(); provider.Initialize(settings); self.AddProvider(provider) .AddFilter <Log4NetProvider>((category, logLevel) => { return(provider.CreateLogger(category).IsEnabled(logLevel)); }); return(self); }
public void SettingsDefault() { // Arrange // Act var settings = new Log4NetSettings(); // Assert Assert.Equal(1, settings.GlobalContextProperties.Count); Assert.Equal("log4net.config", settings.ConfigFilePath); Assert.False(settings.Watch); }
private async Task <IHost> CreateHost(string[] args) { var persistenceContextProvider = this.DeterminePersistenceContextProvider(args); var persistenceContext = persistenceContextProvider.CreateNewConfigurationContext(); this.LoadGameClientDefinitions(persistenceContext); var chatServerDefinition = persistenceContext.Get <ChatServerDefinition>().First(); var host = Host.CreateDefaultBuilder() .ConfigureLogging(configureLogging => { configureLogging.ClearProviders(); var settings = new Log4NetSettings { ConfigFile = Log4NetConfigFilePath, Watch = true }; configureLogging.AddLog4Net(settings); }) .ConfigureServices(c => c.AddSingleton(this.servers) .AddSingleton(chatServerDefinition) .AddSingleton(chatServerDefinition.ConvertToSettings()) .AddSingleton(IpAddressResolverFactory.DetermineIpResolver(args)) .AddSingleton(this.gameServers) .AddSingleton(this.gameServers.Values) .AddSingleton(persistenceContextProvider) .AddSingleton <IServerConfigurationChangeListener, ServerConfigurationChangeListener>() .AddSingleton <ILoginServer, LoginServer>() .AddSingleton <IGuildServer, GuildServer>() .AddSingleton <IFriendServer, FriendServer>() .AddSingleton <IChatServer, ChatServer>() .AddSingleton <ConnectServerContainer>() .AddSingleton <IEnumerable <IConnectServer> >(provider => provider.GetService <ConnectServerContainer>()) .AddSingleton <GameServerContainer>() .AddHostedService(provider => provider.GetService <IChatServer>()) .AddHostedService(provider => provider.GetService <ConnectServerContainer>()) .AddHostedService(provider => provider.GetService <GameServerContainer>()) .AddHostedService <AdminPanel>() .AddSingleton(new AdminPanelSettings(this.DetermineAdminPort(args))) .AddHostedService <ApiHost>()) .Build(); Log.Info("Host created"); this.servers.Add(host.Services.GetService <IChatServer>()); Log.Info("Starting host..."); var stopwatch = new Stopwatch(); stopwatch.Start(); await host.StartAsync(default);
/// <summary> /// Creates the Host instance. /// </summary> /// <param name="gameServers">The game servers.</param> /// <param name="connectServers">The connect servers.</param> /// <param name="loggerFactory">The logger factory.</param> /// <param name="loggingConfigurationPath">The logging configuration path.</param> /// <returns> /// The created host. /// </returns> public static IHost BuildHost(ICollection <IGameServer> gameServers, IEnumerable <IConnectServer> connectServers, ILoggerFactory loggerFactory, string?loggingConfigurationPath) { var builder = Host.CreateDefaultBuilder(); if (!string.IsNullOrEmpty(loggingConfigurationPath)) { builder.ConfigureLogging(configureLogging => { configureLogging.ClearProviders(); var settings = new Log4NetSettings { ConfigFile = loggingConfigurationPath, Watch = true }; configureLogging.AddLog4Net(settings); }); } return(builder .ConfigureServices(s => { if (loggerFactory != null) { s.AddSingleton(loggerFactory); } s.AddSingleton(gameServers); s.AddSingleton(connectServers); }) .ConfigureWebHostDefaults(webBuilder => { webBuilder .UseStartup <Startup>() .UseUrls("http://*:80", "https://*:443"); }) .Build()); }