public void ResolveTest()
        {
            var deferred = new Deferred<string, int>();

            bool alwaysHit = false;
            dynamic alwaysArg = null;

            bool doneHit = false;
            string doneArg = null;

            bool failHit = false;

            var promise = deferred.Promise();
            promise.Always((arg) =>
            {
                alwaysHit = true;
                alwaysArg = arg;
            });
            promise.Done((arg) =>
            {
                doneHit = true;
                doneArg = arg;
            });
            promise.Fail(() => failHit = true);

            deferred.Resolve("test");

            Assert.IsTrue(alwaysHit, "Always is hit");
            Assert.AreEqual("test", alwaysArg);

            Assert.IsTrue(doneHit, "Done is hit");
            Assert.AreEqual("test", doneArg);

            Assert.IsFalse(failHit, "Fail is not hit");
        }
        public void RejectTest()
        {
            var deferred = new Deferred<string, int>();

            bool alwaysHit = false;
            dynamic alwaysArg = null;

            bool doneHit = false;

            bool failHit = false;
            int? failArg = null;

            var promise = deferred.Promise();
            promise.Always((arg) =>
            {
                alwaysHit = true;
                alwaysArg = arg;
            });
            promise.Done(() => doneHit = true);
            promise.Fail((arg) =>
            {
                failHit = true;
                failArg = arg;
            });

            deferred.Reject(1337);

            Assert.IsTrue(alwaysHit, "Always is hit");
            Assert.AreEqual(alwaysArg, 1337);

            Assert.IsFalse(doneHit, "Done is not hit");

            Assert.IsTrue(failHit, "Fail is hit");
            Assert.AreEqual(failArg, 1337);
        }
Exemple #3
0
        private static Promise InternalUpdateAchievementToServer(bool showDialog)
        {
            Deferred deferred = new Deferred();
            //BacktoryCloudUrl.Url = "http://localhost:8086";
            UpdateAchievementsRequest request            = new UpdateAchievementsRequest();
            List <ServerAchievement>  serverAchievements = new List <ServerAchievement>();

            foreach (
                AchievementInfo achievementInfo in
                InfoResolver.Resolve <FortInfo>().Achievement.AchievementInfos.Where(info => info != null))
            {
                NoneLevelBaseAchievementInfo noneLevelBaseAchievementInfo = achievementInfo as NoneLevelBaseAchievementInfo;
                if (noneLevelBaseAchievementInfo != null)
                {
                    serverAchievements.Add(new ServerAchievement
                    {
                        Name          = noneLevelBaseAchievementInfo.Name,
                        AchievementId = noneLevelBaseAchievementInfo.Id,
                        Score         = noneLevelBaseAchievementInfo.Score,
                        Values        = noneLevelBaseAchievementInfo.Balance.Values
                    });
                }
                else
                {
                    LevelBaseAchievementInfo levelBaseAchievementInfo = (LevelBaseAchievementInfo)achievementInfo;
                    AchievementLevelInfo[]   achievementLevelInfos    = levelBaseAchievementInfo.GetAchievementLevelInfos();
                    for (int i = 0; i < achievementLevelInfos.Length; i++)
                    {
                        serverAchievements.Add(new ServerAchievement
                        {
                            Name          = achievementLevelInfos[i].Name,
                            AchievementId = achievementLevelInfos[i].Id,
                            Score         = achievementLevelInfos[i].Score,
                            Values        = achievementLevelInfos[i].Balance.Values
                        });
                    }
                }
            }
            request.Items = serverAchievements.ToArray();
            EditorUtility.DisplayProgressBar("Syncronizing Achievements", "Syncronizing Achievements", 0);
            InfoResolver.Resolve <FortInfo>()
            .ServerConnectionProvider.EditorConnection.Call <object>("UpdateAchievements", request)
            .Then(
                o =>
            {
                EditorUtility.ClearProgressBar();
                if (showDialog)
                {
                    EditorUtility.DisplayDialog("Syncronizing Achievements", "Achievemet syncronization succeeded", "Ok");
                }
                deferred.Resolve();
            }, error =>
            {
                EditorUtility.ClearProgressBar();
                deferred.Reject();
                throw new Exception("Achievemet syncronization failed");
            });
            return(deferred.Promise());
        }
        public Promise <string, MarketPurchaseError> PurchasePackage(string sku, string payload)
        {
            _deferred = new Deferred <string, MarketPurchaseError>();
            if (Application.platform == RuntimePlatform.OSXEditor ||
                Application.platform == RuntimePlatform.WindowsEditor)
            {
                _deferred.Resolve("FiB5nxjC8mxzwxLG");
                return(_deferred.Promise());
            }
            var androidJc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
            var jo        = androidJc.GetStatic <AndroidJavaObject>("currentActivity");
            // Accessing the class to call a static method on it
            var jc = new AndroidJavaClass("com.redcap.thugs.PurchaseActivity");

            // Calling a Call method to which the current activity is passed
            jc.CallStatic("RunActivity", jo, sku, payload, ((BazaarMarketInfo)FortInfo.Instance.MarketInfos.First(info => info.MarketName == "Bazaar")).Key);
            return(_deferred.Promise());
        }
