public NecServer(NecSetting setting)
        {
            Setting       = setting;
            Router        = new PacketRouter();
            _authConsumer = new NecQueueConsumer(Setting);
            _authConsumer.SetIdentity("Auth");
            _msgConsumer = new NecQueueConsumer(Setting);
            _msgConsumer.SetIdentity("Msg");
            _areaConsumer = new NecQueueConsumer(Setting);
            _areaConsumer.SetIdentity("Area");

            _authServer = new AsyncEventServer(
                Setting.ListenIpAddress,
                Setting.AuthPort,
                _authConsumer
                );

            _msgServer = new AsyncEventServer(
                Setting.ListenIpAddress,
                Setting.MsgPort,
                _msgConsumer
                );

            _areaServer = new AsyncEventServer(
                Setting.ListenIpAddress,
                Setting.AreaPort,
                _areaConsumer
                );

            LoadHandler();
        }
Exemple #2
0
        public void TestBuild()
        {
            /* Confirm successful build with currently configured database. */
            NecSetting settings = new NecSetting();

            new NecDatabaseBuilder().Build(settings.DatabaseSettings);
        }
Exemple #3
0
 public RecvMapChangeForce(Map map, MapPosition mapPosition, NecSetting setting)
     : base((ushort)AreaPacketId.recv_map_change_force, ServerType.Area)
 {
     _map         = map;
     _mapPosition = mapPosition;
     _setting     = setting;
 }
        public Program(string[] args)
        {
            _consoleLock = new object();
            LogProvider.GlobalLogWrite += LogProviderOnGlobalLogWrite;
            if (args.Length == 2)
            {
                FpmfArchiveIO archiveIO = new FpmfArchiveIO();
                FpmfArchive   archive   = archiveIO.Open(args[0]);
                archiveIO.Save(archive, args[1]);
                return;
            }

            if (args.Length == 1)
            {
                FpmfArchiveIO archiveIO = new FpmfArchiveIO();
                archiveIO.OpenWoItm(args[0]);
                return;
            }


            NecSetting setting = new NecSetting();

            LogProvider.Configure <NecLogger>(setting);

            NecServer server = new NecServer(setting);

            server.Start();
            Console.WriteLine("Press any key to exit..");
            Console.ReadKey();
            server.Stop();
        }
Exemple #5
0
 public override void Initialize(string identity, string name, Action <Log> write, object configuration)
 {
     base.Initialize(identity, name, write, configuration);
     _setting = configuration as NecSetting;
     if (_setting == null)
     {
         Error("Couldn't apply NecLogger configuration");
     }
 }
 public NecDatabaseBuilder(NecSetting setting, SettingRepository settingRepository = null)
 {
     _setting           = setting;
     _settingRepository = settingRepository;
     if (_settingRepository == null)
     {
         _settingRepository = new SettingRepository(_setting.repositoryFolder).Initialize();
     }
 }
Exemple #7
0
 public NecQueueConsumer(ServerType serverType, NecSetting setting, AsyncEventSettings socketSetting) : base(
         socketSetting, serverType.ToString())
 {
     _serverType         = serverType;
     _setting            = setting;
     _lock               = new object();
     _clientHandlers     = new Dictionary <int, IClientHandler>();
     _connectionHandlers = new Dictionary <int, IConnectionHandler>();
     _connections        = new Dictionary <ITcpSocket, NecConnection>();
 }
 public NecQueueConsumer(NecSetting setting)
 {
     _setting        = setting;
     _logger         = LogProvider.Logger <NecLogger>(this);
     _maxUnitOfOrder = 2; // TODO read from setting
     _queues         = new BlockingCollection <ClientEvent> [_maxUnitOfOrder];
     _threads        = new Thread[_maxUnitOfOrder];
     _lock           = new object();
     _handlers       = new Dictionary <int, IHandler>();
     _clients        = new Dictionary <ITcpSocket, NecClient>();
     _identity       = "";
 }
 public NecromancyBot(NecSetting setting)
 {
     _ready   = false;
     _setting = setting;
     _cancellationTokenSource = new CancellationTokenSource();
     _assemblies = new List <Assembly>();
     _collection = new ServiceCollection();
     _collection
     .AddSingleton <CommandService>()
     .AddSingleton <DiscordSocketClient>()
     .AddSingleton <CommandHandlingService>();
 }
