示例#1
0
        void ValidateGameInfo_Handler(Task t)
        {
            HTask task = (HTask)t;

            object[] args       = (object[])t.Args;
            string   authString = (string)args[0];
            string   hash       = (string)args[1];


            // Validate auth string
            AuthStringManager.AuthAccountInfo aai = _server.AuthManager.FindAccount(authString);
            if (aai == null)
            {
                // This account isnt in the cache, need to go fetch from global server
                task.Client.PendingAuthTask = task;
                _server.GlobalServer.FetchAuthString(authString, task.Client.SessionKey);
                return;
            }

            ValidateGameInfoArgs gia = new ValidateGameInfoArgs(authString, hash);

            task.Client.AccountId    = aai.AccountID;
            task.Client.HardCurrency = aai.HardCurrency;

            // Fetch game data
            string sql = string.Format("SELECT * FROM game_data WHERE account_id={0};", task.Client.AccountId);

            AddDBQuery(sql, new HTask(HTask.HTaskType.ValidateGameInfo_GameDataProcess, task.Client, gia));

            // Fetch floor data
            sql = string.Format("SELECT * FROM floor_records WHERE account_id={0};", task.Client.AccountId);
            AddDBQuery(sql, new HTask(HTask.HTaskType.ValidateGameInfo_FloorInfoProcess, task.Client, gia));
        }
示例#2
0
        void ProcessValidateGameInfo(ValidateGameInfoArgs gia, HClient client)
        {
            byte[] hash       = gia.GameInfo.GenerateHash();
            string serverHash = Encoding.UTF8.GetString(hash);
            string clientHash = gia.Hash;

            AuthStringManager.AuthAccountInfo aai = _server.AuthManager.FindAccount(gia.AuthString);
            gia.GameInfo.AuthString   = gia.AuthString;
            gia.GameInfo.DisplayName  = aai.DisplayName;
            gia.GameInfo.HardCurrency = aai.HardCurrency;
            gia.GameInfo.VipData      = VipData.Create(aai.Vip);
            client.SendValidateGameInfoResponse(aai.AccountID, aai.HardCurrency, aai.Vip, serverHash == clientHash, gia.GameInfo);
        }
示例#3
0
        void ValidateGameInfo_FloorInfoProcess_Handler(Task t)
        {
            Dictionary <int, List <TowerFloorRecord> > towerData = new Dictionary <int, List <TowerFloorRecord> >();

            foreach (object[] row in t.Query.Rows)
            {
                // 0: record_id
                // 1: account_id
                // 2: tower
                // 3: floor
                // 4: best_time
                // 5: friend_rank
                // 6: global_rank

                TowerFloorRecord record = new TowerFloorRecord();
                int tower = (int)row[2];

                if (!towerData.ContainsKey(tower))
                {
                    towerData[tower] = new List <TowerFloorRecord>();
                }

                record.Floor       = (int)row[3];
                record.BestTime    = (int)row[4];
                record.RankFriends = (int)row[5];
                record.RankGlobal  = (int)row[6];
                towerData[tower].Add(record);
            }

            TowerData[] td = new TowerData[6];
            for (int i = 0; i < td.Length; i++)
            {
                td[i]        = new TowerData();
                td[i].Tower  = i;
                td[i].Floors = towerData.ContainsKey(i) ? towerData[i].ToArray() : null;
            }

            HTask task = (HTask)t;

            object[]             args = (object[])t.Args;
            ValidateGameInfoArgs gia  = (ValidateGameInfoArgs)args[0];

            gia.GameInfo.TowerData = td;

            if (gia.RequestFinished)
            {
                ProcessValidateGameInfo(gia, task.Client);
            }
        }
示例#4
0
        void ValidateGameInfo_GameDataProcess_Handler(Task t)
        {
            HTask task = (HTask)t;

            object[]             args = (object[])t.Args;
            ValidateGameInfoArgs gia  = (ValidateGameInfoArgs)args[0];

            if (t.Query.Rows.Count > 0)
            {
                gia.GameInfo.GameData = ReadGameData(t.Query);
            }
            else
            {
                // Put this record in the database
                string sql = string.Format("INSERT INTO game_data SET account_id={0},tower0=1;", task.Client.AccountId);
                t.Type = -1;
                AddDBQuery(sql, t);

                // Also give this user 100 coins
                SpendCoinsArgs scargs = new SpendCoinsArgs();
                scargs.AuthToken = gia.AuthString;
                scargs.Coins     = -100;
                scargs.SpendOn   = 0;
                AddTask(new HTask(HTask.HTaskType.SpendCoins, task.Client, scargs));
                AuthStringManager.AuthAccountInfo aai = _server.AuthManager.FindAccount(gia.AuthString);
                aai.HardCurrency += 100;

                // Setup the default info
                gia.GameInfo.GameData                = new GameDataArgs();
                gia.GameInfo.GameData.TowerFloors    = new int[6];
                gia.GameInfo.GameData.TowerFloors[0] = 1;
            }

            if (gia.RequestFinished)
            {
                ProcessValidateGameInfo(gia, task.Client);
            }
        }