예제 #1
0
        private async void Button_Click_2(object sender, RoutedEventArgs e)
        {
            #region 一对多的关系,在保存在服务端之前,所有对象必须已经存在于服务端。
            AVObject weibo = new AVObject("Weibo");
            weibo["content"] = "AVOS Cloud 什么的最萌了!";
            //weibo["user"] = new AVUser() { Username = "******", Password = "******" };
            //王校长的用户名已被别人抢注了,所以要正确关联用户,请开发者自定义个名字。

            AVObject comment1 = new AVObject("Comment");
            comment1["words"] = "第一条,好鸡冻!";

            AVObject comment2 = new AVObject("Comment");
            comment2["words"] = "点赞必回粉!";

            AVObject comment3 = new AVObject("Comment");
            comment3["words"] = "优质新西兰奶粉代购,请加q12345789";

            AVObject comment4 = new AVObject("Comment");
            comment4["words"] = "5元千粉,需要的请联系138XXXX";
            await Task.WhenAll(new Task[] { weibo.SaveAsync(), comment1.SaveAsync(), comment2.SaveAsync(), comment3.SaveAsync(), comment4.SaveAsync() }).ContinueWith(t =>
            {
                AVRelation <AVObject> weiboRelation = weibo.GetRelation <AVObject>("comments");
                weiboRelation.Add(comment1);
                weiboRelation.Add(comment2);
                weiboRelation.Add(comment3);
                weiboRelation.Add(comment4);
                return(weibo.SaveAsync());
            });

            #endregion
        }
예제 #2
0
        public async Task Create()
        {
            Init();

            var f         = false;
            var query     = new AVQuery <AVObject>("GameObject").WhereExists("objectId");
            var liveQuery = await query.SubscribeAsync();

            liveQuery.OnLiveQueryReceived += (sender, e) => {
                Console.WriteLine(e.Scope);
                f = true;
            };

            var go = new AVObject("GameObject");
            await go.SaveAsync();

            Console.WriteLine(go.ObjectId);

            while (!f)
            {
                await Task.Delay(100);
            }

            Console.WriteLine("Test create done!");
        }
예제 #3
0
    private void QueryList()
    {
        var data = new AVObject("List");

        data["name"]       = "hello";
        data["Parameters"] = new List <int>(new int[] { 3, 2, 1 });

        data.SaveAsync().ContinueWith(t => {
            if (t.IsFaulted || t.IsCanceled)
            {
                Debug.Log("Failed");
                Debug.Log(t.Exception.Message);
            }
            else
            {
                Debug.Log("Success");
            }
        }).ContinueWith(t => {
            var query = new AVQuery <AVObject>("List").FindAsync().ContinueWith(t2 => {
                foreach (var result in t2.Result)
                {
//					var hello = result.Get<string>("name");
//					Debug.Log(hello);
                    var list = result.Get <IList <int> >("Parameters");
                    Debug.Log(list.ToString());
                }
            });
        });
    }
예제 #4
0
    async private void InitChildCategories()
    {
        IEnumerable <AVObject> categories = null;
        AVObject parentCategory           = null;
        var      parentTask = AVObject.GetQuery("Category").GetAsync(this.parent_category.SelectedValue).ContinueWith(r =>
        {
            parentCategory = r.Result;
        });

        await parentTask;

        var task = AVObject.GetQuery("Category").WhereEqualTo("parent", parentCategory).FindAsync().ContinueWith(r =>
        {
            categories = r.Result;

            var datasource = new DataTable();
            datasource.Columns.Add("categoryName");
            datasource.Columns.Add("objectId");

            foreach (var category in categories)
            {
                datasource.Rows.Add(new[] { category["name"], category.ObjectId });
            }

            this.child_category.DataSource     = datasource;
            this.child_category.DataTextField  = "categoryName";
            this.child_category.DataValueField = "objectId";
            this.child_category.DataBind();
        });

        await task;
    }
예제 #5
0
        public async Task Enter()
        {
            var f         = false;
            var query     = new AVQuery <AVObject>("Account").WhereContains("name", "x");
            var liveQuery = await query.SubscribeAsync();

            liveQuery.OnLiveQueryReceived += (sender, e) => {
                Console.WriteLine(e.Scope);
                Assert.AreEqual(e.Scope, "enter");
                f = true;
            };

            var q  = AVObject.GetQuery("Account");
            var go = await q.GetAsync("5df7268cd4b56c00748e91af");

            go["name"] = "xxx";
            await go.SaveAsync();

            Console.WriteLine(go.ObjectId);

            while (!f)
            {
                await Task.Delay(100);
            }

            go["name"] = "yyy";
            await go.SaveAsync();

            Console.WriteLine("Test enter done!");
        }
예제 #6
0
        public async Task Leave()
        {
            var f         = false;
            var query     = new AVQuery <AVObject>("Account").WhereContains("name", "s");
            var liveQuery = await query.SubscribeAsync();

            liveQuery.OnLiveQueryReceived += (sender, e) => {
                Console.WriteLine(e.Scope);
                Assert.AreEqual(e.Scope, "leave");
                f = true;
            };

            var q  = AVObject.GetQuery("Account");
            var go = await q.GetAsync("5df0b08f5620710073a95ccd");

            go["name"] = "aaa";
            await go.SaveAsync();

            Console.WriteLine(go.ObjectId);

            while (!f)
            {
                await Task.Delay(100);

                f = true;
            }

            go["name"] = "sss";
            await go.SaveAsync();

            Console.WriteLine("Test leave done!");
        }
