Esempio n. 1
0
        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);
        }