Exemple #5
0
        public Promise Relogin()
        {
            IDispatcher dispatcher = GameDispatcher.Dispatcher;
            Deferred    deferred   = new Deferred();

            if (!IsReloginCapable())
            {
                throw new Exception("Relogin is not capable.No saved refresh token found");
            }
            string authenticationId        = InfoResolver.Resolve <BacktoryInfo>().AuthenticationId;
            string authenticationClientKey = InfoResolver.Resolve <BacktoryInfo>().AuthenticationClientKey;
            string url = "https://api.backtory.com/auth/login";

            ThreadPool.QueueUserWorkItem(state =>
            {
                try
                {
                    BacktoryAccessData backtoryAccessData = ServiceLocator.Resolve <IStorageService>().ResolveData <BacktoryAccessData>();
                    string result = MultiPartCall(url, new Dictionary <string, string>
                    {
                        { "refresh_token", backtoryAccessData.RefreshToken },
                    }, new Dictionary <string, string>
                    {
                        { "X-Backtory-Authentication-Id", authenticationId },
                        { "X-Backtory-Authentication-Key", authenticationClientKey },
                        { "X-Backtory-Authentication-Refresh", "1" }
                    });
                    LoginResponse loginResponse = JsonConvert.DeserializeObject <LoginResponse>(result);
                    dispatcher.Dispach(() =>
                    {
                        if (string.IsNullOrEmpty(loginResponse.AccessToken))
                        {
                            deferred.Reject();
                        }
                        else
                        {
                            backtoryAccessData              = ServiceLocator.Resolve <IStorageService>().ResolveData <BacktoryAccessData>();
                            backtoryAccessData.AccessToken  = loginResponse.AccessToken;
                            backtoryAccessData.RefreshToken = loginResponse.RefreshToken;
                            backtoryAccessData.TokenType    = loginResponse.TokenType;
                            ServiceLocator.Resolve <IStorageService>().UpdateData(backtoryAccessData);
                            deferred.Resolve();
                        }
                    });
                }
                catch (Exception)
                {
                    dispatcher.Dispach(() =>
                    {
                        deferred.Reject();
                    });
                }
            });
            return(deferred.Promise());
        }
Exemple #6
0
    private Promise <string> QueryForTranslation(string data, string from, string to)
    {
        Deferred <string> deferred = new Deferred <string>();

        // register callback support (required for WebClient)
        if (ServicePointManager.ServerCertificateValidationCallback == null)
        {
            AddCertificateChainValidation();
        }

        // get an access token
        using (WebClient client = new WebClient())
        {
            //client.Headers.Add("Authorization", "Bearer " + accessToken);
            client.DownloadDataCompleted += (object sender, DownloadDataCompletedEventArgs e) =>
            {
                try
                {
                    if (e.Cancelled)
                    {
                        _status = StatusOptions.failed;
                        deferred.Reject("web call was cancelled.");
                    }
                    else if (e.Error != null)
                    {
                        _status = StatusOptions.failed;
                        deferred.Reject(e.Error.Message);
                    }
                    else
                    {
                        string        response_string = System.Text.Encoding.Default.GetString(e.Result);
                        string        encapsulated    = "<xml>" + response_string + "</xml>";
                        XmlSerializer serializer      = new XmlSerializer(typeof(TranslationResponse));
                        using (TextReader reader = new StringReader(encapsulated))
                        {
                            TranslationResponse result = (TranslationResponse)serializer.Deserialize(reader);
                            deferred.Resolve(result.text);
                        }
                    }
                }
                catch (Exception ex)
                {
                    _status = StatusOptions.failed;
                    deferred.Reject(ex.Message);
                }
                Reset();
            };
            string parameters = "appid=Bearer " + Uri.EscapeUriString(accessToken) + "&text=" + Uri.EscapeUriString(data) + "&from=" + Uri.EscapeUriString(from) + "&to=" + Uri.EscapeUriString(to);
            client.DownloadDataAsync(new System.Uri("https://api.microsofttranslator.com/v2/http.svc/Translate?" + parameters));
        }

        return(deferred.Promise());
    }