예제 #7
0
        /// <summary>
        /// Produces the proper AVRelation&lt;T&gt; instance for the given classname.
        /// </summary>
        internal static AVRelationBase CreateRelation(AVObject parent,
                                                      string key,
                                                      string targetClassName)
        {
            // `Expression` is unstable in IL2CPP environment. Let's call the method directly!
#if UNITY
            if (PlatformHooks.IsCompiledByIL2CPP)
            {
                return(CreateRelation <AVObject>(parent, key, targetClassName));
            }
            else
            {
                var targetType = AVObject.GetType(targetClassName);
                Expression <Func <AVRelation <AVObject> > > createRelationExpr =
                    () => CreateRelation <AVObject>(parent, key, targetClassName);
                var createRelationMethod =
                    ((MethodCallExpression)createRelationExpr.Body)
                    .Method
                    .GetGenericMethodDefinition()
                    .MakeGenericMethod(targetType);
                return((AVRelationBase)createRelationMethod.Invoke(null, new object[] { parent, key, targetClassName }));
            }
#else
            var targetType = AVObject.GetType(targetClassName);
            Expression <Func <AVRelation <AVObject> > > createRelationExpr =
                () => CreateRelation <AVObject>(parent, key, targetClassName);
            var createRelationMethod =
                ((MethodCallExpression)createRelationExpr.Body)
                .Method
                .GetGenericMethodDefinition()
                .MakeGenericMethod(targetType);
            return((AVRelationBase)createRelationMethod.Invoke(null, new object[] { parent, key, targetClassName }));
#endif
        }
예제 #8
0
        public async Task Delete()
        {
            var f  = false;
            var go = new AVObject("Todo");
            await go.SaveAsync();

            var objectId  = go.ObjectId;
            var query     = new AVQuery <AVObject>("Todo").WhereEqualTo("objectId", objectId);
            var liveQuery = await query.SubscribeAsync();

            liveQuery.OnLiveQueryReceived += (sender, e) => {
                Console.WriteLine(e.Scope);
                Assert.AreEqual(e.Scope, "delete");
                f = true;
            };

            await go.DeleteAsync();

            Console.WriteLine("object delete done");

            while (!f)
            {
                await Task.Delay(100);

                f = true;
            }
            Console.WriteLine("Test delete done!");
        }
예제 #9
0
 internal void EnsureParentAndKey(AVObject parent, string key)
 {
     this.parent = this.parent ?? parent;
     this.key    = this.key ?? key;
     Debug.Assert(this.parent == parent, "Relation retrieved from two different objects");
     Debug.Assert(this.key == key, "Relation retrieved from two different keys");
 }
예제 #10
0
        internal void Remove(AVObject obj)
        {
            var change = new AVRelationOperation(null, new[] { obj });

            parent.PerformOperation(key, change);
            targetClassName = change.TargetClassName;
        }
예제 #11
0
        public Task <AVUser> GetAsync(CancellationToken cancellationToken)
        {
            AVUser cachedCurrent;

            lock (mutex) {
                cachedCurrent = CurrentUser;
            }

            if (cachedCurrent != null)
            {
                return(Task <AVUser> .FromResult(cachedCurrent));
            }

            return(taskQueue.Enqueue(toAwait => {
                return toAwait.ContinueWith(_ => {
                    return storageController.LoadAsync().OnSuccess(t => {
                        object temp;
                        t.Result.TryGetValue("CurrentUser", out temp);
                        var userDataString = temp as string;
                        AVUser user = null;
                        if (userDataString != null)
                        {
                            var userData = Json.Parse(userDataString) as IDictionary <string, object>;
                            var state = AVObjectCoder.Instance.Decode(userData, AVDecoder.Instance);
                            user = AVObject.FromState <AVUser>(state, "_User");
                        }

                        CurrentUser = user;
                        return user;
                    });
                }).Unwrap();
            }, cancellationToken));
        }
예제 #12
0
        public object Encode()
        {
            var adds = this.adds
                       .Select(id => PointerOrLocalIdEncoder.Instance.Encode(
                                   AVObject.CreateWithoutData(targetClassName, id)))
                       .ToList();
            var removes = this.removes
                          .Select(id => PointerOrLocalIdEncoder.Instance.Encode(
                                      AVObject.CreateWithoutData(targetClassName, id)))
                          .ToList();
            var addDict = adds.Count == 0 ? null : new Dictionary <string, object> {
                { "__op", "AddRelation" },
                { "objects", adds }
            };
            var removeDict = removes.Count == 0 ? null : new Dictionary <string, object> {
                { "__op", "RemoveRelation" },
                { "objects", removes }
            };

            if (addDict != null && removeDict != null)
            {
                return(new Dictionary <string, object> {
                    { "__op", "Batch" },
                    { "ops", new[] { addDict, removeDict } }
                });
            }
            return(addDict ?? removeDict);
        }
예제 #13
0
        public void TestIsAuthenticatedWithOtherParseUser()
        {
            IObjectState state = new MutableObjectState
            {
                ObjectId   = "wagimanPutraPetir",
                ServerData = new Dictionary <string, object>()
                {
                    { "sessionToken", "llaKcolnu" }
                }
            };
            IObjectState state2 = new MutableObjectState
            {
                ObjectId   = "wagimanPutraPetir2",
                ServerData = new Dictionary <string, object>()
                {
                    { "sessionToken", "llaKcolnu" }
                }
            };
            AVUser user  = AVObjectExtensions.FromState <AVUser>(state, "_User");
            AVUser user2 = AVObjectExtensions.FromState <AVUser>(state2, "_User");
            var    mockCurrentUserController = new Mock <IAVCurrentUserController>();

            mockCurrentUserController.Setup(obj => obj.GetAsync(It.IsAny <CancellationToken>()))
            .Returns(Task.FromResult(user));
            AVPlugins.Instance = new AVPlugins
            {
                CurrentUserController = mockCurrentUserController.Object
            };
            AVObject.RegisterSubclass <AVUser>();
            AVObject.RegisterSubclass <AVSession>();

            Assert.False(user2.IsAuthenticated);
        }
예제 #14
0
        public Task TestCurrentSessionToken()
        {
            var storageController = new Mock <IStorageController>();
            var mockedStorage     = new Mock <IStorageDictionary <string, object> >();
            var controller        = new AVCurrentUserController(storageController.Object);

            storageController.Setup(c => c.LoadAsync()).Returns(Task.FromResult(mockedStorage.Object));

            return(controller.GetCurrentSessionTokenAsync(CancellationToken.None).OnSuccess(t => {
                Assert.IsNull(t.Result);

                // We should probably mock this.
                var userState = new MutableObjectState {
                    ServerData = new Dictionary <string, object>()
                    {
                        { "sessionToken", "randomString" }
                    }
                };
                var user = AVObject.CreateWithoutData <AVUser>(null);
                user.HandleFetchResult(userState);

                return controller.SetAsync(user, CancellationToken.None);
            }).Unwrap()
                   .OnSuccess(_ => controller.GetCurrentSessionTokenAsync(CancellationToken.None)).Unwrap()
                   .OnSuccess(t => {
                Assert.AreEqual("randomString", t.Result);
            }));
        }
