예제 #1
0
    IEnumerator save_thread(GameObject aDestroy)
    {
        while (!Storage.StorageManager.AmFullyInitialized() || !MicrosoftZig.Inst.mAll.IsSomeoneSignedIn)
        {
            yield return(null);
        }

        ConnectedStorage.CreateAsync(MicrosoftZig.Inst.mAll.ActiveUser.Id, "main_save",
                                     delegate(ConnectedStorage storage, CreateConnectedStorageOp op) {
            if (op.Success)
            {
                StorageCreated = true;
                IsStorageFail  = false;
                mStorage       = storage;
                ManagerManager.Log("storage created success");
            }
            else
            {
                IsStorageFail = true;
                ManagerManager.Log("storage create failed");
            }
        }
                                     );

        GameObject.Destroy(aDestroy);
    }
예제 #2
0
 public void CloseStorage()
 {
     if (IsWriting)
     {
         ManagerManager.Log("WARNING: trying to close storage while write is still in progress");
     }
     IsWriting      = false;
     mStorage       = null;
     StorageCreated = false;
 }
예제 #3
0
 protected override void update_connected_storage()
 {
     base.update_connected_storage();
     if (ConnectedStorage.Count == 0)
     {
         Storage = null;
     }
     else if (Storage == null || !ConnectedStorage.Contains(Storage))
     {
         Storage = ConnectedStorage[0];
         Setup();
     }
     this.EnableModule(Storage != null);
 }
예제 #4
0
        private static async Task <int> OnDownload(Options options)
        {
            ulong  xuid    = options.XboxUserId;
            Guid   scid    = options.ServiceConfigurationId;
            string sandbox = options.Sandbox;

            List <TitleBlobInfo> savedGameInfos = await ConnectedStorage.ListSavedGamesAsync(xuid, scid.ToString(), sandbox, string.Empty, 0, 0);

            if (savedGameInfos.Count == 0)
            {
                Console.WriteLine("No saves found.");
                return(0);
            }

            Directory.CreateDirectory(Path.GetDirectoryName(options.OutputFile));
            XmlWriterSettings xmlWriterSettings = new XmlWriterSettings()
            {
                Indent = true
            };

            using (XmlWriter xbStorageXmlWriter = XmlWriter.Create(options.OutputFile, xmlWriterSettings))
            {
                xbStorageXmlWriter.WriteStartDocument();
                xbStorageXmlWriter.WriteStartElement("XbConnectedStorageSpace");
                xbStorageXmlWriter.WriteStartElement("ContextDescription");
                xbStorageXmlWriter.WriteStartElement("Account");
                xbStorageXmlWriter.WriteAttributeString("msa", "*****@*****.**");
                xbStorageXmlWriter.WriteEndElement(); // Account
                xbStorageXmlWriter.WriteStartElement("Title");
                xbStorageXmlWriter.WriteAttributeString("scid", scid.ToString());
                xbStorageXmlWriter.WriteEndElement(); // Title
                xbStorageXmlWriter.WriteEndElement(); // ContextDescription
                xbStorageXmlWriter.WriteStartElement("Data");
                xbStorageXmlWriter.WriteStartElement("Containers");

                foreach (TitleBlobInfo savedGameInfo in savedGameInfos)
                {
                    string savedGameName = savedGameInfo.FileName.Substring(0, savedGameInfo.FileName.IndexOf(','));

                    xbStorageXmlWriter.WriteStartElement("Container");
                    xbStorageXmlWriter.WriteAttributeString("name", savedGameName);
                    xbStorageXmlWriter.WriteStartElement("Blobs");

                    SavedGameV2Response savedGame = await ConnectedStorage.DownloadSavedGameAsync(xuid, scid, sandbox, savedGameName);

                    foreach (ExtendedAtomInfo atomInfo in savedGame.Atoms)
                    {
                        xbStorageXmlWriter.WriteStartElement("Blob");
                        xbStorageXmlWriter.WriteAttributeString("name", atomInfo.Name);

                        byte[] atomContent = await ConnectedStorage.DownloadAtomAsync(xuid, scid, sandbox, atomInfo.Atom);

                        xbStorageXmlWriter.WriteCData(Convert.ToBase64String(atomContent));
                        xbStorageXmlWriter.WriteEndElement(); // Blob
                    }

                    xbStorageXmlWriter.WriteEndElement(); // Blobs
                }

                xbStorageXmlWriter.WriteEndElement(); // Containers
                xbStorageXmlWriter.WriteEndElement(); // Data
                xbStorageXmlWriter.WriteEndElement(); // XbConnectedStorageSpace
            }

            Console.WriteLine($"Operation complete. Downloaded {savedGameInfos.Count} save containers to {options.OutputFile}.");

            return(0);
        }
 public StorageKeyValue(string key, string value, ConnectedStorage storage)
 {
     _key     = key;
     _value   = value;
     _storage = storage;
 }