public void AddSaveRequest(SaveLoadMessage msg)
 {
     lock (_saveRequests)
     {
         _saveRequests.Clear();
         _saveRequests.Add(msg);
     }
 }
        public void EraseFile(int fileNumber)
        {
            var msg = new SaveLoadMessage();

            msg.Data       = DataHelper.GetSaveDataCopyForFileNumber(fileNumber);
            msg.FileNumber = fileNumber;
            msg.Erase      = true;

            DataHelper.EraseDataForFile(fileNumber);

            _backgroundThread.AddSaveRequest(msg);
            _backgroundThread.AddPreferenceRequest(DataHelper.PreferenceData.Copy());
        }
        private void SaveGame(MenuPageEventArgs e)
        {
            var args = e as SaveGameEventArgs;

            if (args == null)
            {
                return;
            }

            _waitForSave = true;

            var msg = new SaveLoadMessage();

            msg.FileNumber = args.FileNumber;
            msg.Data       = DataHelper.GetSaveDataCopyForFileNumber(args.FileNumber);

            _resourceManager.RequestSave(msg);
        }
        private void ExecuteSaveRequest(SaveLoadMessage msg)
        {
            if (msg == null)
            {
                return;
            }

            SaveInitiated();

            if (msg.Erase)
            {
                _saveLoadHandler.EraseFile(msg.FileNumber);
            }
            else
            {
                _saveLoadHandler.RequestSave(msg.FileNumber, msg.Data);
            }

            if (_saveRequests.Count == 0)
            {
                SaveCompleted();
            }
        }
        public void Loop()
        {
            while (_continueLooping)
            {
                // region load/unload requests
                var regionsToLoad   = new List <RegionNames>();
                var regionsToUnload = new List <RegionNames>();

                lock (_loadUnloadLock)
                {
                    if (_loadRequests.Count > 0 || _unloadRequests.Count > 0)
                    {
                        regionsToLoad.AddRange(_loadRequests);
                        _loadRequests.Clear();

                        regionsToUnload.AddRange(_unloadRequests);
                        _unloadRequests.Clear();
                    }
                }

                ExecuteLoadUnloadRequest(regionsToLoad, regionsToUnload);

                // save requests
                SaveLoadMessage msg = null;

                lock (_saveRequests)
                {
                    if (_saveRequests.Count > 0)
                    {
                        msg = _saveRequests[0];
                        _saveRequests.Clear();
                    }
                }

                ExecuteSaveRequest(msg);

                // pref data requests
                PreferenceData data = null;

                lock (_preferenceRequests)
                {
                    if (_preferenceRequests.Count > 0)
                    {
                        data = _preferenceRequests[0];
                        _preferenceRequests.Clear();
                    }
                }

                ExecutePreferenceRequest(data);

                // file load requests
                int fileLoadRequest;

                lock (_fileLoadLock)
                {
                    fileLoadRequest = _fileLoadRequest;
                }

                if (fileLoadRequest != -1)
                {
                    ExecuteFileLoadRequest(_fileLoadRequest);
                }
            }
        }
 public void RequestSave(SaveLoadMessage msg)
 {
     _backgroundThread.AddSaveRequest(msg);
 }