Ejemplo n.º 1
0
        public bool RegisterPlayer(string playerId, int difficulty)
        {
            var playerData = PlayerDataDatabase.GetPlayerData(playerId);

            Debug.Assert(playerData != null, "player data is null : " + playerId);

            var userData = UserDataDatabase.GetUserData(playerId);

            Debug.Assert(userData != null, "user data is null : " + playerId);

            return(RegisterPlayer(new RegData(playerData, difficulty, userData.BanList, Stopwatch.StartNew())));
        }
Ejemplo n.º 2
0
        public TestModule(ITokenizer tokenizer)
            : base("/test")
        {
            Post["/"] = parameters =>
            {
                return("default");
            };

            Get["/simulation"] = parameters =>
            {
                ContentsPrepare.Init();

                Player[] player = { new Player(), new Player(), new Player() };

                var data = PlayerDataDatabase.GetPlayerData("102");
                if (data != null)
                {
                    player[0].LoadPlayer(data);
                }

                data = PlayerDataDatabase.GetPlayerData("103");
                if (data != null)
                {
                    player[1].LoadPlayer(data);
                }

                data = PlayerDataDatabase.GetPlayerData("104");
                if (data != null)
                {
                    player[2].LoadPlayer(data);
                }

                Party users = new Party(PartyType.PLAYER, 10);
                foreach (Player p in player)
                {
                    users.AddCharacter(p);
                }

                DungeonMaster newMaster = new DungeonMaster();
                newMaster.Init(60, 4, users);

                return("turn : " + newMaster.Start());
            };
        }
        public bool DeregisterPlayer(string playerId)
        {
            var playerData = PlayerDataDatabase.GetPlayerData(playerId);

            Debug.Assert(playerData != null, "player data is null : " + playerId);

            int lev = playerData.stats[(int)StatType.Lev];

            if (workerList.Count - 1 < lev || workerList[lev] == null)
            {
                return(false);
            }

            var newDic = new Dictionary <string, object>();

            newDic.Add("playerId", playerId);
            TaskManager.SendToWorker(workerList[lev], "DEREG", newDic);
            return(true);
        }
        public static void Simulation(string src)
        {
            var data = JsonMapper.ToObject <Dictionary <string, object> >(src);

            Party party = new Party(PartyType.PLAYER, (int)data["level"]);

            for (int i = 0; i < 4; ++i)
            {
                string playerId = (string)data["char_" + i];

                var playerData = PlayerDataDatabase.GetPlayerData(playerId);
                Debug.Assert(playerData != null, "player data is null : " + playerId);
                // Console.WriteLine( playerData.name + " count : " + playerData.equipments.Count );

                Player newPlayer = new Player();
                newPlayer.LoadPlayer(playerData);

                party.AddCharacter(newPlayer);
            }

            Simulation(party);
        }