Exemple #7
0
        public Promise Login(string username, string password)
        {
            IDispatcher dispatcher = GameDispatcher.Dispatcher;
            Deferred    deferred   = new Deferred();

            string authenticationId        = InfoResolver.Resolve <BacktoryInfo>().AuthenticationId;
            string authenticationClientKey = InfoResolver.Resolve <BacktoryInfo>().AuthenticationClientKey;
            string url = "https://api.backtory.com/auth/login";

            ThreadPool.QueueUserWorkItem(state =>
            {
                try
                {
                    string result = MultiPartCall(url, new Dictionary <string, string>
                    {
                        { "username", username },
                        { "password", password }
                    }, new Dictionary <string, string>
                    {
                        { "X-Backtory-Authentication-Id", authenticationId },
                        { "X-Backtory-Authentication-Key", authenticationClientKey }
                    });
                    LoginResponse loginResponse = JsonConvert.DeserializeObject <LoginResponse>(result);
                    dispatcher.Dispach(() =>
                    {
                        if (string.IsNullOrEmpty(loginResponse.AccessToken))
                        {
                            deferred.Reject();
                        }
                        else
                        {
                            BacktoryAccessData backtoryAccessData = ServiceLocator.Resolve <IStorageService>().ResolveData <BacktoryAccessData>() ?? new BacktoryAccessData();
                            backtoryAccessData.AccessToken        = loginResponse.AccessToken;
                            backtoryAccessData.RefreshToken       = loginResponse.RefreshToken;
                            backtoryAccessData.TokenType          = loginResponse.TokenType;
                            ServiceLocator.Resolve <IStorageService>().UpdateData(backtoryAccessData);
                            deferred.Resolve();
                        }
                    });
                }
                catch (Exception)
                {
                    dispatcher.Dispach(() =>
                    {
                        deferred.Reject();
                    });
                }
            });
            return(deferred.Promise());
        }
Exemple #8
0
    private Promise <string> QueryForAccessToken()
    {
        Deferred <string> deferred = new Deferred <string>();

        // register callback support (required for WebClient)
        if (ServicePointManager.ServerCertificateValidationCallback == null)
        {
            AddCertificateChainValidation();
        }

        // get an access token
        using (WebClient client = new WebClient())
        {
            client.Headers.Add("Ocp-Apim-Subscription-Key", TranslationKey);
            client.UploadDataCompleted += (object sender, UploadDataCompletedEventArgs e) =>
            {
                try
                {
                    if (e.Cancelled)
                    {
                        _status = StatusOptions.failed;
                        deferred.Reject("web call was cancelled.");
                    }
                    else if (e.Error != null)
                    {
                        _status = StatusOptions.failed;
                        deferred.Reject(e.Error.Message);
                    }
                    else
                    {
                        accessToken = System.Text.Encoding.Default.GetString(e.Result);
                        lastToken   = DateTime.Now;
                        deferred.Resolve();
                    }
                }
                catch (Exception ex)
                {
                    _status = StatusOptions.failed;
                    deferred.Reject(ex.Message);
                }
                Reset();
            };
            byte[] buffer = { 0 };
            client.UploadDataAsync(new System.Uri("https://api.cognitive.microsoft.com/sts/v1.0/issueToken"), buffer);
        }

        return(deferred.Promise());
    }
        public void ResolveFinishedTest()
        {
            var deferred = new Deferred();

            deferred.Resolve();
            var promise = deferred.Promise();

            bool alwaysHit = false;
            bool doneHit   = false;
            bool failHit   = false;

            promise.Always(() => alwaysHit = true);
            promise.Done(() => doneHit     = true);
            promise.Fail(() => failHit     = true);

            Assert.IsTrue(alwaysHit, "Always is hit");
            Assert.IsTrue(doneHit, "Done is hit");
            Assert.IsFalse(failHit, "Fail is not hit");
        }
        public void RejectTest()
        {
            var deferred = new Deferred <string, int>();

            bool    alwaysHit = false;
            dynamic alwaysArg = null;

            bool doneHit = false;

            bool failHit = false;
            int? failArg = null;

            var promise = deferred.Promise();

            promise.Always((arg) =>
            {
                alwaysHit = true;
                alwaysArg = arg;
            });
            promise.Done(() => doneHit = true);
            promise.Fail((arg) =>
            {
                failHit = true;
                failArg = arg;
            });

            deferred.Reject(1337);

            Assert.IsTrue(alwaysHit, "Always is hit");
            Assert.AreEqual(alwaysArg, 1337);

            Assert.IsFalse(doneHit, "Done is not hit");

            Assert.IsTrue(failHit, "Fail is hit");
            Assert.AreEqual(failArg, 1337);
        }
        public void ResolveTest()
        {
            var deferred = new Deferred <string, int>();

            bool    alwaysHit = false;
            dynamic alwaysArg = null;

            bool   doneHit = false;
            string doneArg = null;

            bool failHit = false;

            var promise = deferred.Promise();

            promise.Always((arg) =>
            {
                alwaysHit = true;
                alwaysArg = arg;
            });
            promise.Done((arg) =>
            {
                doneHit = true;
                doneArg = arg;
            });
            promise.Fail(() => failHit = true);

            deferred.Resolve("test");

            Assert.IsTrue(alwaysHit, "Always is hit");
            Assert.AreEqual("test", alwaysArg);

            Assert.IsTrue(doneHit, "Done is hit");
            Assert.AreEqual("test", doneArg);

            Assert.IsFalse(failHit, "Fail is not hit");
        }
