Esempio n. 1
0
 /// <summary>
 /// Callback when new RemoteConfig data is successfully uploaded. Update the UI to match
 /// the new server state.
 /// </summary>
 /// <param name="sender">Event source.</param>
 /// <param name="data">Newly synced data.</param>
 private void RemoteConfigDataUpdatedCallback(object sender, RemoteConfigData data)
 {
     ready = true;
     retrievingRemoteConfigData = false;
     RemoteConfigData           = data;
     UpdateUI();
 }
Esempio n. 2
0
        /// <summary>
        /// Register callbacks and make first call to RemoteConfigDataManager, and initialize the UI.
        /// </summary>
        public void OnEnable()
        {
            Instance     = this;
            titleContent = new GUIContent("Remote Config Sync");

            // Initialize UI state if necessary.
            if (rootVisualElement.childCount == 0)
            {
                InitializeUI();
            }
            retrievingRemoteConfigData = false;

            SyncDataManager.DataRetrieved += RemoteConfigDataUpdatedCallback;
            SyncDataManager.DataUploaded  += RemoteConfigDataUpdatedCallback;
            SyncDataManager.RetrieveError += RemoteConfigErrorCallback;
            if (File.Exists(SyncDataManager.LocalFilePath))
            {
                var localContent = File.ReadAllText(SyncDataManager.LocalFilePath);
                RemoteConfigData            = RemoteConfigData.Deserialize(localContent);
                SyncDataManager.CurrentData = RemoteConfigData;
                ready = true;
                UpdateUI();
            }
            else if (!EditorApplication.isPlayingOrWillChangePlaymode)
            {
                GetRemoteConfigData();
            }
        }
Esempio n. 3
0
        /// <summary>
        /// Upload new RemoteConfigData via REST API.
        /// </summary>
        /// <param name="newData">New data to upload to Remote Config.</param>
        private static void UpdateRemoteConfig(RemoteConfigData newData)
        {
            var newRemoteConfigData = JsonConvert.SerializeObject(newData);
            var webRequest          = UnityWebRequest.Put(remoteConfigUrl, newRemoteConfigData);

            webRequest.SetRequestHeader("Authorization", "Bearer " + accessToken);
            webRequest.SetRequestHeader("Content-Type", "application/json; UTF8");
            webRequest.SetRequestHeader("If-Match", "*");

            string data = "";

            webRequest.SendWebRequest().completed += op => {
                data = webRequest.downloadHandler.text;
                if (webRequest.isHttpError)
                {
                    var exception = new Exception(
                        $"Error uploading RemoteConfig: {webRequest.error}\nData: {data}");
                    RetrieveError.Invoke(null, new ErrorArgs(exception));
                    return;
                }

                SetCurrentData(data);
                DataUploaded(CurrentData, CurrentData);
            };
        }
Esempio n. 4
0
        /// <summary>
        /// Deserialize the JSON RemoteConfigData into the CurrentData field.
        /// </summary>
        /// <param name="json">String data to deserialize.</param>
        private static void SetCurrentData(string json)
        {
            // Save to local docs file so it doesn't have to be retrieved on every compile time.
            if (!File.Exists(LocalFilePath))
            {
                File.Create(LocalFilePath).Close();
            }
            File.WriteAllText(LocalFilePath, json);

            CurrentData = RemoteConfigData.Deserialize(json);
        }
Esempio n. 5
0
 /// <summary>
 /// Uploads new data to Remote Config on server via REST API.
 /// </summary>
 /// <param name="newData">Data to upload to Remote Config.</param>
 public static void UpdateRemoteConfigAsync(RemoteConfigData newData)
 {
     if (string.IsNullOrWhiteSpace(accessToken))
     {
         GetAccessToken(() => UpdateRemoteConfig(newData));
     }
     else
     {
         UpdateRemoteConfig(newData);
     }
 }
