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 }
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!"); }
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()); } }); }); }
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; }
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!"); }
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!"); }
/// <summary> /// Produces the proper AVRelation<T> 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 }
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!"); }
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"); }
internal void Remove(AVObject obj) { var change = new AVRelationOperation(null, new[] { obj }); parent.PerformOperation(key, change); targetClassName = change.TargetClassName; }
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)); }
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); }
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); }
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); })); }
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 }
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(); }); }); } }
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 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()); }
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!"); }); }); }); } }
internal IDictionary <string, object> EncodeAttributes() { var currentOperations = convState.StartSave(); var jsonToSave = AVObject.ToJSONObjectForSaving(currentOperations); return(jsonToSave); }
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(); }); } }); }
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"); * });*/ }
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)); }
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"]; }); }
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); }
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); }
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)); }
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也保存到服务器。 }
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; }); }
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); }
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 }
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(); }); }
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="保存成功"; } }); } }
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; } }
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")); }); }
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 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(); }); }
// 网络-注册 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); }); }); }); }); }
// 网络-提交战斗结果 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); }); }
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); }
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()); } }); }); }
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); }
protected abstract IDictionary<string, object> EncodeParseObject(AVObject value);
public object Apply(object oldValue, AVObject obj, string key) { return DeleteToken; }