Пример #1
0
        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;
            }
        }
Пример #2
0
        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, "未找到合适的桌子");
        }