Ejemplo n.º 5
0
        public CharacterModule(ITokenizer tokenizer)
            : base("/character")
        {
            // 시뮬레이션 결과 요청
            Get["/simulation_result"] = parameters =>
            {
                // 일단 해당 유저의 id를 확인하고, 시뮬레이션 결과가 있는지 확인한다
                this.RequiresAuthentication();

                var resultTable = ResultTableDatabase.GetResultTable(this.Context.CurrentUser.UserName);

                if (resultTable == null || resultTable.UnreadId == -1)
                {
                    return("nothing");
                }

                // 해당 시뮬레이션 데이터를 가져온다
                var result = SimulationResultDatabase.GetSimulationResult(resultTable.UnreadId);

                if (resultTable == null)
                {
                    return("error");     // 조심해! 이거 500이나 뭐 그런 걸로 핸들링할까?
                }
                // 시뮬레이션 결과 베이스 데이터를 구성한다
                GameResultBaseData baseData = new GameResultBaseData();
                baseData.mapSize    = result.MapSize;
                baseData.randomSeed = result.Seed;
                baseData.partyLevel = result.PartyLevel;

                result.PlayerList.ForEach(each => baseData.playerList.Add(each));

                // 읽은 애들은 삭제하자
                // 일단은 놔둠
                resultTable.ReadId.Add(resultTable.UnreadId);
                resultTable.UnreadId = -1;   // default value

                Debug.Assert(ResultTableDatabase.SetResultTable(resultTable));

                // 전송한다
                return(JsonConvert.SerializeObject(baseData));;
            };

            Get["/update"] = parameters =>
            {
                // 캐릭터의 최신 정보 받기

                /*
                 * Console.WriteLine("update");
                 * foreach ( var each in this.Context.Request.Headers )
                 * {
                 *  Console.WriteLine( each.Key + ": " );
                 *  foreach ( var item in each.Value )
                 *      Console.WriteLine( item );
                 * }
                 */
                // 일단 해당 유저의 id를 확인하고
                this.RequiresAuthentication();

                PlayerData playerData = PlayerDataDatabase.GetPlayerData(this.Context.CurrentUser.UserName);
                UserData   userData   = UserDataDatabase.GetUserData(this.Context.CurrentUser.UserName);

                return(JsonConvert.SerializeObject(new ClientPlayerData(playerData, userData)));;
            };

            Get["/levelup"] = parameters =>
            {
                try
                {
                    // 일단 해당 유저의 id를 확인하고
                    this.RequiresAuthentication();

                    PlayerData playerData = PlayerDataDatabase.GetPlayerData(this.Context.CurrentUser.UserName);

                    Debug.Assert(playerData != null);

                    Player player = new Player();
                    player.LoadPlayer(playerData);

                    if (player.LevelUp(1))
                    {
                        // update playerData
                        playerData.UpdateFromPlayer(player);

                        Debug.Assert(PlayerDataDatabase.SetPlayerData(playerData));

                        return("levelup");
                    }

                    return("need more exp");
                }
                catch (Exception e)
                {
                    Console.WriteLine(e);
                }

                return("fail");
            };

            Post["/increase_stat"] = parameters =>
            {
                // 일단 해당 유저의 id를 확인하고
                this.RequiresAuthentication();

                PlayerData playerData = PlayerDataDatabase.GetPlayerData(this.Context.CurrentUser.UserName);

                Player player = new Player();
                player.LoadPlayer(playerData);

                ushort[] request = JsonConvert.DeserializeObject <ushort[]>(this.Request.Form.stat);
                List <Tuple <StatType, ushort> > requestStats = new List <Tuple <StatType, ushort> >();

                for (int i = (int)StatType.Str; i < (int)StatType.Mov; ++i)
                {
                    if (request[i] != 0)
                    {
                        requestStats.Add(new Tuple <StatType, ushort>((StatType)i, request[i]));
                    }
                }

                if (player.SetBonusStats(requestStats))
                {
                    // update playerData
                    playerData.UpdateFromPlayer(player);

                    Debug.Assert(PlayerDataDatabase.SetPlayerData(playerData));

                    return("stats changed");
                }

                return("failed");
            };

            Get["/rank"] = parameters =>
            {
                // 일단 해당 유저의 id를 확인하고
                this.RequiresAuthentication();

                long rank = RedisManager.GetRank(this.Context.CurrentUser.UserName);

                return(rank);
            };
        }
