Esempio n. 1
0
        private static async Task startTimedPersistAsync(SContext serverContext, SAppState state)
        {
            while (true)
            {
                if (state.persistAvailable)
                {
                    await Task.Delay(serverContext.configuration.persistenceInterval);

                    state.persist(false);
                }
            }
        }
Esempio n. 2
0
        public static void loadState(SContext serverContext, string stateStorageFile)
        {
            if (!serializationMappersRegistered)
            {
                // Register any needed mappers here
                serializationMappersRegistered = true;
            }

            // Load the Server State into the context. This object also includes the OsmiumMine Core state
            var database     = new LiteDatabase(stateStorageFile);
            var stateStorage = database.GetCollection <SAppState>(state_storage_key);
            var savedState   = stateStorage.FindAll().FirstOrDefault();

            if (savedState == null)
            {
                // Create and save new state
                savedState = new SAppState();
                stateStorage.Upsert(savedState);
            }

            // Update context
            savedState.persistenceMedium = stateStorage;
            savedState.persist           = forcePersist => {
                // If needed...
                if (forcePersist || savedState.persistNeeded)
                {
                    savedState.persistAvailable = false;
                    // Update in database
                    stateStorage.Upsert(savedState);
                    // And unset needed flag
                    savedState.persistNeeded    = false;
                    savedState.persistAvailable = true;
                }
            };
            // Save the state
            savedState.persist(true);
            // Update references
            serverContext.appState = savedState;
            var timedPersistTask = startTimedPersistAsync(serverContext, savedState);
        }