Exemple #12
0
        public Promise <T, ICallError> Call <T>(string methodName, object requestBody)
        {
            IDispatcher dispatcher            = GameDispatcher.Dispatcher;
            Deferred <T, ICallError> deferred = new Deferred <T, ICallError>();
            string url = string.Format("https://api.backtory.com/cloud-code/{0}/{1}", InfoResolver.Resolve <BacktoryInfo>().CloudId, methodName);

            if (!string.IsNullOrEmpty(BacktoryCloudUrl.Url))
            {
                url = new Uri(new Uri(BacktoryCloudUrl.Url), new Uri(string.Format("/{0}", methodName))).ToString();
            }
            string authorization = string.Empty;

            if (ServiceLocator.Resolve <IStorageService>().ContainsData <BacktoryAccessData>())
            {
                BacktoryAccessData backtoryAccessData =
                    ServiceLocator.Resolve <IStorageService>().ResolveData <BacktoryAccessData>();
                authorization = string.Format("{0} {1}", backtoryAccessData.TokenType, backtoryAccessData.AccessToken);
            }
            string body = JsonConvert.SerializeObject(requestBody);

            if (body == "null")
            {
                body = "{}";
            }
            ThreadPool.QueueUserWorkItem(state =>
            {
                try
                {
                    HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(new Uri(url));
                    webRequest.KeepAlive      = true;
                    webRequest.Method         = "POST";
                    webRequest.ContentType    = "application/json; charset=utf-8";
                    if (!string.IsNullOrEmpty(authorization))
                    {
                        webRequest.Headers.Add("Authorization", authorization);
                    }


                    byte[] resoponse         = Encoding.UTF8.GetBytes(body);
                    webRequest.ContentLength = resoponse.Length;
                    using (System.IO.Stream requestStream = webRequest.GetRequestStream())
                    {
                        requestStream.Write(resoponse, 0, resoponse.Length);
                    }
                    using (WebResponse webResponse = webRequest.GetResponse())
                    {
                        using (System.IO.Stream responseStream = webResponse.GetResponseStream())
                        {
                            using (StreamReader reader = new StreamReader(responseStream))
                            {
                                string readToEnd = reader.ReadToEnd();
                                dispatcher.Dispach(() =>
                                {
                                    try
                                    {
                                        T result = JsonConvert.DeserializeObject <T>(readToEnd);
                                        deferred.Resolve(result);
                                    }
                                    catch (Exception)
                                    {
                                        deferred.Reject(new BactkoryCallError(HttpStatusCode.Continue, CallErrorType.MethodConversionFailed));
                                    }
                                });
                            }
                        }
                    }
                    dispatcher.Dispach(() =>
                    {
                        deferred.Resolve(default(T));
                    });
                }
                catch (WebException we)
                {
                    dispatcher.Dispach(() =>
                    {
                        HttpWebResponse httpWebResponse = we.Response as HttpWebResponse;
                        if (httpWebResponse != null)
                        {
                            deferred.Reject(new BactkoryCallError(httpWebResponse.StatusCode, CallErrorType.Other));
                        }
                        deferred.Reject(new BactkoryCallError(HttpStatusCode.Continue, CallErrorType.Other));
                    });
                }
                catch (Exception)
                {
                    deferred.Reject(new BactkoryCallError(HttpStatusCode.Continue, CallErrorType.Other));
                }
            });

            return(deferred.Promise());
        }
        public static Promise SyncAssetBundles()
        {
            //BacktoryCloudUrl.Url = "http://localhost:8086";
            Deferred            deferred            = new Deferred();
            string              outputPath          = Path.Combine(EditorAssetBundleUtility.AssetBundlesOutputPath, EditorAssetBundleUtility.GetPlatformName());
            AssetBundleManifest assetBundleManifest = Build();

            EditorUtility.DisplayProgressBar("Get server asset bundles", "Get server asset bundles", 0);
            InfoResolver.Resolve <FortInfo>()
            .ServerConnectionProvider.EditorConnection.Call <ServerAssetBundle[]>("GetAssetBundles", new { Platform = EditorAssetBundleUtility.GetPlatformName() }).Then(
                serverBundles =>
            {
                List <AssetNameVersion> addedAssets                    = new List <AssetNameVersion>();
                List <ServerAssetBundle> finalAssetBundles             = new List <ServerAssetBundle>(serverBundles);
                Dictionary <string, ServerAssetBundleVersion> finalMap = new Dictionary <string, ServerAssetBundleVersion>();
                EditorUtility.ClearProgressBar();
                foreach (
                    var source in
                    assetBundleManifest.GetAllAssetBundles()
                    .Select(s => new { Name = s, Hash = assetBundleManifest.GetAssetBundleHash(s) })
                    .Where(
                        arg1 =>
                        !serverBundles.Any(
                            bundle =>
                            bundle.Name == arg1.Name &&
                            bundle.Versions.Any(version => version.Hash == arg1.Hash.ToString())))
                    )
                {
                    AssetNameVersion assetNameVersion = new AssetNameVersion
                    {
                        Name    = source.Name,
                        Version = new ServerAssetBundleVersion
                        {
                            Hash = source.Hash.ToString(),
                            Path = ResolveAssetBundlePath(source.Name, source.Hash.ToString()),
                            Size = GetBundleFileSize(source.Name)
                        }
                    };
                    ServerAssetBundle serverAssetBundle = finalAssetBundles.FirstOrDefault(bundle => bundle.Name == source.Name);
                    if (serverAssetBundle == null)
                    {
                        serverAssetBundle = new ServerAssetBundle
                        {
                            Name     = source.Name,
                            Versions = new[]
                            {
                                assetNameVersion.Version
                            }
                        };
                        finalAssetBundles.Add(serverAssetBundle);
                    }
                    else
                    {
                        serverAssetBundle.Versions =
                            serverAssetBundle.Versions.Concat(new[]
                        {
                            assetNameVersion.Version
                        }).ToArray();
                    }
                    addedAssets.Add(assetNameVersion);
                }
                foreach (string bundleName in assetBundleManifest.GetAllAssetBundles())
                {
                    string hash = assetBundleManifest.GetAssetBundleHash(bundleName).ToString();
                    ServerAssetBundleVersion serverAssetBundleVersion = finalAssetBundles.Where(bundle => bundle.Name == bundleName).SelectMany(bundle => bundle.Versions).First(version => version.Hash == hash);
                    finalMap.Add(bundleName, serverAssetBundleVersion);
                }
                EditorUtility.DisplayProgressBar("Uploading Asset Bundles", "Uploading Asset Bundles", 0);
                InfoResolver.Resolve <FortInfo>()
                .ServerConnectionProvider.EditorConnection.SendFilesToStorage(
                    addedAssets.Select(version => new StorageFile
                {
                    FileName = Path.GetFileName(version.Version.Path),
                    Path     = Path.GetDirectoryName(version.Version.Path) + "/",
                    Stream   = File.OpenRead(Path.Combine(outputPath, version.Name))
                }).ToArray(), f =>
                {
                    EditorUtility.DisplayProgressBar("Uploading Asset Bundles", "Uploading Asset Bundles", f);
                }).Then(files =>
                {
                    for (int i = 0; i < addedAssets.Count; i++)
                    {
                        addedAssets[i].Version.Path = files[i];
                    }
                    EditorUtility.DisplayProgressBar("Updating server Asset bundle list", "Updating server Asset bundle list", 0);
                    InfoResolver.Resolve <FortInfo>()
                    .ServerConnectionProvider.EditorConnection
                    .Call <UpdateServerAchievementResoponse>("UpdateAssetBundles",
                                                             new
                    {
                        AssetBundles = finalAssetBundles.ToArray(),
                        Platform     = EditorAssetBundleUtility.GetPlatformName()
                    })
                    .Then(resoponse =>
                    {
                        EditorUtility.ClearProgressBar();
                        string fullDirectory = string.Format("/Assets/Fort/Resources/BundleConfig/{0}",
                                                             EditorAssetBundleUtility.GetPlatformName());
                        string inAssetPath = string.Format("/Fort/Resources/BundleConfig/{0}",
                                                           EditorAssetBundleUtility.GetPlatformName());
                        if (!Directory.Exists(fullDirectory))
                        {
                            AssetDatabaseHelper.CreateFolderRecursive(fullDirectory);
                        }
                        string jsonFile = Application.dataPath + inAssetPath + "/AssetBundleBundleInfo.json";
                        using (StreamWriter writer = new StreamWriter(jsonFile))
                        {
                            writer.Write(JsonConvert.SerializeObject(finalMap));
                        }
                        //AssetDatabase.ImportAsset(fullDirectory+"/AssetBundleBundleInfo.json");
                        AssetDatabase.Refresh();
                        deferred.Resolve();
                    }, error =>
                    {
                        EditorUtility.ClearProgressBar();
                        deferred.Reject();
                        throw new Exception("Cannot update server asset bundle list");
                    });
                }, () =>
                {
                    EditorUtility.ClearProgressBar();
                    deferred.Reject();
                    throw new Exception("Cannot Upload asset bundles to storage");
                });
            }, error =>
            {
                EditorUtility.ClearProgressBar();
                deferred.Reject();
                throw new Exception("Cannot resolve asset bundles from server");
            });
            return(deferred.Promise());
        }