Ejemplo n.º 6
0
        public UserModule(ITokenizer tokenizer)
            : base("/user")
        {
            // 가입
            // 이메일, 비밀번호,
            Post["/signup"] = parameters =>
            {
                string userId     = Request.Form.userId;
                string password   = Request.Form.password;
                string playerName = Request.Form.playername;

                // if ( AccountInfoDatabase.SetAccountInfo( new AccountInfo( userId, password ) ) )
                var task = PostgresqlManager.SetAccountInfo(userId, password);
                task.Wait();

                Console.WriteLine("finished PostgreSQL job");

                // if (task.Result)
                {
                    // user identity
                    // UserIdentityDatabase.SetUserIdentity( new UserIdentity { UserName = userId, Claims = new List<string> { "user", } } );

                    // user data
                    bool result = UserDataDatabase.SetUserData(new UserData {
                        UserId    = userId,
                        Gold      = 0,
                        Inventory = new List <uint> {
                        },
                        Token     = new List <ItemToken> {
                        },
                        BanList   = new List <string> {
                        },
                    });
                    if (!result)
                    {
                        return("fail");
                    }
                    Console.WriteLine("created user data");

                    // player data
                    result = PlayerDataDatabase.SetPlayerData(new PlayerData
                    {
                        pId    = userId,
                        name   = playerName,
                        exp    = 0,
                        stats  = new ushort[] { 1, 5, 5, 5, 5, 5, 5, 5, },
                        skills = new List <SkillId> {
                            SkillId.Punch,
                        },
                        consumables = new List <ItemCode> {
                            ItemCode.HpPotion_S,
                        },
                        equipments = new List <ItemCode> {
                            ItemCode.Sword_Test,
                        },
                        battleStyle = BattleStyle.AGGRESSIVE,
                    });
                    if (!result)
                    {
                        return("fail");
                    }
                    Console.WriteLine("created player data");

                    // result table
                    result = ResultTableDatabase.SetResultTable(new ResultTable
                    {
                        PlayerId = userId,
                        ReadId   = new List <long> {
                        },
                        UnreadId = -1
                    });
                    if (!result)
                    {
                        return("fail");
                    }
                    Console.WriteLine("created result table");

                    // ranking list
                    RedisManager.RegisterPlayerRank(userId);

                    return("success");
                }
            };

            // 로그인
            // 이메일과 비밀번호를 전송받아서
            // 저장된 값과 비교해보고
            // 같으면 쿠키 발급
            Post["/login"] = parameters =>
            {
                var userName = (string)this.Request.Form.UserName;
                var password = (string)this.Request.Form.Password;

                // var userIdentity = UserIdentityDatabase.ValidateUser( userName, password );
                var task = PostgresqlManager.ValidateUser(userName, password);
                task.Wait();
                var userIdentity = task.Result;

                if (userIdentity == null)
                {
                    return(HttpStatusCode.Unauthorized);
                }

                var token = tokenizer.Tokenize(userIdentity, Context);

                Console.WriteLine(userName + " : " + token);

                return(new
                {
                    Token = token,
                });
            };

            // 탈퇴
            // 는 없다.

            // 로그인 상태 확인
            Get["/valid_session"] = parameters =>
            {
                this.RequiresAuthentication();

                return("valid");
            };
        }
