private void InitializeData(string version, ILoggerFactory loggerFactory, IPersistenceContextProvider contextProvider) { var serviceContainer = new ServiceContainer(); serviceContainer.AddService(typeof(ILoggerFactory), loggerFactory); serviceContainer.AddService(typeof(IPersistenceContextProvider), contextProvider); var plugInManager = new PlugInManager(null, loggerFactory, serviceContainer); plugInManager.DiscoverAndRegisterPlugInsOf <IDataInitializationPlugIn>(); var initialization = plugInManager.GetStrategy <IDataInitializationPlugIn>(version) ?? throw new Exception("Data initialization plugin not found"); initialization.CreateInitialData(3, true); }
/// <summary> /// Loads the member names from the database. /// </summary> /// <param name="persistenceContextProvider">The persistence context provider.</param> public void LoadMemberNames(IPersistenceContextProvider persistenceContextProvider) { var memberNames = this.DatabaseContext.GetMemberNames(this.Guild.Id); if (memberNames != null) { foreach (var member in this.Members.Where(m => m.Value.PlayerName == null)) { if (memberNames.TryGetValue(member.Key, out string name)) { member.Value.PlayerName = name; } } } }
/// <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> public AdminPanel(ushort port, IList <IManageableServer> servers, IPersistenceContextProvider persistenceContextProvider) { Startup.Bootstrapper = new MyBootstrapper(servers, persistenceContextProvider); var startOptions = new StartOptions($"http://+:{port}") { ServerFactory = typeof(OwinHttpListener).Namespace, AppStartup = typeof(Startup).AssemblyQualifiedName }; WorldObserverHub.Servers = servers; // you might need to allow it first with netsh: // netsh http add urlacl http://+:1234/ user=[Username] this.webApp = WebApp.Start <Startup>(startOptions); }
/// <summary> /// Initializes a new instance of the <see cref="GameContext"/> class. /// </summary> /// <param name="configuration">The configuration.</param> /// <param name="persistenceContextProvider">The persistence context provider.</param> public GameContext(GameConfiguration configuration, IPersistenceContextProvider persistenceContextProvider) { try { this.Configuration = configuration; this.PersistenceContextProvider = persistenceContextProvider; this.MapList = new Dictionary <ushort, GameMap>(); this.recoverTimer = new Timer(this.RecoverTimerElapsed, null, this.Configuration.RecoveryInterval, this.Configuration.RecoveryInterval); } catch (Exception ex) { Log.Error(ex); throw; } }
/// <summary> /// Initializes a new instance of the <see cref="GameServerContext" /> class. /// </summary> /// <param name="gameServerDefinition">The game server definition.</param> /// <param name="guildServer">The guild server.</param> /// <param name="loginServer">The login server.</param> /// <param name="friendServer">The friend server.</param> /// <param name="persistenceContextProvider">The persistence context provider.</param> /// <param name="mapInitializer">The map initializer.</param> public GameServerContext( GameServerDefinition gameServerDefinition, IGuildServer guildServer, ILoginServer loginServer, IFriendServer friendServer, IPersistenceContextProvider persistenceContextProvider, IMapInitializer mapInitializer) : base(gameServerDefinition.GameConfiguration, persistenceContextProvider, mapInitializer) { this.Id = gameServerDefinition.ServerID; this.GuildServer = guildServer; this.LoginServer = loginServer; this.FriendServer = friendServer; this.ServerConfiguration = gameServerDefinition.ServerConfiguration; }
/// <summary> /// Initializes a new instance of the <see cref="GameServerContext"/> class. /// </summary> /// <param name="gameServerDefinition">The game server definition.</param> /// <param name="guildServer">The guild server.</param> /// <param name="loginServer">The login server.</param> /// <param name="friendServer">The friend server.</param> /// <param name="persistenceContextProvider">The persistence context provider.</param> public GameServerContext( GameServerDefinition gameServerDefinition, IGuildServer guildServer, ILoginServer loginServer, IFriendServer friendServer, IPersistenceContextProvider persistenceContextProvider) : base(gameServerDefinition.GameConfiguration, persistenceContextProvider) { this.Id = gameServerDefinition.ServerID; this.GuildServer = guildServer; this.LoginServer = loginServer; this.FriendServer = friendServer; this.ServerConfiguration = gameServerDefinition.ServerConfiguration; this.PacketHandlers = gameServerDefinition.ServerConfiguration.SupportedPacketHandlers.Select(m => new ConfigurableMainPacketHandler(m, this)).ToArray <IMainPacketHandler>(); this.GuildCache = new GuildCache(this, new GuildInfoSerializer()); }
/// <summary> /// Initializes a new instance of the <see cref="GameServerContext" /> class. /// </summary> /// <param name="gameServerDefinition">The game server definition.</param> /// <param name="guildServer">The guild server.</param> /// <param name="loginServer">The login server.</param> /// <param name="friendServer">The friend server.</param> /// <param name="persistenceContextProvider">The persistence context provider.</param> /// <param name="mapInitializer">The map initializer.</param> /// <param name="loggerFactory">The logger factory.</param> /// <param name="plugInManager">The plug in manager.</param> public GameServerContext( GameServerDefinition gameServerDefinition, IGuildServer guildServer, ILoginServer loginServer, IFriendServer friendServer, IPersistenceContextProvider persistenceContextProvider, IMapInitializer mapInitializer, ILoggerFactory loggerFactory, PlugInManager plugInManager) : base(gameServerDefinition.GameConfiguration ?? throw new InvalidOperationException("GameServerDefinition requires a GameConfiguration"), persistenceContextProvider, mapInitializer, loggerFactory, plugInManager) { this.gameServerDefinition = gameServerDefinition; this.Id = gameServerDefinition.ServerID; this.GuildServer = guildServer; this.LoginServer = loginServer; this.FriendServer = friendServer; this.ServerConfiguration = gameServerDefinition.ServerConfiguration ?? throw new InvalidOperationException("GameServerDefinition requires a ServerConfiguration"); }
/// <summary> /// Initializes a new instance of the <see cref="GameServerContext" /> class. /// </summary> /// <param name="gameServerDefinition">The game server definition.</param> /// <param name="guildServer">The guild server.</param> /// <param name="loginServer">The login server.</param> /// <param name="friendServer">The friend server.</param> /// <param name="persistenceContextProvider">The persistence context provider.</param> /// <param name="stateObserver">The state observer.</param> /// <param name="mapInitializer">The map initializer.</param> public GameServerContext( GameServerDefinition gameServerDefinition, IGuildServer guildServer, ILoginServer loginServer, IFriendServer friendServer, IPersistenceContextProvider persistenceContextProvider, IServerStateObserver stateObserver, IMapInitializer mapInitializer) : base(gameServerDefinition.GameConfiguration, persistenceContextProvider, new ServerStateToGameStateObserverAdapter(stateObserver, gameServerDefinition.ServerID), mapInitializer) { this.Id = gameServerDefinition.ServerID; this.GuildServer = guildServer; this.LoginServer = loginServer; this.FriendServer = friendServer; this.ServerConfiguration = gameServerDefinition.ServerConfiguration; this.PacketHandlers = gameServerDefinition.ServerConfiguration.SupportedPacketHandlers.Select(m => new ConfigurableMainPacketHandler(m, this)).ToArray <IMainPacketHandler>(); }
private void TestDataInitialization(IPersistenceContextProvider contextProvider) { var initialization = new DataInitialization(contextProvider, new NullLoggerFactory()); initialization.CreateInitialData(); // Loading game configuration using var context = contextProvider.CreateNewConfigurationContext(); var gameConfiguraton = context.Get <DataModel.Configuration.GameConfiguration>().FirstOrDefault(); Assert.That(gameConfiguraton, Is.Not.Null); // Testing loading of an account using var accountContext = contextProvider.CreateNewPlayerContext(gameConfiguraton); var account1 = accountContext.GetAccountByLoginName("test1", "test1"); Assert.That(account1, Is.Not.Null); Assert.That(account1.LoginName, Is.EqualTo("test1")); }
/// <summary> /// Initializes a new instance of the <see cref="GameContext" /> class. /// </summary> /// <param name="configuration">The configuration.</param> /// <param name="persistenceContextProvider">The persistence context provider.</param> /// <param name="stateObserver">The state observer.</param> /// <param name="mapInitializer">The map initializer.</param> public GameContext(GameConfiguration configuration, IPersistenceContextProvider persistenceContextProvider, IGameStateObserver stateObserver, IMapInitializer mapInitializer) { try { this.Configuration = configuration; this.PersistenceContextProvider = persistenceContextProvider; this.PlugInManager = new PlugInManager(configuration.PlugInConfigurations); this.mapList = new Dictionary <ushort, GameMap>(); this.recoverTimer = new Timer(this.RecoverTimerElapsed, null, this.Configuration.RecoveryInterval, this.Configuration.RecoveryInterval); } catch (Exception ex) { Log.Error(ex); throw; } this.stateObserver = stateObserver; this.mapInitializer = mapInitializer; }
/// <summary> /// Initializes a new instance of the <see cref="GameServerContainer" /> class. /// </summary> /// <param name="logger">The logger.</param> /// <param name="servers">The servers.</param> /// <param name="gameServers">The game servers.</param> /// <param name="persistenceContextProvider">The persistence context provider.</param> /// <param name="connectServerContainer">The connect server container.</param> /// <param name="guildServer">The guild server.</param> /// <param name="loginServer">The login server.</param> /// <param name="friendServer">The friend server.</param> /// <param name="ipResolver">The ip resolver.</param> public GameServerContainer( ILogger <GameServerContainer> logger, IList <IManageableServer> servers, IDictionary <int, IGameServer> gameServers, IPersistenceContextProvider persistenceContextProvider, ConnectServerContainer connectServerContainer, IGuildServer guildServer, ILoginServer loginServer, IFriendServer friendServer, IIpAddressResolver ipResolver) { this.logger = logger; this.servers = servers; this.gameServers = gameServers; this.persistenceContextProvider = persistenceContextProvider; this.connectServerContainer = connectServerContainer; this.guildServer = guildServer; this.loginServer = loginServer; this.friendServer = friendServer; this.ipResolver = ipResolver; }
/// <summary> /// Initializes a new instance of the <see cref="GameContext" /> class. /// </summary> /// <param name="configuration">The configuration.</param> /// <param name="persistenceContextProvider">The persistence context provider.</param> /// <param name="mapInitializer">The map initializer.</param> public GameContext(GameConfiguration configuration, IPersistenceContextProvider persistenceContextProvider, IMapInitializer mapInitializer) { try { this.Configuration = configuration; this.PersistenceContextProvider = persistenceContextProvider; this.PlugInManager = new PlugInManager(configuration.PlugInConfigurations); this.mapList = new Dictionary <ushort, GameMap>(); this.recoverTimer = new Timer(this.RecoverTimerElapsed, null, this.Configuration.RecoveryInterval, this.Configuration.RecoveryInterval); this.tasksTimer = new Timer(this.ExecutePeriodicTasks, null, 1000, 1000); this.FeaturePlugIns = new FeaturePlugInContainer(this.PlugInManager); } catch (Exception ex) { Log.Error(ex); throw; } this.mapInitializer = mapInitializer; }
/// <summary>Initializes a new instance of the <see cref="GameServer" /> class with default implementations.</summary> public static GameServer Create( Configuration config, IPersistenceContextProvider persistenceContextProvider, IGameServerRegistrar gameServerRegistrar, IAccountLoginService accountLoginService) { var gameContext = new GameContext(persistenceContextProvider, new LoginServiceAdapter(accountLoginService)); var clientController = new ClientController(); var clientProtocolResolver = new ClientProtocolResolver(config, gameContext); var clientListener = new GameServerTcpListener(config, clientController, clientProtocolResolver, gameServerRegistrar); clientListener.AddFilter(new MaxConnectionsFilter(config.MaxConnections)); clientListener.AddFilter(new MaxConnectionsPerIpFilter(config.MaxConnectionsPerIp)); var gameServer = new GameServer(config, clientController, gameContext); gameServer.AddListener(clientListener); return(gameServer); }
/// <summary> /// Initializes a new instance of the <see cref="GameServer"/> class. /// </summary> /// <param name="gameServerDefinition">The game server definition.</param> /// <param name="guildServer">The guild server.</param> /// <param name="loginServer">The login server.</param> /// <param name="persistenceContextProvider">The persistence context provider.</param> /// <param name="friendServer">The friend server.</param> public GameServer( GameServerDefinition gameServerDefinition, IGuildServer guildServer, ILoginServer loginServer, IPersistenceContextProvider persistenceContextProvider, IFriendServer friendServer) { this.Id = gameServerDefinition.ServerID; this.Description = gameServerDefinition.Description; try { this.gameContext = new GameServerContext(gameServerDefinition, guildServer, loginServer, friendServer, persistenceContextProvider); } catch (Exception ex) { Logger.Fatal(ex); throw; } this.ServerInfo = new GameServerInfoAdapter(this, gameServerDefinition.ServerConfiguration); }
/// <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> public AdminPanel(ushort port, IList <IManageableServer> servers, IPersistenceContextProvider persistenceContextProvider) { Startup.Bootstrapper = new MyBootstrapper(servers, persistenceContextProvider); WorldObserverHub.Servers = servers; ServerListHub.Servers = servers; // you might need to allow it first with netsh: // netsh http add urlacl http://+:1234/ user=[Username] var host = new WebHostBuilder() .UseContentRoot(Directory.GetCurrentDirectory()) .UseKestrel(options => { // Default port options.ListenAnyIP(port); }) .UseStartup <Startup>() .Build(); host.Start(); SignalRGameServerStateObserver.Services = host.Services; SignalRMapStateObserver.Services = host.Services; }
/// <summary> /// Initializes a new instance of the <see cref="GameContext" /> class. /// </summary> /// <param name="configuration">The configuration.</param> /// <param name="persistenceContextProvider">The persistence context provider.</param> /// <param name="mapInitializer">The map initializer.</param> /// <param name="loggerFactory">The logger factory.</param> /// <param name="plugInManager">The plug in manager.</param> public GameContext(GameConfiguration configuration, IPersistenceContextProvider persistenceContextProvider, IMapInitializer mapInitializer, ILoggerFactory loggerFactory, PlugInManager plugInManager) { try { this.Configuration = configuration; this.PersistenceContextProvider = persistenceContextProvider; this.PlugInManager = plugInManager; this.mapInitializer = mapInitializer; this.LoggerFactory = loggerFactory; this.ItemPowerUpFactory = new ItemPowerUpFactory(loggerFactory.CreateLogger <ItemPowerUpFactory>()); this.mapList = new Dictionary <ushort, GameMap>(); this.recoverTimer = new Timer(this.RecoverTimerElapsed, null, this.Configuration.RecoveryInterval, this.Configuration.RecoveryInterval); this.tasksTimer = new Timer(this.ExecutePeriodicTasks, null, 1000, 1000); this.FeaturePlugIns = new FeaturePlugInContainer(this.PlugInManager); } catch (Exception ex) { loggerFactory.CreateLogger <GameContext>().LogError(ex, "Unexpected error in constructor of GameContext."); throw; } }
/// <summary> /// Initializes a new instance of the <see cref="DataModule"/> class. /// </summary> /// <param name="persistenceContextProvider">The persistence context provider.</param> public DataModule(IPersistenceContextProvider persistenceContextProvider) : base("/data") { this.persistenceContextProvider = persistenceContextProvider; this.registeredRepositoryTypes = new List <string>(); this.Get("/registered", _ => this.Response.AsJson(this.registeredRepositoryTypes)); this.Get("/gameconfiguration.json", _ => { using (var context = this.persistenceContextProvider.CreateNewContext()) { var firstConfiguration = context.Get <GameConfiguration>().First(); if (firstConfiguration is IConvertibleTo <Persistence.BasicModel.GameConfiguration> convertibleTo) { return(convertibleTo.Convert().ToJson()); } return(null); } }); this.Get("/{id:guid}/gameconfiguration.json", parameters => { using (var context = this.persistenceContextProvider.CreateNewContext()) { var configuration = context.GetById <GameConfiguration>((Guid)parameters.id); if (configuration is IConvertibleTo <Persistence.BasicModel.GameConfiguration> convertibleTo) { return(convertibleTo.Convert().ToJson()); } return(null); } }); this.RegisterType <GameMapDefinition>(); //// TODO: add authentification }
/// <summary> /// Initializes a new instance of the <see cref="ItemModifyConsumeHandler"/> class. /// </summary> /// <param name="persistenceContextProvider">The persistence context provider.</param> protected ItemModifyConsumeHandler(IPersistenceContextProvider persistenceContextProvider) { this.PersistenceContextProvider = persistenceContextProvider; }
/// <summary> /// Initializes a new instance of the <see cref="AccountController"/> class. /// </summary> /// <param name="persistenceContextProvider">The persistence context provider.</param> public AccountController(IPersistenceContextProvider persistenceContextProvider) { this.persistenceContextProvider = persistenceContextProvider; }
/// <summary> /// Initializes a new instance of the <see cref="PersistentObjectsLookupController"/> class. /// </summary> /// <param name="contextProvider">The persistence context provider.</param> public PersistentObjectsLookupController(IPersistenceContextProvider contextProvider) { this.contextProvider = contextProvider; }
/// <summary> /// Initializes a new instance of the <see cref="ConnectServerContainer"/> class. /// </summary> /// <param name="servers">The servers.</param> /// <param name="persistenceContextProvider">The persistence context provider.</param> /// <param name="logger">The logger.</param> public ConnectServerContainer(IList <IManageableServer> servers, IPersistenceContextProvider persistenceContextProvider, ILogger <ConnectServerContainer> logger) { this.servers = servers; this.persistenceContextProvider = persistenceContextProvider; this.logger = logger; }
/// <summary> /// Initializes a new instance of the <see cref="ItemUpgradeConsumeHandler"/> class. /// </summary> /// <param name="persistenceContextProvider">The persistence context provider.</param> /// <param name="configuration">The configuration.</param> internal ItemUpgradeConsumeHandler(IPersistenceContextProvider persistenceContextProvider, ItemUpgradeConfiguration configuration) : base(persistenceContextProvider) { this.Configuration = configuration; }
/// <summary> /// Initializes a new instance of the <see cref="Program"/> class. /// Constructor for the main entry program. /// </summary> /// <param name="args">The command line args.</param> public Program(string[] args) { if (args.Contains("-demo")) { this.persistenceContextProvider = new InMemoryPersistenceContextProvider(); var initialization = new DataInitialization(this.persistenceContextProvider); initialization.CreateInitialData(); } else { this.persistenceContextProvider = this.PrepareRepositoryManager(args.Contains("-reinit")); } Log.Info("Start initializing sub-components"); var signalRServerObserver = new SignalRGameServerStateObserver(); var persistenceContext = this.persistenceContextProvider.CreateNewConfigurationContext(); var loginServer = new LoginServer(); var chatServer = new ChatServerListener(55980, signalRServerObserver); this.servers.Add(chatServer); var guildServer = new GuildServer(this.gameServers, this.persistenceContextProvider); var friendServer = new FriendServer(this.gameServers, chatServer, this.persistenceContextProvider); var connectServer = ConnectServerFactory.CreateConnectServer(signalRServerObserver); this.servers.Add(connectServer); Log.Info("Start initializing game servers"); Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); foreach (var gameServerDefinition in persistenceContext.Get <DataModel.Configuration.GameServerDefinition>()) { using (ThreadContext.Stacks["gameserver"].Push(gameServerDefinition.ServerID.ToString())) { var gameServer = new GameServer(gameServerDefinition, guildServer, loginServer, this.persistenceContextProvider, friendServer, signalRServerObserver); foreach (var mainPacketHandler in gameServer.Context.PacketHandlers.Take(1)) { // At the moment only one main packet handler should be used. // A TCP port can only be used for one TCP listener, so we have to introduce something to pair ports with main packets handlers. gameServer.AddListener(new DefaultTcpGameServerListener(gameServerDefinition.NetworkPort, gameServer.ServerInfo, gameServer.Context, connectServer, mainPacketHandler)); } this.servers.Add(gameServer); this.gameServers.Add(gameServer.Id, gameServer); Log.InfoFormat("Game Server {0} - [{1}] initialized", gameServer.Id, gameServer.Description); } } stopwatch.Stop(); Log.Info($"All game servers initialized, elapsed time: {stopwatch.Elapsed}"); Log.Info("Start initializing admin panel"); this.adminPanel = new AdminPanel(1234, this.servers, this.persistenceContextProvider); Log.Info("Admin panel initialized"); if (args.Contains("-autostart")) { chatServer.Start(); foreach (var gameServer in this.gameServers.Values) { gameServer.Start(); } connectServer.Start(); } }
/// <summary> /// Initializes a new instance of the <see cref="AttributeDictionaryConverter"/> class. /// </summary> /// <param name="persistenceContextProvider">The persistence context provider.</param> public AttributeDictionaryConverter(IPersistenceContextProvider persistenceContextProvider) { this.persistenceContextProvider = persistenceContextProvider; }
/// <summary> /// Initializes a new instance of the <see cref="DataInitializationBase" /> class. /// </summary> /// <param name="persistenceContextProvider">The persistence context provider.</param> /// <param name="loggerFactory">The logger factory.</param> protected DataInitializationBase(IPersistenceContextProvider persistenceContextProvider, ILoggerFactory loggerFactory) { this.persistenceContextProvider = persistenceContextProvider; this.loggerFactory = loggerFactory; }
/// <summary> /// Initializes a new instance of the <see cref="LifeJewelConsumeHandler" /> class. /// </summary> /// <param name="persistenceContextProvider">The persistence context provider.</param> public LifeJewelConsumeHandler(IPersistenceContextProvider persistenceContextProvider) : base(persistenceContextProvider, new ItemUpgradeConfiguration(ItemOptionTypes.Option, true, true, 0.5, ItemFailResult.DecreaseOptionByOneOrRemove)) { }
/// <summary> /// Initializes a new instance of the <see cref="BlessJewelConsumeHandler"/> class. /// </summary> /// <param name="persistenceContextProvider">The persistence context provider.</param> public BlessJewelConsumeHandler(IPersistenceContextProvider persistenceContextProvider) : base(persistenceContextProvider) { }
/// <summary> /// Initializes a new instance of the <see cref="PlugInController"/> class. /// </summary> /// <param name="persistenceContextProvider">The persistence context provider.</param> public PlugInController(IPersistenceContextProvider persistenceContextProvider) { this.persistenceContextProvider = persistenceContextProvider; }
private static LoginServer.LoginServer CreateLoginServer(IPersistenceContextProvider persistenceContextProvider) { var config = new LoginServer.Configuration(); return(LoginServer.LoginServerFactory.Create(config, persistenceContextProvider)); }
/// <summary>Initializes a new instance of the <see cref="LoginServer" /> class with default implementations.</summary> public static LoginServer Create(Configuration config, IPersistenceContextProvider persistenceContextProvider) => new LoginServer(config, persistenceContextProvider);