Exemple #10
0
        public NecServer(NecSetting setting)
        {
            _running = false;
            Setting  = new NecSetting(setting);

            NecromancyBot = new NecromancyBot(setting);
            NecromancyBot.AddSingleton(this);

            Instances         = new InstanceGenerator();
            Instances64       = new InstanceGenerator64();
            Clients           = new ClientLookup();
            Characters        = new CharacterLookup();
            Maps              = new MapLookup();
            Chat              = new ChatManager(this);
            Router            = new PacketRouter();
            Database          = new NecDatabaseBuilder().Build(Setting.DatabaseSettings);
            SettingRepository = new SettingRepository(Setting.RepositoryFolder).Initialize();
            _authConsumer     = new NecQueueConsumer(ServerType.Auth, Setting, Setting.AuthSocketSettings);
            _authConsumer.ClientDisconnected += AuthClientDisconnected;
            _msgConsumer = new NecQueueConsumer(ServerType.Msg, Setting, Setting.MsgSocketSettings);
            _msgConsumer.ClientDisconnected += MsgClientDisconnected;
            _areaConsumer = new NecQueueConsumer(ServerType.Area, Setting, Setting.AreaSocketSettings);
            _areaConsumer.ClientDisconnected += AreaClientDisconnected;

            _authServer = new AsyncEventServer(
                Setting.ListenIpAddress,
                Setting.AuthPort,
                _authConsumer,
                Setting.AuthSocketSettings
                );

            _msgServer = new AsyncEventServer(
                Setting.ListenIpAddress,
                Setting.MsgPort,
                _msgConsumer,
                Setting.MsgSocketSettings
                );

            _areaServer = new AsyncEventServer(
                Setting.ListenIpAddress,
                Setting.AreaPort,
                _areaConsumer,
                Setting.AreaSocketSettings
                );

            LoadChatCommands();
            LoadSettingRepository();
            LoadHandler();
            LoadCharacterRepository();
        }
Exemple #11
0
        private string MakeSqLiteConnectionString()
        {
            //TODO move info to resources
            SQLiteConnectionStringBuilder sqLiteConnStrBuilder = new SQLiteConnectionStringBuilder();
            string          settingFile     = "server_setting.json";
            SettingProvider settingProvider = new SettingProvider();
            NecSetting      setting         = settingProvider.Load <NecSetting>(settingFile);
            string          sqLitePath      = Path.Combine(setting.databaseSettings.sqLiteFolder, "db.sqlite");

            sqLiteConnStrBuilder.DataSource  = sqLitePath;
            sqLiteConnStrBuilder.Version     = 3;
            sqLiteConnStrBuilder.Pooling     = true;
            sqLiteConnStrBuilder.ForeignKeys = true;
            sqLiteConnStrBuilder.Flags       = sqLiteConnStrBuilder.Flags & SQLiteConnectionFlags.StrictConformance;
            return(sqLiteConnStrBuilder.ConnectionString);
        }
Exemple #12
0
        public NecServer(NecSetting setting)
        {
            _running     = false;
            this.setting = new NecSetting(setting);

            necromancyBot = new NecromancyBot(this.setting);
            necromancyBot.AddSingleton(this);
            instances         = new InstanceGenerator(this);
            clients           = new ClientLookup();
            maps              = new MapLookup();
            chat              = new ChatManager(this);
            router            = new PacketRouter();
            settingRepository = new SettingRepository(this.setting.repositoryFolder).Initialize();
            database          = new NecDatabaseBuilder(this.setting, settingRepository).Build();
            _authConsumer     = new NecQueueConsumer(ServerType.Auth, this.setting, this.setting.authSocketSettings);
            _authConsumer.clientDisconnected += AuthClientDisconnected;
            _msgConsumer = new NecQueueConsumer(ServerType.Msg, this.setting, this.setting.msgSocketSettings);
            _msgConsumer.clientDisconnected += MsgClientDisconnected;
            _areaConsumer = new NecQueueConsumer(ServerType.Area, this.setting, this.setting.areaSocketSettings);
            _areaConsumer.clientDisconnected += AreaClientDisconnected;

            _authServer = new AsyncEventServer(
                this.setting.listenIpAddress,
                this.setting.authPort,
                _authConsumer,
                this.setting.authSocketSettings
                );

            _msgServer = new AsyncEventServer(
                this.setting.listenIpAddress,
                this.setting.msgPort,
                _msgConsumer,
                this.setting.msgSocketSettings
                );

            _areaServer = new AsyncEventServer(
                this.setting.listenIpAddress,
                this.setting.areaPort,
                _areaConsumer,
                this.setting.areaSocketSettings
                );

            LoadChatCommands();
            LoadDatabaseObjects();
            LoadHandler();
        }