예제 #15
0
    void OnTriggerEnter2D(Collider2D other)
    {
        if (other.gameObject.tag == "scoreMaker")
        {
            GameManager.score += 1;
            Destroy(other.gameObject);
        }
        else
        {
            AVAnalytics.StopEvent("OneGame");//本局结束,只要调用一下事件终止方法,SDK会自动计算开始到结束之间的间隔发送到服务端。

            #region 把这次的分数记录到AVOS Cloud的服务端

            AVObject gameScore = new AVObject("GameScore");
            gameScore["score"]      = GameManager.score;
            gameScore["playerName"] = "DemoUser";
            gameScore["deviceID"]   = SystemInfo.deviceUniqueIdentifier;
            gameScore.SaveAsync();

            #endregion

            gameObject.collider2D.isTrigger = false;
            AudioSource.PlayClipAtPoint(hit, Camera.main.transform.position);
            if (GameManager.score > PlayerPrefs.GetInt("highscore"))
            {
                guiManager.medal = true;
            }
            GameManager.gameOver = true;
        }
    }
        private async void Button_Click_2(object sender, RoutedEventArgs e)
        {
            #region 一对多的关系,在保存在服务端之前,所有对象必须已经存在于服务端。
            AVObject weibo = new AVObject("Weibo");
            weibo["content"] = "AVOS Cloud 什么的最萌了!";
            //weibo["user"] = new AVUser() { Username = "******", Password = "******" };
            //王校长的用户名已被别人抢注了,所以要正确关联用户,请开发者自定义个名字。

            AVObject comment1 = new AVObject("Comment");
            comment1["words"] = "第一条,好鸡冻!";

            AVObject comment2 = new AVObject("Comment");
            comment2["words"] = "点赞必回粉!";

            AVObject comment3 = new AVObject("Comment");
            comment3["words"] = "优质新西兰奶粉代购,请加q12345789";

            AVObject comment4 = new AVObject("Comment");
            comment4["words"] = "5元千粉,需要的请联系138XXXX";
            await Task.WhenAll(new Task[] { weibo.SaveAsync(), comment1.SaveAsync(), comment2.SaveAsync(), comment3.SaveAsync(), comment4.SaveAsync() }).ContinueWith(t =>
            {
                AVRelation<AVObject> weiboRelation = weibo.GetRelation<AVObject>("comments");
                weiboRelation.Add(comment1);
                weiboRelation.Add(comment2);
                weiboRelation.Add(comment3);
                weiboRelation.Add(comment4);
                return weibo.SaveAsync();
            });
            #endregion

        }
예제 #17
0
        public static async void updateCloud(string foodname, string type)
        {
            if (type.Equals("11"))
            {
                AVQuery <AVObject> delete = new AVQuery <AVObject>("Fruit");
                delete = delete.WhereEqualTo("name", foodname);

                await delete.FindAsync().ContinueWith(s =>
                {
                    IEnumerable <AVObject> boys = s.Result;

                    AVObject ob = boys.ElementAt(0);
                    ob.SaveAsync().ContinueWith(t =>
                    {
                        // 保存成功之后,修改一个已经在服务端生效的数据,这里我们修改age
                        // LeanCloud 只会针对指定的属性进行覆盖操作,本例中的name不会被修改
                        ob["state"] = false;
                        ob.SaveAsync();
                    });
                });
            }
            if (type.Equals("22"))
            {
                AVQuery <AVObject> delete = new AVQuery <AVObject>("Vegetable");
                delete = delete.WhereEqualTo("name", foodname);

                await delete.FindAsync().ContinueWith(s =>
                {
                    IEnumerable <AVObject> boys = s.Result;

                    AVObject ob = boys.ElementAt(0);
                    ob.SaveAsync().ContinueWith(t =>
                    {
                        // 保存成功之后,修改一个已经在服务端生效的数据,这里我们修改age
                        // LeanCloud 只会针对指定的属性进行覆盖操作,本例中的name不会被修改
                        ob["state"] = false;
                        ob.SaveAsync();
                    });
                });
            }
            if (type.Equals("33"))
            {
                AVQuery <AVObject> delete = new AVQuery <AVObject>("Food");
                delete = delete.WhereEqualTo("name", foodname);

                await delete.FindAsync().ContinueWith(s =>
                {
                    IEnumerable <AVObject> boys = s.Result;

                    AVObject ob = boys.ElementAt(0);
                    ob.SaveAsync().ContinueWith(t =>
                    {
                        // 保存成功之后,修改一个已经在服务端生效的数据,这里我们修改age
                        // LeanCloud 只会针对指定的属性进行覆盖操作,本例中的name不会被修改
                        ob["state"] = false;
                        ob.SaveAsync();
                    });
                });
            }
        }
예제 #18
0
        public void TestAddUniqueToList()
        {
            AVObject obj = new AVObject("Corgi");

            obj.AddUniqueToList("emptyList", "gogo");
            obj["existingList"] = new List <string>()
            {
                "gogo"
            };

            Assert.True(obj.ContainsKey("emptyList"));
            Assert.AreEqual(1, obj.Get <List <object> >("emptyList").Count);

            obj.AddUniqueToList("existingList", "gogo");
            Assert.True(obj.ContainsKey("existingList"));
            Assert.AreEqual(1, obj.Get <List <object> >("existingList").Count);

            obj.AddUniqueToList("existingList", 1);
            Assert.AreEqual(2, obj.Get <List <object> >("existingList").Count);

            obj.AddRangeUniqueToList("newRange", new List <string>()
            {
                "anti", "anti"
            });
            Assert.AreEqual(1, obj.Get <List <object> >("newRange").Count);
        }
