void CreateRooms(DatabaseService.DatabaseLink dbLink, string gameName) { using (var reader = Program.dbHelper.GetGameInfo(dbLink, gameName)) { if (reader == null) { return; } if (!reader.Read()) { return; } GameInfo gameInfo = new GameInfo(); gameInfo.name = gameName; gameInfo.dllFile = reader.GetStringSafe("dll_file"); gameInfo.baseDir = string.Format(@"{0}Games\{1}", AppDomain.CurrentDomain.BaseDirectory, gameInfo.dllFile); var assembly = Assembly.LoadFile(string.Format(@"{0}\{1}.dll", gameInfo.baseDir, gameInfo.dllFile)); gameInfo.gameLogicType = assembly.GetType("Game.GameLogic"); gameInfo.methodLoadConfigs = gameInfo.gameLogicType.GetMethod("LoadConfigs", BindingFlags.Static | BindingFlags.Public); gameInfo.jConfigs = (JObject)gameInfo.methodLoadConfigs.Invoke(null, new object[] { gameInfo.baseDir }); gameInfo.roomCount = reader.GetInt32Safe("room_count"); gameInfo.tableCount = reader.GetInt32Safe("table_count"); gameInfo.seatCount = reader.GetInt32Safe("seat_count"); int gradeCount = reader.GetInt32Safe("grade_count"); bool isNeedUpdate = reader.GetBoolSafe("need_update"); gameInfo.roomGrades = new RoomGrade[gradeCount]; for (int i = 0; i < gradeCount; i++) { RoomGrade roomGrade = new RoomGrade(); roomGrade.grade = i; roomGrade.moneyLimit = reader.GetInt64Safe("grade" + i + "_money"); for (int j = 0; j < gameInfo.roomCount; j++) { Room room = new Room(gameInfo, roomGrade.grade, idToTableDict, isNeedUpdate); roomGrade.rooms.Add(room); } gameInfo.roomGrades[i] = roomGrade; } gameInfos[gameName] = gameInfo; } }
void OnReqGetGameTable(int workerIndex, GameServerSession session, string cmd, JObject jObjRecv) { string show_id = jObjRecv["show_id"].ToString(); string token = jObjRecv["token"].ToString(); string game_name = jObjRecv["game_name"].ToString(); int grade = int.Parse(jObjRecv["grade"].ToString()); //参数验证 if (show_id.Trim().Length == 0) { return; } if (token.Trim().Length == 0) { return; } if (game_name.Length == 0) { return; } var dbLink = Program.dbSvc.GetLink(workerIndex); if (!CheckToken(dbLink, show_id, token)) { Program.server.SendError(session, cmd, "token非法或已过期"); return; } GameInfo gameInfo = GetGameInfo(game_name); if (gameInfo == null) { Program.server.SendError(session, cmd, "未找到该游戏"); return; } if (grade < 0 || grade >= gameInfo.roomGrades.Length) { Program.server.SendError(session, cmd, "未找到该场次"); return; } RoomGrade roomGrade = gameInfo.roomGrades[grade]; long money = Program.dbHelper.GetUserMoney(dbLink, show_id); if (money < roomGrade.moneyLimit) { Program.server.SendError(session, cmd, "入场金币限制"); return; } foreach (var room in roomGrade.rooms) { Table table = room.AllotTable(); //该房间全满了 if (table == null) { continue; } session.TableId = table.id; JObject jObj = new JObject(); jObj["cmd"] = cmd; jObj["ret_code"] = 0; jObj["table_id"] = table.id; Program.server.Send(session, jObj); return; } Program.server.SendError(session, cmd, "未找到合适的桌子"); }