Exemple #13
0
        public InstanceGenerator(NecServer server)
        {
            _setting     = server.setting;
            _server      = server;
            _pools       = new List <IInstanceIdPool>();
            _instances   = new Dictionary <uint, IInstance>();
            _dynamicPool = new InstanceIdPool("Dynamic", _setting.poolDynamicIdLowerBound, _setting.poolDynamicIdSize);
            _pools.Add(_dynamicPool);
            _characterPool = new DatabaseInstanceIdPool("Character", _setting.poolCharacterIdLowerBound, _setting.poolCharacterIdSize);
            _pools.Add(_characterPool);
            _npcPool = new DatabaseInstanceIdPool("Npc", _setting.poolNpcLowerBound, _setting.poolNpcIdSize);
            _pools.Add(_npcPool);
            _monsterPool = new DatabaseInstanceIdPool("Monster", _setting.poolMonsterIdLowerBound, _setting.poolMonsterIdSize);
            _pools.Add(_monsterPool);
            _deadBodyPool = new DatabaseInstanceIdPool("DeadBody", _setting.poolDeadBodyIdLowerBound, _setting.poolDeadBodyIdSize);
            _pools.Add(_deadBodyPool);

            foreach (IInstanceIdPool pool in _pools)
            {
                foreach (IInstanceIdPool otherPool in _pools)
                {
                    if (pool == otherPool)
                    {
                        continue;
                    }

                    if (pool.lowerBound <= otherPool.upperBound && otherPool.lowerBound <= pool.upperBound)
                    {
                        _Logger.Error(
                            $"Pool: {pool.name}({pool.lowerBound}-{pool.upperBound}) overlaps with Pool {otherPool.name}({otherPool.lowerBound}-{otherPool.upperBound})");
                    }
                }
            }

            LogStatus();
        }
        public NecServer(NecSetting setting)
        {
            ClientLookup  = new ClientLookup();
            MapLookup     = new MapLookup();
            Setting       = setting;
            Router        = new PacketRouter();
            _authConsumer = new NecQueueConsumer(Setting);
            _authConsumer.SetIdentity("Auth");
            _authConsumer.ClientDisconnected += AuthClientDisconnected;
            _msgConsumer = new NecQueueConsumer(Setting);
            _msgConsumer.SetIdentity("Msg");
            _msgConsumer.ClientDisconnected += MsgClientDisconnected;
            _areaConsumer = new NecQueueConsumer(Setting);
            _areaConsumer.SetIdentity("Area");
            _areaConsumer.ClientDisconnected += AreaClientDisconnected;

            _authServer = new AsyncEventServer(
                Setting.ListenIpAddress,
                Setting.AuthPort,
                _authConsumer
                );

            _msgServer = new AsyncEventServer(
                Setting.ListenIpAddress,
                Setting.MsgPort,
                _msgConsumer
                );

            _areaServer = new AsyncEventServer(
                Setting.ListenIpAddress,
                Setting.AreaPort,
                _areaConsumer
                );

            LoadHandler();
        }
 public PacketFactory(NecSetting setting)
 {
     _setting = setting;
     Reset();
 }
Exemple #16
0
 public RecvBaseSelectWorld(NecSetting necSetting)
     : base((ushort)AuthPacketId.recv_base_select_world_r, ServerType.Auth)
 {
     _necSetting = necSetting;
 }
        public override CommandResultType Handle(ConsoleParameter parameter)
        {
            if (_server == null)
            {
                SettingProvider settingProvider = new SettingProvider();
                NecSetting      setting         = settingProvider.Load <NecSetting>(SETTING_FILE);
                if (setting == null)
                {
                    Logger.Info($"No `{SETTING_FILE}` file found, creating new");
                    setting = new NecSetting();
                    settingProvider.Save(setting, SETTING_FILE);
                }
                else
                {
                    Logger.Info($"Loaded Setting from: {settingProvider.GetSettingsPath(SETTING_FILE)}");
                }

                SettingProvider secretsProvider = new SettingProvider(setting.secretsFolder);
                NecSecret       secret          = secretsProvider.Load <NecSecret>(SECRET_FILE);
                if (secret == null)
                {
                    Logger.Info($"No `{SECRET_FILE}` file found, creating new");
                    secret = new NecSecret();
                    secretsProvider.Save(secret, SECRET_FILE);
                }
                else
                {
                    Logger.Info($"Loaded Secrets from: {secretsProvider.GetSettingsPath(SECRET_FILE)}");
                }

                setting.discordBotToken           = secret.discordBotToken;
                setting.databaseSettings.password = secret.databasePassword;

                LogProvider.Configure <NecLogger>(setting);
                _server = new NecServer(setting);
            }

            if (parameter.arguments.Contains("start"))
            {
                _server.Start();
                if (_service)
                {
                    while (_server.running)
                    {
                        Thread.Sleep(TimeSpan.FromMinutes(5));
                    }

                    return(CommandResultType.Exit);
                }

                return(CommandResultType.Completed);
            }

            if (parameter.arguments.Contains("stop"))
            {
                _server.Stop();
                return(CommandResultType.Completed);
            }

            return(CommandResultType.Continue);
        }
Exemple #18
0
 public PacketFactory(NecSetting setting)
 {
     _logger  = LogProvider.Logger <NecLogger>(this);
     _setting = setting;
     Reset();
 }