Exemple #14
0
        private static Promise InternalUpdatePurchasableItemsToServer(bool showDialog)
        {
            Deferred deferred = new Deferred();
            //BacktoryCloudUrl.Url = "http://localhost:8086";
            UpdateItemsRequest           request = new UpdateItemsRequest();
            List <ServerPurchasableItem> serverPurchasableItems = new List <ServerPurchasableItem>();

            foreach (
                PurchasableItemInfo purchasableItemInfo in
                InfoResolver.Resolve <FortInfo>().Purchase.GetAllPurchasableItemInfos().Where(info => info != null))
            {
                NoneLevelBasePurchasableItemInfo noneLevelBasePurchasableItemInfo =
                    purchasableItemInfo as NoneLevelBasePurchasableItemInfo;
                if (noneLevelBasePurchasableItemInfo != null)
                {
                    serverPurchasableItems.Add(new ServerPurchasableItem
                    {
                        ItemId       = noneLevelBasePurchasableItemInfo.Id,
                        Name         = noneLevelBasePurchasableItemInfo.Name,
                        PurchaseCost = noneLevelBasePurchasableItemInfo.Costs.Purchase.Values,
                        RentCost     = noneLevelBasePurchasableItemInfo.Costs.Rent.Values
                    });
                }
                else
                {
                    LevelBasePurchasableItemInfo levelBasePurchasableItemInfo =
                        (LevelBasePurchasableItemInfo)purchasableItemInfo;
                    PurchasableLevelInfo[] purchasableLevelInfos = levelBasePurchasableItemInfo.GetPurchasableLevelInfos();
                    for (int i = 0; i < purchasableLevelInfos.Length; i++)
                    {
                        serverPurchasableItems.Add(new ServerPurchasableItem
                        {
                            ItemId       = purchasableLevelInfos[i].Id,
                            Name         = purchasableLevelInfos[i].Name,
                            PurchaseCost = purchasableLevelInfos[i].Costs.Purchase.Values,
                            RentCost     = purchasableLevelInfos[i].Costs.Rent.Values
                        });
                    }
                }
            }
            request.Items = serverPurchasableItems.ToArray();
            EditorUtility.DisplayProgressBar("Syncronizing Purchasable items", "Syncronizing Purchasable items", 0);
            InfoResolver.Resolve <FortInfo>()
            .ServerConnectionProvider.EditorConnection.Call <object>("UpdateItems", request)
            .Then(
                o =>
            {
                EditorUtility.ClearProgressBar();
                if (showDialog)
                {
                    EditorUtility.DisplayDialog("Syncronizing Purchasable items",
                                                "Purchasable items syncronization succeeded", "Ok");
                }
                deferred.Resolve();
            }, error =>
            {
                EditorUtility.ClearProgressBar();
                deferred.Reject();
                throw new Exception("purchasable items syncronization failed");
            });
            return(deferred.Promise());
        }