예제 #19
0
        public void TestDeepTraversal()
        {
            AVObject obj = AVObject.Create("Corgi");
            IDictionary <string, object> someDict = new Dictionary <string, object>()
            {
                { "someList", new List <object>() }
            };

            obj["obj"]      = AVObject.Create("Pug");
            obj["obj2"]     = AVObject.Create("Pug");
            obj["list"]     = new List <object>();
            obj["dict"]     = someDict;
            obj["someBool"] = true;
            obj["someInt"]  = 23;

            IEnumerable <object> traverseResult = AVObjectExtensions.DeepTraversal(obj, true, true);

            Assert.AreEqual(8, traverseResult.Count());

            // Don't traverse beyond the root (since root is AVObject)
            traverseResult = AVObjectExtensions.DeepTraversal(obj, false, true);
            Assert.AreEqual(1, traverseResult.Count());

            traverseResult = AVObjectExtensions.DeepTraversal(someDict, false, true);
            Assert.AreEqual(2, traverseResult.Count());

            // Should ignore root
            traverseResult = AVObjectExtensions.DeepTraversal(obj, true, false);
            Assert.AreEqual(7, traverseResult.Count());
        }
예제 #20
0
    void OnGUI()
    {
        if (GUILayout.Button("创建一个士兵"))
        {
            AVUser.LogInAsync("games", "123").ContinueWith(loginTask => {
                Debug.Log("login success!");
                user = (AVUser)loginTask.Result;

                AVUser otherUser = null;
                AVUser.Query.GetAsync("55220263e4b07952a95fbf7a").ContinueWith(t => {
                    otherUser = (AVUser)t.Result;

                    AVObject soldier = new AVObject("Soldier")
                    {
                        { "type", 3 },
                        { "lv", 1 },
                        { "exp", 50 },
                        { "user2", new List <AVUser>()
                          {
                              user,
                              otherUser
                          } }
                    };

                    soldier.SaveAsync().ContinueWith(saveTask =>
                    {
                        Debug.Log("solider created!");
                    });
                });
            });
        }
    }
예제 #21
0
        internal IDictionary <string, object> EncodeAttributes()
        {
            var currentOperations = convState.StartSave();
            var jsonToSave        = AVObject.ToJSONObjectForSaving(currentOperations);

            return(jsonToSave);
        }
예제 #22
0
        public void TestRemove()
        {
            AVObject obj = AVObject.Create("Corgi");

            obj["gogo"] = true;
            Assert.True(obj.ContainsKey("gogo"));

            obj.Remove("gogo");
            Assert.False(obj.ContainsKey("gogo"));

            IObjectState state = new MutableObjectState
            {
                ObjectId   = "waGiManPutr4Pet1r",
                ClassName  = "Pagi",
                CreatedAt  = new DateTime(),
                ServerData = new Dictionary <string, object>()
                {
                    { "username", "kevin" },
                    { "sessionToken", "se551onT0k3n" }
                }
            };

            obj = AVObjectExtensions.FromState <AVObject>(state, "Corgi");
            Assert.True(obj.ContainsKey("username"));
            Assert.True(obj.ContainsKey("sessionToken"));

            obj.Remove("username");
            Assert.False(obj.ContainsKey("username"));
            Assert.True(obj.ContainsKey("sessionToken"));
        }
		public object Apply(object oldValue, AVObject obj, string key)
		{
            if (oldValue == null)
                return this.objects.ToList();
            List<object> list = ((IEnumerable<object>)AVClient.ConvertTo<IList<object>>(oldValue)).ToList<object>();
            IEqualityComparer<object> avObjectComparer = AVFieldOperations.AVObjectComparer;
            foreach (object obj1 in this.objects)
            {
                object @object = obj1;
                if (!(@object is AVObject))
                {
                    if (!list.Contains<object>(@object, avObjectComparer))
                        list.Add(@object);
                }
                else
                {
                    object obj2 = list.FirstOrDefault(listObj => avObjectComparer.Equals(@object, listObj));
                    if (obj2 != null)
                        list[list.IndexOf(obj2)] = @object;
                    else
                        list.Add(@object);
                }
            }
            return (object)list;
        }
    public void SubmitScore()
    {
        AVObject leaderBoardScore = null;

        new AVQuery <AVObject>("GameScore").WhereEqualTo("playerName", "player1").OrderByDescending("score").FindAsync().ContinueWith(t =>
        {
            foreach (AVObject avobj in t.Result)
            {
                Debug.Log(avobj["playerName"] + " " + avobj["score"] + " " + avobj.CreatedAt);
                leaderBoardScore = avobj;
                break;
            }

            if (leaderBoardScore == null)
            {
                leaderBoardScore = new AVObject("GameScore");
                leaderBoardScore["playerName"] = "player1";
                leaderBoardScore["score"]      = int.Parse(intputField.text);
                if (AVUser.CurrentUser != null)
                {
                    leaderBoardScore.ACL = new AVACL();
                    leaderBoardScore.ACL.PublicReadAccess = true;
                    leaderBoardScore.ACL.SetWriteAccess(AVUser.CurrentUser, true);
                }
            }
            if ((int)(leaderBoardScore["score"]) < int.Parse(intputField.text))
            {
                leaderBoardScore["score"] = int.Parse(intputField.text);
                leaderBoardScore.SaveAsync().ContinueWith(t2 =>
                {
                    UpdateLeaderBoardText();
                });
            }
        });
    }
