public async Task SyncToRedis() { var db = groupCacheDatabase.GetDatabase(); var lookup = new GroupLookup(); var groups = await Lookup(lookup); groupCacheDatabase.FlushDatabase(); foreach (var group in groups) { var gamelookup = new GameLookup(); gamelookup.id = group.Gameid; var game = (await gameRepository.Lookup(gamelookup)).FirstOrDefault(); if (game == null) { continue; } var group_key = game.Gamename + ":" + group.Groupid + ":"; db.HashSet(group_key, "gameid", group.Gameid.ToString()); db.HashSet(group_key, "groupid", group.Groupid.ToString()); db.HashSet(group_key, "maxwaiting", group.Maxwaiting.ToString()); db.HashSet(group_key, "hostname", group.Name.ToString()); var custkey_name = group_key + "custkeys"; if (group.Other == null || group.Other.Length == 0) { continue; } var keys = group.Other.Substring(1).Split('\\'); string key = ""; for (int i = 0; i < keys.Length; i++) { if (i % 2 != 0) { db.HashSet(custkey_name, key, keys[i]); } else { key = keys[i]; } } } }
public async Task <IEnumerable <PlayerProgress> > Lookup(PlayerProgressLookup lookup) { Game game = null; Profile profile = null; var searchRequest = new BsonDocument { }; if (lookup.objectId != null) { searchRequest["_id"] = new BsonObjectId(new ObjectId(lookup.objectId)); } else { profile = (await profileRepository.Lookup(lookup.profileLookup)).FirstOrDefault(); game = (await gameRepository.Lookup(lookup.gameLookup)).FirstOrDefault(); searchRequest["gameid"] = game.Id; searchRequest["profileid"] = profile.Id; if (lookup.pageKey != null) { searchRequest["pageKey"] = lookup.pageKey; } } var return_value = new List <PlayerProgress>(); var results = (await collection.FindAsync(searchRequest)).ToList(); foreach (var result in results) { var progress = new PlayerProgress(); if (!result["profileid"].IsBsonNull && result["profileid"].AsInt32 != 0) { var profileLookup = new ProfileLookup(); profileLookup.id = result["profileid"].AsInt32; profile = (await profileRepository.Lookup(profileLookup)).FirstOrDefault(); } else { profile = null; } if (!result["gameid"].IsBsonNull || result["gameid"].AsInt32 != 0) { var gameLookup = new GameLookup(); gameLookup.id = result["gameid"].AsInt32; game = (await gameRepository.Lookup(gameLookup)).FirstOrDefault(); } else { game = null; } progress.game = game; progress.profile = profile; progress.data = Newtonsoft.Json.JsonConvert.DeserializeObject(result.GetValue("data").ToJson()); //stupid fix for weird bson deserialization if (result.Contains("modified")) { progress.modified = (decimal)result["modified"].AsDouble; } return_value.Add(progress); } return(return_value); }