Exemple #15
0
        public void ResolveFinishedTest()
        {
            var deferred = new Deferred();
            deferred.Resolve();
            var promise = deferred.Promise();

            bool alwaysHit = false;
            bool doneHit = false;
            bool failHit = false;

            promise.Always(() => alwaysHit = true);
            promise.Done(() => doneHit = true);
            promise.Fail(() => failHit = true);

            Assert.IsTrue(alwaysHit, "Always is hit");
            Assert.IsTrue(doneHit, "Done is hit");
            Assert.IsFalse(failHit, "Fail is not hit");
        }
Exemple #16
0
        private static Promise InternalUpdateServerSettings(bool showDialog)
        {
            Deferred       deferred       = new Deferred();
            ServerSettings serverSettings = new ServerSettings();

            serverSettings.ValuesDefenition = InfoResolver.Resolve <FortInfo>().ValueDefenitions;
            serverSettings.InvitationPrize  = InfoResolver.Resolve <FortInfo>().InvitationInfo.InvitationPrize;
            serverSettings.StartupBalance   = InfoResolver.Resolve <FortInfo>().StartupBalance;

            AdvertisementSettings advertisementSettings = new AdvertisementSettings();

            advertisementSettings.VideoPriority = InfoResolver.Resolve <FortInfo>().Advertisement.AdvertisementProviders.Where(
                priority =>
                priority.AdvertisementProvider != null && priority.AdvertisementProvider.IsVideoSupported)
                                                  .Select((priority, i) => new { Priority = priority, Index = i })
                                                  .OrderBy(arg => arg.Priority.VideoPriority < 0 ? arg.Index * 10000 : arg.Priority.VideoPriority)
                                                  .Select(arg => arg.Priority.AdvertisementProvider.Name)
                                                  .ToArray();
            AdvertisementPriority advertisementPriority =
                InfoResolver.Resolve <FortInfo>().Advertisement.AdvertisementProviders.Where(
                    priority =>
                    priority.AdvertisementProvider != null &&
                    priority.AdvertisementProvider.IsStandardBannerSupported)
                .Select((priority, i) => new { Priority = priority, Index = i })
                .OrderBy(
                    arg => arg.Priority.VideoPriority < 0 ? arg.Index * 10000 : arg.Priority.VideoPriority)
                .Select(arg => arg.Priority)
                .FirstOrDefault();

            if (advertisementPriority != null)
            {
                advertisementSettings.StandardBannerPriority = advertisementPriority.AdvertisementProvider.Name;
            }
            else
            {
                advertisementSettings.StandardBannerPriority = string.Empty;
            }
            advertisementPriority =
                InfoResolver.Resolve <FortInfo>().Advertisement.AdvertisementProviders.Where(
                    priority =>
                    priority.AdvertisementProvider != null &&
                    priority.AdvertisementProvider.IsInterstitialBannerSupported)
                .Select((priority, i) => new { Priority = priority, Index = i })
                .OrderBy(
                    arg => arg.Priority.VideoPriority < 0 ? arg.Index * 10000 : arg.Priority.VideoPriority)
                .Select(arg => arg.Priority)
                .FirstOrDefault();
            if (advertisementPriority != null)
            {
                advertisementSettings.InterstiatialBannerPriority = advertisementPriority.AdvertisementProvider.Name;
            }
            else
            {
                advertisementSettings.InterstiatialBannerPriority = string.Empty;
            }
            serverSettings.AdvertisementSettings = advertisementSettings;
            EditorUtility.DisplayProgressBar("Syncronizing Server settings", "Syncronizing Server settings", 0);
            InfoResolver.Resolve <FortInfo>()
            .ServerConnectionProvider.EditorConnection.Call <object>("UpdateSettings",
                                                                     new UpdateServerSettingRequest {
                ServerSettings = serverSettings
            })
            .Then(
                o =>
            {
                EditorUtility.ClearProgressBar();
                if (showDialog)
                {
                    EditorUtility.DisplayDialog("Syncronizing Server settings", "Server settings syncronization succeeded",
                                                "Ok");
                }
                deferred.Resolve();
            }, error =>
            {
                EditorUtility.ClearProgressBar();
                deferred.Reject();
                throw new Exception("Server settings syncronization failed");
            });
            return(deferred.Promise());
        }