예제 #25
0
        public Task TestUpgradeToRevocableSession()
        {
            IObjectState state = new MutableObjectState {
                ServerData = new Dictionary <string, object>()
                {
                    { "sessionToken", "llaKcolnu" }
                }
            };
            var mockController = new Mock <IAVSessionController>();

            mockController.Setup(obj => obj.UpgradeToRevocableSessionAsync(It.IsAny <string>(),
                                                                           It.IsAny <CancellationToken>())).Returns(Task.FromResult(state));

            var mockCurrentUserController = new Mock <IAVCurrentUserController>();

            AVPlugins.Instance = new AVPlugins {
                SessionController     = mockController.Object,
                CurrentUserController = mockCurrentUserController.Object,
            };
            AVObject.RegisterSubclass <AVUser>();
            AVObject.RegisterSubclass <AVSession>();

            CancellationTokenSource source = new CancellationTokenSource();

            return(AVSessionExtensions.UpgradeToRevocableSessionAsync("someSession", source.Token).ContinueWith(t => {
                Assert.False(t.IsFaulted);
                Assert.False(t.IsCanceled);
                mockController.Verify(obj => obj.UpgradeToRevocableSessionAsync(It.Is <string>(sessionToken => sessionToken == "someSession"),
                                                                                source.Token), Times.Exactly(1));

                Assert.AreEqual("llaKcolnu", t.Result);
            }));
        }
        public IList <Task <IObjectState> > SaveAllAsync(IList <IObjectState> states,
                                                         IList <IDictionary <string, IAVFieldOperation> > operationsList,
                                                         string sessionToken,
                                                         CancellationToken cancellationToken)
        {
            var requests = states.Zip(operationsList, (item, ops) => new Dictionary <string, object> {
                { "method", (item.ObjectId == null ? "POST" : "PUT") },
                { "path", (item.ObjectId == null ?
                           string.Format("/classes/{0}", Uri.EscapeDataString(item.ClassName)) :
                           string.Format("/classes/{0}/{1}", Uri.EscapeDataString(item.ClassName),
                                         Uri.EscapeDataString(item.ObjectId))) },
                { "body", AVObject.ToJSONObjectForSaving(ops) }
            }).Cast <object>().ToList();

            var batchTasks = ExecuteBatchRequests(requests, sessionToken, cancellationToken);
            var stateTasks = new List <Task <IObjectState> >();

            foreach (var task in batchTasks)
            {
                stateTasks.Add(task.OnSuccess(t => {
                    return(AVObjectCoder.Instance.Decode(t.Result, AVDecoder.Instance));
                }));
            }

            return(stateTasks);
        }
        public async void SaveFile(byte[] data, string name)
        {
            AVFile file = new AVFile(name, data, new Dictionary <string, object>()
            {
                { "author", "AVOSCloud" }
            });


            AVObject photo = AVObject.CreateWithoutData("photo", "55acdce0e4b044ac283609af");
            await photo.SaveAsync().ContinueWith(t =>
            {
                // 保存成功之后,修改一个已经在服务端生效的数据,这里我们修改age
                // LeanCloud 只会针对指定的属性进行覆盖操作,本例中的name不会被修改
                photo["ss"] = file;
                photo.SaveAsync();
            });


            /*await photo.SaveAsync().ContinueWith(t =>
             * {
             *  // 保存成功之后,修改一个已经在服务端生效的数据,这里我们修改age
             *  // LeanCloud 只会针对指定的属性进行覆盖操作,本例中的name不会被修改\
             *
             *  photo["ss"] = file;
             *  photo.SaveAsync();
             *
             *  MessageBox.Show("ok");
             * });*/
        }
예제 #28
0
파일: Test.cs 프로젝트: Henry-T/UnityPG
    void OnGUI()
    {
        if (GUILayout.Button("创建一个士兵"))
        {
            AVUser.LogInAsync("games", "123").ContinueWith(loginTask=>{
                Debug.Log("login success!");
                user = (AVUser)loginTask.Result;

                AVUser otherUser = null;
                AVUser.Query.GetAsync("55220263e4b07952a95fbf7a").ContinueWith(t=>{
                    otherUser = (AVUser)t.Result;

                    AVObject soldier = new AVObject("Soldier"){
                        {"type", 3},
                        {"lv", 1},
                        {"exp", 50},
                        {"user2", new List<AVUser>(){
                            user,
                            otherUser
                        }}
                    };

                    soldier.SaveAsync().ContinueWith(saveTask =>
                        {
                            Debug.Log("solider created!");
                        });
                    });
            });
        }
    }
        public Task <AVInstallation> GetAsync(CancellationToken cancellationToken)
        {
            AVInstallation cachedCurrent;

            cachedCurrent = CurrentInstallation;

            if (cachedCurrent != null)
            {
                return(Task <AVInstallation> .FromResult(cachedCurrent));
            }

            return(taskQueue.Enqueue(toAwait => {
                return toAwait.ContinueWith(t => {
                    object temp;
                    AVClient.ApplicationSettings.TryGetValue("CurrentInstallation", out temp);
                    var installationDataString = temp as string;
                    AVInstallation installation = null;
                    if (installationDataString != null)
                    {
                        var installationData = AVClient.DeserializeJsonString(installationDataString);
                        installation = AVObject.CreateWithoutData <AVInstallation>(null);
                        installation.HandleFetchResult(AVObjectCoder.Instance.Decode(installationData, AVDecoder.Instance));
                    }
                    else
                    {
                        installation = AVObject.Create <AVInstallation>();
                        installation.SetIfDifferent("installationId", installationIdController.Get().ToString());
                    }

                    CurrentInstallation = installation;
                    return installation;
                });
            }, cancellationToken));
        }
예제 #30
0
        public void TestIndexGetterSetter()
        {
            AVObject obj = AVObject.Create("Corgi");

            obj["gogo"]    = true;
            obj["list"]    = new List <string>();
            obj["dict"]    = new Dictionary <string, object>();
            obj["fakeACL"] = new AVACL();
            obj["obj"]     = new AVObject("Corgi");

            Assert.True(obj.ContainsKey("gogo"));
            Assert.IsInstanceOf <bool>(obj["gogo"]);

            Assert.True(obj.ContainsKey("list"));
            Assert.IsInstanceOf <IList <string> >(obj["list"]);

            Assert.True(obj.ContainsKey("dict"));
            Assert.IsInstanceOf <IDictionary <string, object> >(obj["dict"]);

            Assert.True(obj.ContainsKey("fakeACL"));
            Assert.IsInstanceOf <AVACL>(obj["fakeACL"]);

            Assert.True(obj.ContainsKey("obj"));
            Assert.IsInstanceOf <AVObject>(obj["obj"]);

            Assert.Throws <KeyNotFoundException>(() => { var gogo = obj["missingItem"]; });
        }