Esempio n. 6
0
        protected virtual void DownloadTitleData_Completed(GetTitleDataResult result)
        {
            Debug.Log("MetaLoopGameManager Downloading TitleData Completed...");
            if (result != null)
            {
                if (!ReadTitleData(result, false))
                {
                    return;
                }
            }
            else
            {
                ShowUnavailableMessage(GameUnavailableMessageType.HOST_UNREACHABLE);
                return;
            }

            AssetManifest assetManifest;

            if (result.Data.ContainsKey(MetaStateSettings._TitleDataKey_CdnManifest))
            {
                assetManifest = JsonConvert.DeserializeObject <AssetManifest>(result.Data[MetaStateSettings._TitleDataKey_CdnManifest]);
                RemoteAssetsManager.Init(assetManifest);
            }


            if (result.Data.ContainsKey(MetaStateSettings._TitleDataKey_RemoteConfig))
            {
                RemoteConfigData.Load(result.Data[MetaStateSettings._TitleDataKey_RemoteConfig]);
            }
            else
            {
                RemoteConfigData.Load(null);
            }


            EventManagerState eventManagerState;

            if (result.Data.ContainsKey(MetaStateSettings._TitleDataKey_EventManager))
            {
                eventManagerState = JsonConvert.DeserializeObject <EventManagerState>(result.Data[MetaStateSettings._TitleDataKey_EventManager]);
            }
            else
            {
                eventManagerState = new EventManagerState();
            }

            Debug.Log("MetaLoopGameManager Downloading User Data...");

            DownloadUserData();
        }
Esempio n. 7
0
        public static void ChangeServerStatus(bool available, string secondsToWait, string versionId = null)
        {
            int waitingTime   = Convert.ToInt32(secondsToWait);
            var currentStatus = PlayFab.PlayFabServerAPI.GetTitleDataAsync(new PlayFab.ServerModels.GetTitleDataRequest()
            {
                Keys = new List <string>()
                {
                    MetaStateSettings._TitleDataKey_ServerInfo, MetaStateSettings._TitleDataKey_RemoteConfig
                }
            }).GetAwaiter().GetResult();
            ServerInfo       serverInfo         = null;
            RemoteConfigData configData         = null;
            bool             updateRemoteConfig = false;

            if (currentStatus.Result.Data.ContainsKey(MetaStateSettings._TitleDataKey_ServerInfo))
            {
                serverInfo = JsonConvert.DeserializeObject <ServerInfo>(currentStatus.Result.Data[MetaStateSettings._TitleDataKey_ServerInfo]);
            }
            else
            {
                serverInfo = new ServerInfo();
                Console.WriteLine("COULD NOT READ ServerInfo, CREATING NEW ONE...");
            }


            if (currentStatus.Result.Data.ContainsKey(MetaStateSettings._TitleDataKey_RemoteConfig))
            {
                configData = JsonConvert.DeserializeObject <RemoteConfigData>(currentStatus.Result.Data[MetaStateSettings._TitleDataKey_RemoteConfig]);
            }
            else
            {
                configData = new RemoteConfigData();
                configData.Values.Add("Foo", "Value");
                Console.WriteLine("COULD NOT READ RemoteConfigData, CREATING NEW ONE...");
                updateRemoteConfig = true;
            }



            serverInfo.ServerStatus       = (available || waitingTime == 0) ? ServerStatus.Online : ServerStatus.Offline;
            serverInfo.MaintenanceMessage = (available || waitingTime == 0) ? string.Empty : GameUnavailableMessageType.MAINTENANCE.ToString();
            serverInfo.CacheVersion++;

            if (!string.IsNullOrEmpty(versionId))
            {
                serverInfo.AppVersion = versionId;
            }


            if (available)
            {
                Console.WriteLine("Waking up Azure....");

                WakeUpAzureRequests(10);

                WaitFor(Convert.ToInt32(secondsToWait));

                Console.WriteLine("Setting server Online...");

                var updateData = PlayFabServerAPI.SetTitleDataAsync(new PlayFab.ServerModels.SetTitleDataRequest()
                {
                    Key = MetaStateSettings._TitleDataKey_ServerInfo, Value = serverInfo.ToJson()
                }).GetAwaiter().GetResult();
                if (updateData.Error == null)
                {
                    Console.WriteLine("SUCCESS");
                }
            }
            else
            {
                if (updateRemoteConfig)
                {
                    var updateDataForRemoteConfig = PlayFabServerAPI.SetTitleDataAsync(new PlayFab.ServerModels.SetTitleDataRequest()
                    {
                        Key = MetaStateSettings._TitleDataKey_RemoteConfig, Value = configData.ToJson()
                    }).GetAwaiter().GetResult();
                    if (updateDataForRemoteConfig.Error == null)
                    {
                        Console.WriteLine("RemoteConfig Created.");
                    }
                }

                Console.WriteLine("Shutting Down Servers...");
                var updateData = PlayFabServerAPI.SetTitleDataAsync(new PlayFab.ServerModels.SetTitleDataRequest()
                {
                    Key = MetaStateSettings._TitleDataKey_ServerInfo, Value = serverInfo.ToJson()
                }).GetAwaiter().GetResult();
                if (updateData.Error == null)
                {
                    Console.WriteLine("SUCCESS");
                    WaitFor(Convert.ToInt32(secondsToWait));
                }
            }
        }