Exemple #17
0
        public Promise <T, ICallError> Call <T>(string methodName, object requestBody)
        {
            Deferred <T, ICallError> deferred = new Deferred <T, ICallError>();
            IDispatcher dispatcher            = EditorDispatcher.Dispatcher;
            string      url = string.Format("https://api.backtory.com/cloud-code/{0}/{1}", InfoResolver.Resolve <BacktoryInfo>().CloudId, methodName);

            if (!string.IsNullOrEmpty(BacktoryCloudUrl.Url))
            {
                url = new Uri(new Uri(BacktoryCloudUrl.Url), new Uri(string.Format("/{0}", methodName), UriKind.Relative)).ToString();
            }
            string authenticationId        = InfoResolver.Resolve <BacktoryInfo>().AuthenticationId;
            string authenticationMasterKey = EditorInfoResolver.Resolve <BacktoryEditorInfo>().AuthenticationMasterKey;
            string body = JsonConvert.SerializeObject(requestBody);

            if (body == "null")
            {
                body = "{}";
            }
            ThreadPool.QueueUserWorkItem(state =>
            {
                MasterLogin(authenticationId, authenticationMasterKey).Then(response =>
                {
                    string authorization = string.Format("{0} {1}", response.TokenType, response.AccessToken);
                    try
                    {
                        string iUrl = url;
                        HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(new Uri(iUrl));
                        webRequest.KeepAlive      = true;
                        webRequest.Method         = "POST";
                        webRequest.ContentType    = "application/json; charset=utf-8";
                        if (!string.IsNullOrEmpty(authorization))
                        {
                            webRequest.Headers.Add("Authorization", authorization);
                        }


                        byte[] resoponse         = Encoding.UTF8.GetBytes(body);
                        webRequest.ContentLength = resoponse.Length;
                        using (System.IO.Stream requestStream = webRequest.GetRequestStream())
                        {
                            requestStream.Write(resoponse, 0, resoponse.Length);
                        }
                        using (WebResponse webResponse = webRequest.GetResponse())
                        {
                            using (System.IO.Stream responseStream = webResponse.GetResponseStream())
                            {
                                using (StreamReader reader = new StreamReader(responseStream))
                                {
                                    string readToEnd = reader.ReadToEnd();
                                    dispatcher.Dispach(() =>
                                    {
                                        try
                                        {
                                            T result = JsonConvert.DeserializeObject <T>(readToEnd);
                                            deferred.Resolve(result);
                                        }
                                        catch (Exception)
                                        {
                                            deferred.Reject(new BactkoryCallError(HttpStatusCode.Continue,
                                                                                  CallErrorType.MethodConversionFailed));
                                        }
                                    });
                                }
                            }
                        }
                    }
                    catch (WebException we)
                    {
                        Debug.LogException(we);
                        dispatcher.Dispach(() =>
                        {
                            HttpWebResponse httpWebResponse = we.Response as HttpWebResponse;
                            if (httpWebResponse != null)
                            {
                                deferred.Reject(new BacktoryEditorCallError(CallErrorType.Other, false,
                                                                            httpWebResponse.StatusCode));
                            }
                            deferred.Reject(new BacktoryEditorCallError(CallErrorType.Other, false,
                                                                        HttpStatusCode.Continue));
                        });
                    }
                    catch (Exception)
                    {
                        deferred.Reject(new BacktoryEditorCallError(CallErrorType.Other, false, HttpStatusCode.Continue));
                    }
                }, () =>
                {
                    dispatcher.Dispach(() =>
                    {
                        deferred.Reject(new BacktoryEditorCallError(CallErrorType.Other, true, HttpStatusCode.Continue));
                    });
                });
            });
            return(deferred.Promise());
        }