예제 #31
0
        public void TestTryGetValue()
        {
            IObjectState state = new MutableObjectState
            {
                ObjectId   = "waGiManPutr4Pet1r",
                ClassName  = "Pagi",
                CreatedAt  = new DateTime(),
                ServerData = new Dictionary <string, object>()
                {
                    { "username", "kevin" },
                    { "sessionToken", "se551onT0k3n" }
                }
            };
            AVObject obj = AVObjectExtensions.FromState <AVObject>(state, "Omitted");
            string   res = null;

            obj.TryGetValue <string>("username", out res);
            Assert.AreEqual("kevin", res);

            AVObject resObj = null;

            obj.TryGetValue <AVObject>("username", out resObj);
            Assert.Null(resObj);

            obj.TryGetValue <string>("missingItem", out res);
            Assert.Null(res);
        }
예제 #32
0
        public void TestEnumerator()
        {
            IObjectState state = new MutableObjectState
            {
                ObjectId   = "waGiManPutr4Pet1r",
                ClassName  = "Pagi",
                CreatedAt  = new DateTime(),
                ServerData = new Dictionary <string, object>()
                {
                    { "username", "kevin" },
                    { "sessionToken", "se551onT0k3n" }
                }
            };
            AVObject obj = AVObjectExtensions.FromState <AVObject>(state, "Omitted");

            int count = 0;

            foreach (var key in obj)
            {
                count++;
            }
            Assert.AreEqual(2, count);

            obj["newDirtyItem"] = "newItem";
            count = 0;
            foreach (var key in obj)
            {
                count++;
            }
            Assert.AreEqual(3, count);
        }
예제 #33
0
    public int SlotID;                  // 位置

    public static void DB_CreateBuilding(int slotId, EBuildingType type)
    {
        AVObject obj = new AVObject("Building");

        obj["UserID"] = AVUser.CurrentUser.ObjectId;
        obj["Type"]   = (int)type;
        obj["Level"]  = 1;
        obj["Value"]  = 1;
        obj["SlotID"] = slotId;

        obj.SaveAsync().ContinueWith(t => {
            BuildingData newBuilding = new BuildingData();
            newBuilding.UserID       = AVUser.CurrentUser.ObjectId;
            newBuilding.Type         = type;
            newBuilding.Level        = 1;
            newBuilding.Value        = 1;
            newBuilding.SlotID       = slotId;

            GameManager.Instance.LastCreatedBuilding = newBuilding;
            GameManager.Instance.EventQueue.Queue.Enqueue(new EventItem()
            {
                Type = EEventItemType.BuildCommandOK
            });
        });
    }
		public object Apply(object oldValue, AVObject obj, string key)
		{
			if (oldValue == null)
			{
				return new List<object>();
			}
			IList<object> list = (IList<object>)AVClient.ConvertTo<IList<object>>(oldValue);
			return Enumerable.ToList<object>(Enumerable.Except<object>(list, this.objects, AVFieldOperations.AVObjectComparer));
		}
예제 #35
0
        private async void Application_Startup(object sender, StartupEventArgs args)
        {
            //await AVAnalytics.TrackAppOpenedAsync();
            var avObject = new AVObject("TestObject");
            avObject["key"] = "value";
            await avObject.SaveAsync();

            Console.WriteLine(avObject.ObjectId);
        }
 private async void Button_Click(object sender, RoutedEventArgs e)
 {
     AVObject girlType = new AVObject("GirlType");
     girlType["typeName"] = "Hot";
     AVObject beckham = new AVObject("Boy");
     beckham["name"] = "AVOS Cloud User 1";
     beckham["age"] = 38;
     beckham["focusType"] = girlType;//这样使得在AVOS Cloud 的控制台Web上显示的就是:Boy的字段focusType 是一个 指向 GirlType 的Pointer的类型。Pointer 可以理解为一个指向AVObject 指针。
     await beckham.SaveAsync();//保存beckham的时候会自动将girlType也保存到服务器。
 }
예제 #37
0
	public static void DB_CreateTestData(string input)
	{
		AVObject obj = new AVObject("Test");
		obj["TestA"] = input;
		
		obj.SaveAsync().ContinueWith(t => {
			TestData testObject = new TestData();
			testObject.testA = input;
		});
	}
예제 #38
0
	public void SetMatch(AVUser user, AVObject villageObject)
	{
		CurMatchUser = user;
		CurMatchVillage = villageObject;

		lbMatchBeliefAll.text = villageObject.Get<int>("BeliefAll").ToString();
		lbMatchUserName.text = user.Username;

		btnFight.gameObject.SetActive(true);
	}
예제 #39
0
	public static VillageData CreateFromAVObject(AVObject obj)
	{
		VillageData villageData = new VillageData();
		villageData.UserID = obj.Get<string>("UserID");
		villageData.Defence = obj.Get<int>("Defence");
		villageData.Power = obj.Get<int>("Power");
		villageData.Trick = obj.Get<int>("Trick");
		villageData.Belief = obj.Get<int>("Belief");
		villageData.BeliefAll = obj.Get<int>("BeliefAll");
		return villageData;
	}
        protected override IDictionary<string, object> EncodeParseObject(AVObject value)
        {
            if (value.ObjectId == null) {
            // TODO (hallucinogen): handle local id. For now we throw.
            throw new ArgumentException("Cannot create a pointer to an object without an objectId");
              }

              return new Dictionary<string, object> {
            {"__type", "Pointer"},
            {"className", value.ClassName},
            {"objectId", value.ObjectId}
              };
        }
 private async void Button_Click_1(object sender, RoutedEventArgs e)
 {
     AVQuery<AVObject> findGirlType = new AVQuery<AVObject>("GirlType").WhereEqualTo("typeName", "Hot");
     await findGirlType.FindAsync().ContinueWith(t => 
     {
         var hot = t.Result.First();//可能有多个标记为Hot的GirType,但是“弱水三千只取一瓢”。
         var myself = new AVObject("Boy");
         myself["name"] = "AVOS Cloud User 2";
         myself["age"] = 18;
         myself["focusType"] = hot;//关联被查询出来的对象。
         return myself.SaveAsync();
     });
 }
        private async void Button_Click(object sender, RoutedEventArgs e)
        {
            #region 数据的存储是 LeanCloud 提供的最基础的服务,它在客户端只需要如下简单的操作就可以。

            AVObject player = new AVObject("Player");//表的名字为:Player,在AVOS Cloud 网站上控制台里面可以查看表的信息。web:https://cn.avoscloud.com/applist.html#/apps 需要登录。
            //AVOS Cloud 支持最常用的几种数据类型,详细的请查看:https://cn.avoscloud.com/docs/data_security.html#数据
            player["name"] = txb_playerName.Text.Trim();//字符串
            player["age"] = int.Parse(txb_age.Text.Trim());//整型
            player["isAdult"] = int.Parse(txb_age.Text.Trim()) >= 18 ? true : false;//bool 布尔类型
            Task saveTask = player.SaveAsync();//
            await saveTask;//采用.NET 4.5之后推荐的异步保存到服务端。

            #endregion
        }
