예제 #1
0
파일: Database.cs 프로젝트: i-e-b/StreamDb
 private Database(Stream fs)
 {
     _fs = fs ?? throw new ArgumentNullException(nameof(fs));
     // ####### HERE #########
     // Is where we pick the underlying engine.
     _pages = new PageStorageBackend(_fs);
 }
예제 #2
0
        public ChatContext(string serverId, IConfig config, IDatabaseBackend databaseBackend, IDataProvider dataProvider)
        {
            if (config == null)
            {
                throw new ArgumentNullException(nameof(config));
            }

            DatabaseWrapper db       = new DatabaseWrapper(databaseBackend ?? throw new ArgumentNullException(nameof(databaseBackend)));
            IMessageStorage msgStore = db.IsNullBackend
                ? new MemoryMessageStorage()
                : new ADOMessageStorage(db);

            DataProvider = dataProvider ?? throw new ArgumentNullException(nameof(dataProvider));
            Sessions     = new SessionManager(this, serverId, config.ScopeTo(@"sessions"));
            Messages     = new MessageManager(this, msgStore, config.ScopeTo(@"messages"));
            Users        = new UserManager(this);
            Channels     = new ChannelManager(this, config, Bot);
            ChannelUsers = new ChannelUserRelations(this, Channels, Users, Sessions, Messages);
            RateLimiter  = new RateLimiter(config.ScopeTo(@"flood"));

            Channels.UpdateChannels();

            // Should probably not rely on Timers in the future
            BumpTimer = new Timer(e => {
                Logger.Write(@"Bumping last online times...");
                IEnumerable <IUser> users             = null;
                Sessions.GetActiveSessions(s => users = s.Select(s => s.User));
                DataProvider.UserBumpClient.SubmitBumpUsers(Sessions, users);
            }, null, TimeSpan.Zero, TimeSpan.FromMinutes(1));
        }
예제 #3
0
 public static bool ValidName(string map)
 {
     foreach (char c in map)
     {
         if (!IDatabaseBackend.ValidNameChar(c))
         {
             return(false);
         }
     }
     return(true);
 }
예제 #4
0
        public Context(IConfig config, IDatabaseBackend databaseBackend, IDataProvider dataProvider)
        {
            if (config == null)
            {
                throw new ArgumentNullException(nameof(config));
            }

            ServerId = RNG.NextString(ID_LENGTH); // maybe read this from the cfg instead
            Created  = DateTimeOffset.Now;        // read this from config definitely

            DatabaseWrapper db       = new DatabaseWrapper(databaseBackend ?? throw new ArgumentNullException(nameof(databaseBackend)));
            IMessageStorage msgStore = db.IsNullBackend
                ? new MemoryMessageStorage()
                : new ADOMessageStorage(db);

            DataProvider = dataProvider ?? throw new ArgumentNullException(nameof(dataProvider));
            Sessions     = new SessionManager(this, Users, config.ScopeTo(@"sessions"), ServerId);
            Messages     = new MessageManager(this, msgStore, config.ScopeTo(@"messages"));
            Users        = new UserManager(this);
            Channels     = new ChannelManager(this, config, Bot);
            ChannelUsers = new ChannelUserRelations(this, Channels, Users, Sessions, Messages);
            RateLimiter  = new RateLimiter(config.ScopeTo(@"flood"));

            WelcomeMessage = new WelcomeMessage(config.ScopeTo(@"welcome"));

            AddEventHandler(Sessions);
            AddEventHandler(Users);
            AddEventHandler(Channels);
            AddEventHandler(ChannelUsers);
            AddEventHandler(Messages);

            Channels.UpdateChannels();

            // Should probably not rely on Timers in the future
            BumpTimer = new Timer(e => {
                Logger.Write(@"Nuking dead sessions and bumping online times...");
                Sessions.CheckTimeOut();
                IEnumerable <IUser> users             = null;
                Sessions.GetActiveSessions(s => users = s.Select(s => s.User));
                DataProvider.UserBumpClient.SubmitBumpUsers(Sessions, users);
            }, null, TimeSpan.Zero, TimeSpan.FromMinutes(1));
        }
예제 #5
0
 public DatabaseWrapper(IDatabaseBackend backend)
 {
     Backend = backend ?? throw new ArgumentNullException(nameof(backend));
 }