Ejemplo n.º 7
0
        public AuthModule(ITokenizer tokenizer)
            : base("/auth")
        {
            /*
             * Get["/init"] = parameters =>
             * {
             *  var client = CouchbaseManager.Client;
             *
             *  // account
             *  var result = AccountInfoDatabase.SetAccountInfo(new AccountInfo("wooq", "next!!@@##$$"));
             *
             *  if ( result )
             *      result = AccountInfoDatabase.SetAccountInfo(new AccountInfo("quxn6", "next!!@@##$$"));
             *
             *  if (result)
             *      result = AccountInfoDatabase.SetAccountInfo(new AccountInfo("yksera", "next!!@@##$$"));
             *
             *  if ( result )
             *      result = AccountInfoDatabase.SetAccountInfo( new AccountInfo( "sm9", "next!!@@##$$" ) );
             *
             *  // user identity
             *  if (result)
             *      result = UserIdentityDatabase.SetUserIdentity(new UserIdentity { UserName = "******", Claims = new List<string> { "admin", } });
             *
             *  if (result)
             *      result = UserIdentityDatabase.SetUserIdentity(new UserIdentity { UserName = "******", Claims = new List<string> { "admin", } });
             *
             *  if (result)
             *      result = UserIdentityDatabase.SetUserIdentity(new UserIdentity { UserName = "******", Claims = new List<string> { "admin", } });
             *
             *  if ( result )
             *      result = UserIdentityDatabase.SetUserIdentity( new UserIdentity { UserName = "******", Claims = new List<string> { "admin", } } );
             *
             *  // user data
             *  if ( result )
             *      result = UserDataDatabase.SetUserData( new UserData
             *      {
             *          UserId = "wooq",
             *          Gold = 0,
             *          Inventory = new List<uint> { },
             *          Token = new List<ItemToken> { },
             *          BanList = new List<string> { },
             *      } );
             *
             *  if ( result )
             *      result = UserDataDatabase.SetUserData( new UserData
             *      {
             *          UserId = "quxn6",
             *          Gold = 0,
             *          Inventory = new List<uint> { },
             *          Token = new List<ItemToken> { },
             *          BanList = new List<string> { },
             *      } );
             *
             *  if ( result )
             *      result = UserDataDatabase.SetUserData( new UserData
             *      {
             *          UserId = "yksera",
             *          Gold = 0,
             *          Inventory = new List<uint> { },
             *          Token = new List<ItemToken> { },
             *          BanList = new List<string> { },
             *      } );
             *
             *  if ( result )
             *      result = UserDataDatabase.SetUserData( new UserData
             *      {
             *          UserId = "sm9",
             *          Gold = 0,
             *          Inventory = new List<uint> { },
             *          Token = new List<ItemToken> { },
             *          BanList = new List<string> { },
             *      } );
             *
             *  // player data
             *  if (result)
             *      result = PlayerDataDatabase.SetPlayerData( new PlayerData
             *      {
             *          pId = "wooq",
             *          name = "wooq",
             *          exp = 4,
             *          stats = new ushort[] { 0, 1, 5, 5, 5, 5, 5, 5, 5, },
             *          skills = new List<SkillId> { SkillId.Punch, },
             *          equipments = new List<ItemCode> { },
             *          consumables = new List<ItemCode> { },
             *          battleStyle = BattleStyle.AGGRESSIVE,
             *      } );
             *
             *  if ( result )
             *      result = ResultTableDatabase.SetResultTable( new ResultTable
             *      {
             *          PlayerId = "wooq",
             *          ReadId = new List<long> { },
             *          UnreadId = -1
             *      } );
             *
             *  if (result)
             *      result = PlayerDataDatabase.SetPlayerData( new PlayerData
             *      {
             *          pId = "quxn6",
             *          name = "quxn6",
             *          exp = 4,
             *          stats = new ushort[] { 0, 3, 5, 5, 5, 15, 5, 5, 5, },
             *          skills = new List<SkillId> { SkillId.Punch, SkillId.MagicArrow, SkillId.Heal, },
             *          equipments = new List<ItemCode> { },
             *          consumables = new List<ItemCode> { ItemCode.MpPotion_S },
             *          battleStyle = BattleStyle.DEFENSIVE,
             *      } );
             *
             *  if ( result )
             *      result = ResultTableDatabase.SetResultTable( new ResultTable
             *      {
             *          PlayerId = "quxn6",
             *          ReadId = new List<long> { },
             *          UnreadId = -1
             *      } );
             *
             *  if (result)
             *      result = PlayerDataDatabase.SetPlayerData( new PlayerData
             *      {
             *          pId = "yksera",
             *          name = "yksera",
             *          exp = 4,
             *          stats = new ushort[] { 0, 3, 15, 5, 5, 5, 5, 5, 5, },
             *          skills = new List<SkillId> { SkillId.Slash, },
             *          equipments = new List<ItemCode> { ItemCode.Sword_Test, },
             *          consumables = new List<ItemCode> { ItemCode.HpPotion_S, ItemCode.HpPotion_S, },
             *          battleStyle = BattleStyle.AGGRESSIVE,
             *      } );
             *
             *  if ( result )
             *      result = ResultTableDatabase.SetResultTable( new ResultTable
             *      {
             *          PlayerId = "yksera",
             *          ReadId = new List<long> { },
             *          UnreadId = -1
             *      } );
             *
             *  if ( result )
             *      result = PlayerDataDatabase.SetPlayerData( new PlayerData
             *      {
             *          pId = "sm9",
             *          name = "sm9",
             *          exp = 0,
             *          stats = new ushort[] { 0, 3, 10, 10, 5, 5, 5, 5, 5, },
             *          skills = new List<SkillId> { SkillId.Punch, SkillId.Heal, },
             *          equipments = new List<ItemCode> { },
             *          consumables = new List<ItemCode> { ItemCode.MpPotion_S, },
             *          battleStyle = BattleStyle.AGGRESSIVE,
             *      } );
             *
             *  if ( result )
             *      result = ResultTableDatabase.SetResultTable( new ResultTable
             *      {
             *          PlayerId = "sm9",
             *          ReadId = new List<long> { },
             *          UnreadId = -1
             *      } );
             *
             *  if (result)
             *      return "done!";
             *
             *  return "FAIL";
             * };
             */

            Get["/validation"] = _ =>
            {
                this.RequiresAuthentication();
                return("Yay! You are authenticated!");
            };

            Get["/admin"] = _ =>
            {
                this.RequiresAuthentication();
                this.RequiresClaims(new[] { "admin" });

                var playerData = PlayerDataDatabase.GetPlayerData(this.Context.CurrentUser.UserName);

                Debug.WriteLine("Character Info");
                Debug.WriteLine("name : " + playerData.name + " / Id : " + playerData.pId);
                Debug.WriteLine("Lev : " + playerData.stats[(int)StatType.Lev] + " / Exp : " + playerData.exp);

                return("Yay! You are authorized!");
            };
        }
        public static void Simulation(Party party)
        {
            var runningTime = Stopwatch.StartNew();

            Debug.WriteLine("start to simulation");
            Console.WriteLine("start to simulation");

            party.characters.ForEach(each => Console.WriteLine("equip : " + each.equipments.Count));

            SimulationResult result = new SimulationResult();

            long currentIdx = Interlocked.Increment(ref resultIdx);

            // over flow 확인하고 제어 할 것

            result.Id         = currentIdx;
            result.PartyLevel = party.partyLevel;
            result.Seed       = random.Next();
            result.MapSize    = 60;

            // result에 사용될 사용자 정보 기록
            result.PlayerList = new List <PlayerData>();
            party.characters.ForEach(each =>
            {
                var player = (Player)each;
                result.PlayerList.Add(player.ConvertToPlayerData());
            });

            Console.WriteLine("party level : " + party.partyLevel);

            // simulation!!!!
            DungeonMaster newMaster = new DungeonMaster();

            newMaster.Init(result.MapSize, result.Seed, party);
            var res = newMaster.Start();

            Console.WriteLine("turn : " + res);
            Console.WriteLine("looted gold : " + newMaster.record.lootedGold);
            Console.WriteLine("looted exp : " + newMaster.record.lootedExp);

            // save the result data in DB
            result.CheckedPlayer = new List <ulong>();
            Debug.Assert(SimulationResultDatabase.SetSimulationResult(result));

            party.characters.ForEach(each =>
            {
                string id = ((Player)each).pId;

                // update player data
                var playerData = PlayerDataDatabase.GetPlayerData(id);
                var userData   = UserDataDatabase.GetUserData(id);

                // 크게 할 일은 경험치 추가, 골드 추가, 아이템토큰 추가
                userData.Gold  += newMaster.record.lootedGold;
                playerData.exp += newMaster.record.lootedExp;
                newMaster.record.lootedItems.ForEach(eachItem => { userData.Token.Add((ItemToken)eachItem); });

                Debug.Assert(UserDataDatabase.SetUserData(userData));
                Debug.Assert(PlayerDataDatabase.SetPlayerData(playerData));

                // update result table
                var resultTable = ResultTableDatabase.GetResultTable(id);
                Debug.Assert(resultTable.UnreadId == -1, "unread result remains");

                resultTable.UnreadId = currentIdx;
                Debug.Assert(ResultTableDatabase.SetResultTable(resultTable), "fail to save the result table - ID : " + resultTable.PlayerId);

                // update rank
                RedisManager.UpdateRank(playerData.pId, playerData.GetScore());
            });

            Debug.WriteLine("simulation ended");
            Console.WriteLine("simulation ended");

            LogRecord.Write("[Simulation : " + runningTime.ElapsedMilliseconds + " ms]");
        }