예제 #43
0
	public static void DB_CreateVillage()
	{
		AVObject obj = new AVObject("Village");
		obj["UserID"] = AVUser.CurrentUser.ObjectId;
		obj["Defence"] = 10;
		obj["Power"] = 10;
		obj["Trick"] = 0;
		obj["Belief"] = 0;
		obj["BeliefAll"] = 0;
		
		obj.SaveAsync().ContinueWith(t => {
			GameManager.Instance.EventQueue.Queue.Enqueue(new EventItem(){Type = EEventItemType.CreateVillageSuccess});
		});
	}
 private async void Button_Click_1(object sender, RoutedEventArgs e)
 {
     var gameScore = new AVObject("GameScore")
     {
     { "score", 1338 },
     { "playerName", "Peter Burke" },
     { "cheatMode", false },
     { "skills", new List<string> { "FBI", "Agent Leader" } },
     };
     await gameScore.SaveAsync().ContinueWith(t =>
     {
         // 保存成功之后,修改一个已经在服务端生效的数据,这里我们修改cheatMode和score
         // AVOSCloud只会针对指定的属性进行覆盖操作,本例中的playerName不会被修改
         gameScore["cheatMode"] = true;
         gameScore["score"] = 9999;
         return gameScore.SaveAsync();
     });
 }
예제 #45
0
    void OnGUI()
    {
        GUI.Label (new Rect (270, 50, 200, 80), msg);

        if (GUI.Button (new Rect (50, 50, 200, 80), "添加GameScore"))
        {
            AVObject gameScore =new AVObject("GameScore");
            gameScore["score"] = 1337;
            gameScore["playerName"] = "Neal Caffrey";
            gameScore.SaveAsync().ContinueWith(t=>
                                               {
                if(!t.IsFaulted)
                {
                    msg="保存成功";
                }
            });
        }
    }
예제 #46
0
        public void TestAddUniqueToList()
        {
            AVObject obj = new AVObject("Corgi");
            obj.AddUniqueToList("emptyList", "gogo");
            obj["existingList"] = new List<string>() { "gogo" };

            Assert.True(obj.ContainsKey("emptyList"));
            Assert.AreEqual(1, obj.Get<List<object>>("emptyList").Count);

            obj.AddUniqueToList("existingList", "gogo");
            Assert.True(obj.ContainsKey("existingList"));
            Assert.AreEqual(1, obj.Get<List<object>>("existingList").Count);

            obj.AddUniqueToList("existingList", 1);
            Assert.AreEqual(2, obj.Get<List<object>>("existingList").Count);

            obj.AddRangeUniqueToList("newRange", new List<string>() { "anti", "anti" });
            Assert.AreEqual(1, obj.Get<List<object>>("newRange").Count);
        }
 public object Apply(object oldValue, AVObject obj, string key)
 {
     if (this.adds.Count == 0 && this.removes.Count == 0)
         return (object)null;
     if (oldValue == null)
         return (object)AVRelationBase.CreateRelation(obj, key, this.targetClassName);
     if (!(oldValue is AVRelationBase))
         throw new InvalidOperationException("Operation is invalid after previous operation.");
     AVRelationBase avRelationBase = (AVRelationBase)oldValue;
     string targetClassName = avRelationBase.TargetClassName;
     if (targetClassName != null && targetClassName != this.targetClassName)
     {
         throw new InvalidOperationException("Related object must be a " + targetClassName + ", but a " + this.targetClassName + " was passed in.");
     }
     else
     {
         avRelationBase.TargetClassName = this.targetClassName;
         return (object)avRelationBase;
     }
 }
예제 #48
0
	private void Query () {
		var model = new AVObject ("Model1");
		model ["name"] = "TestModel";
		model ["cpucount"] = 3;
		model.SaveAsync().ContinueWith(t=>{
			if (!t.IsFaulted) {
				Debug.Log("Success!");
			}
			else {
				Debug.Log("Error!");
			}

			var query = new AVQuery<AVObject>("Model1");
			return query.GetAsync("551d1952e4b062519520cf96");
		}).Unwrap().ContinueWith(t => {
			var modelGot = t.Result;
			Debug.Log(modelGot.Get<string>("name"));
			Debug.Log(modelGot.Get<int>("cpucount"));
		});
	}
예제 #49
0
	public int SlotID;			// 位置

	public static void DB_CreateBuilding(int slotId, EBuildingType type)
	{
		AVObject obj = new AVObject("Building");
		obj["UserID"] = AVUser.CurrentUser.ObjectId;
		obj["Type"] = (int)type;
		obj["Level"] = 1;
		obj["Value"] = 1;
		obj["SlotID"] = slotId;

		obj.SaveAsync().ContinueWith(t => {
			BuildingData newBuilding = new BuildingData();
			newBuilding.UserID = AVUser.CurrentUser.ObjectId;
			newBuilding.Type = type;
			newBuilding.Level = 1;
			newBuilding.Value = 1;
			newBuilding.SlotID = slotId;

			GameManager.Instance.LastCreatedBuilding = newBuilding;
			GameManager.Instance.EventQueue.Queue.Enqueue(new EventItem(){Type = EEventItemType.BuildCommandOK});
		});
	}
