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)); }
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); }
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); } }
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); } }