예제 #50
0
	public static void DB_UpdateTestData(string changedData)
	{
		/**
		string objectUpdateId = string.Empty;
		AVQuery<AVObject> query=new AVQuery<AVObject>("Test");
		query.WhereEqualTo("TestA","testa").FirstAsync().ContinueWith(t =>{
			objectUpdateId=t["TestA"];
		}
		);**/

		var obj = new AVObject ("Test");
		
		obj.ObjectId = "53b7bc82e4b0cdeb6e249b7a";
		obj["TestA"] = changedData;
		obj.SaveAsync().ContinueWith(t =>
		                                   {
			// 保存成功之后,修改一个已经在服务端生效的数据,这里我们修改cheatMode和score
			// AVOSCloud只会针对指定的属性进行覆盖操作,本例中的playerName不会被修改
			//obj["TestA"] = "changedTesta";
			//obj.SaveAsync();
		});
	}
예제 #51
0
	// 网络-注册
	public void NetDoRegist(string userName, string password, string email)
	{
		AVUser user = new AVUser();
		user.Username = userName;
		user.Password = password;
		user.Email = email;

		GameManager.Instance.AsyncBeginWait();
		user.SignUpAsync().ContinueWith(t => {
			// TODO 创建玩家的Village
			GameManager.Instance.AsyncBeginWait();

			AVObject obj = new AVObject("Village");
			obj["UserID"] = AVUser.CurrentUser.ObjectId;
			obj["Belief"] = 0;
			obj["BeliefAll"] = 0;
			
			obj.SaveAsync().ContinueWith(t2 => {
				
				// 创建玩家神庙
				BuildingData newBuilding = new BuildingData();
				newBuilding.AVObject = new AVObject("Building");
				newBuilding.UserID = AVUser.CurrentUser.ObjectId;
				newBuilding.Type = EBuildingType.Altar;
				newBuilding.Level = 1;
				newBuilding.SlotID = 4;
				newBuilding.Sibling = 1;

				newBuilding.AVObject.SaveAsync().ContinueWith(t3=>{
					// 进入登录界面
					// TODO 将用户名和密码拷贝过去
					GameManager.Instance.AsyncEndWait(()=>{
						UIManager.Instance.ChangeScreen(EScreen.Login);
					});
				});
			});
		});
	}
예제 #52
0
	// 网络-提交战斗结果
	public void NetSubmitBattleResult(string invader, string defender, bool isWin, Action<AVObject> callback)
	{
		AVObject battleData = new AVObject("Battle");
		battleData["Invader"] = invader;
		battleData["Defender"] = defender;
		battleData["IsWin"] = isWin;
		battleData["Time"] = DateTime.Now;

		battleData.SaveAsync().ContinueWith(t=>{
			if(callback != null)
				callback(battleData);
		});
	}
예제 #53
0
 public void TestParseObjectConstructor()
 {
     AVObject obj = new AVObject("Corgi");
     Assert.AreEqual("Corgi", obj.ClassName);
     Assert.Null(obj.CreatedAt);
     Assert.True(obj.IsDataAvailable);
     Assert.True(obj.IsDirty);
 }
예제 #54
0
	private void QueryList () {
		var data = new AVObject("List");
		data["name"] = "hello";
		data["Parameters"] = new List<int>(new int[] {3, 2, 1});

		data.SaveAsync().ContinueWith(t => {
			if (t.IsFaulted || t.IsCanceled) {
				Debug.Log("Failed");
				Debug.Log(t.Exception.Message);
			}
			else {
				Debug.Log("Success");
			}
		}).ContinueWith(t => {
			var query = new AVQuery<AVObject>("List").FindAsync().ContinueWith(t2 => {
				foreach (var result in t2.Result) {
//					var hello = result.Get<string>("name");
//					Debug.Log(hello);
					var list = result.Get<IList<int>>("Parameters");
					Debug.Log(list.ToString());
				}

			});
		});
	}
예제 #55
0
        public void TestRemoveAllFromList()
        {
            AVObject obj = new AVObject("Corgi");
            obj["existingList"] = new List<string>() { "gogo", "Queen of Pain" };

            obj.RemoveAllFromList("existingList", new List<string>() { "gogo", "missingItem" });
            Assert.AreEqual(1, obj.Get<List<object>>("existingList").Count);
        }
		public object Apply(object oldValue, AVObject obj, string key)
		{
			return this.Value;
		}
		public object Apply(object oldValue, AVObject obj, string key)
		{
			if (oldValue is string)
			{
				throw new InvalidOperationException("Cannot increment a non-number type.");
			}
			return Add(oldValue ?? 0, amount);
		}
예제 #58
0
void OnTriggerEnter2D(Collider2D other)
{
    if (other.gameObject.tag == "scoreMaker")
    {
        GameManager.score += 1;
        Destroy(other.gameObject);
    }
    else
    {

        AVAnalytics.StopEvent("OneGame");//本局结束,只要调用一下事件终止方法,SDK会自动计算开始到结束之间的间隔发送到服务端。

        #region 把这次的分数记录到AVOS Cloud的服务端

        AVObject gameScore = new AVObject("GameScore");
        gameScore["score"] = GameManager.score;
        gameScore["playerName"] = "DemoUser";
        gameScore["deviceID"] = SystemInfo.deviceUniqueIdentifier;
        gameScore.SaveAsync();

        #endregion

        gameObject.collider2D.isTrigger = false;
        AudioSource.PlayClipAtPoint(hit, Camera.main.transform.position);
        if (GameManager.score > PlayerPrefs.GetInt("highscore"))
        {
            guiManager.medal = true;
        }
        GameManager.gameOver = true;
    }
}
예제 #59
0
 protected abstract IDictionary<string, object> EncodeParseObject(AVObject value);
		public object Apply(object oldValue, AVObject obj, string key)
		{
			return DeleteToken;
		}