Beispiel #1
0
        /// <summary>
        /// 从数据库恢复
        /// </summary>
        /// <param name="chart">条件</param>
        /// <param name="value">值</param>
        public static void RecoverFromDb(string chart, int value = -2)
        {
            var cacheSet = new GameDataCacheSet <tb_User>();

            if (cacheSet.Count == 0)
            {
                SchemaTable    schema   = EntitySchemaSet.Get <tb_User>();
                DbBaseProvider provider = DbConnectionProvider.CreateDbProvider(schema);
                DbDataFilter   filter   = new DbDataFilter(0);
                filter.Condition = provider.FormatFilterParam("isRobot", chart);
                filter.Parameters.Add("isRobot", value);
                cacheSet.TryRecoverFromDb(filter);//从数据库中恢复数据
            }
        }
Beispiel #2
0
        /// <summary>
        /// 获取我的战绩列表
        /// </summary>
        /// <returns></returns>
        public static List <CombatGainInfoSD> GetCombatGainList(int _userid)
        {
            List <CombatGainInfoSD> _CombatGainList = new List <CombatGainInfoSD>();
            //取指定userid最近一天的一次房间结算OVER的记录
            var          cacheSettable = new ShareCacheStruct <tb_TableMoneyLog>();
            var          cacheRank     = new GameDataCacheSet <tb_Rank>();
            DbDataFilter filter1       = new DbDataFilter();

            cacheRank.TryRecoverFromDb(filter1);
            tb_Rank rank = cacheRank.FindKey(_userid.ToString());

            if (rank == null || !rank.records.Any())
            {
                return(_CombatGainList);
            }
            List <Record> records = rank.records.OrderByDescending(w => w.CreateDate).Take(10).ToList();

            foreach (var record in records)
            {
                CombatGainInfoSD _tempGain = new CombatGainInfoSD();
                _tempGain.tablenum     = record.MatchCode;
                _tempGain._starttime   = record.CreateDate.ToString("yyyy-MM-dd HH:mm:ss");
                _tempGain._tableRecord = new List <CombatTableRecordSD>();
                //找到同桌的人
                var          cacheSettable2 = new ShareCacheStruct <tb_TableMoneyLog>();
                DbDataFilter filter         = new DbDataFilter();
                filter.Condition = "MatchCode=@MatchCode";
                filter.Parameters.Add("MatchCode", record.MatchCode);
                cacheSettable2.TryRecoverFromDb(filter);
                List <tb_TableMoneyLog> tablemoneylog2list = cacheSettable2.FindAll((r) => { return(r.MatchCode == record.MatchCode && r._isover); });

                if (tablemoneylog2list.Any())
                {
                    foreach (var moneylog2 in tablemoneylog2list)
                    {
                        CombatTableRecordSD _combatTable = new CombatTableRecordSD();
                        _combatTable.userid     = moneylog2.UserID;
                        _combatTable._username  = tb_UserEx.GetUserNameByUserID(moneylog2.UserID);
                        _combatTable._winorlost = (int)moneylog2.AddorReduceMoney;
                        _tempGain._tableRecord.Add(_combatTable);
                    }
                }
                _CombatGainList.Add(_tempGain);
                //_lastCount++;
                //if (_lastCount >= 10) break;//暂时只取10条
            }

            return(_CombatGainList);
        }
Beispiel #3
0
        /// <summary>
        /// 尝试从DB中恢复数据
        /// </summary>
        /// <param name="filter"></param>
        /// <param name="personalId"></param>
        /// <returns></returns>
        public bool TryRecoverFromDb(DbDataFilter filter, string personalId = "")
        {
            List <T>          dataList;
            string            redisKey     = CreateRedisKey(personalId);
            TransReceiveParam receiveParam = new TransReceiveParam(redisKey);

            receiveParam.Schema   = SchemaTable();
            receiveParam.DbFilter = filter;
            receiveParam.Capacity = receiveParam.Schema.Capacity;
            if (DataContainer.TryRecoverFromDb(receiveParam, out dataList))
            {
                return(InitCache(dataList, receiveParam.Schema.PeriodTime));
            }
            return(false);
        }
        /// <summary>
        /// 初始化机哭人队列,MySQLDAL.Model.tb_User 数据
        /// </summary>
        public static void InitiRobotList()
        {
            _robotUserList = new List <tb_User>();

            var cacheSet = new GameDataCacheSet <tb_User>();

            cacheSet.ReLoad();
            if (cacheSet.Count == 0)
            {
                SchemaTable    schema   = EntitySchemaSet.Get <tb_User>();
                DbBaseProvider provider = DbConnectionProvider.CreateDbProvider(schema);
                DbDataFilter   filter   = new DbDataFilter(0);
                filter.Condition = provider.FormatFilterParam("isRobot", "=");
                filter.Parameters.Add("isRobot", 1);

                cacheSet.TryRecoverFromDb(filter);//从数据库中恢复数据
            }
            var            robotIdList = tb_UserEx.GetUserIdListByRobot(1);
            List <tb_User> _userList   = new List <tb_User>(); // List<tb_User> _userList = cacheSet.FindAll();

            if (robotIdList.Any())
            {
                robotIdList.ForEach(t =>
                {
                    tb_User user;
                    cacheSet.TryFindKey(t.ToString(), out user);
                    if (user != null)
                    {
                        _userList.Add(user);
                    }
                });
            }

            //// List<tb_User> _userList = cacheSet.FindAll();
            if (_userList == null || _userList.Count == 0)
            {
                ErrorRecord.Record(" tb_user 中没有机器人,201610231608");
                return;
            }
            //SetWebChartName();
            // var setName = SetWebChartName(_userList);
            // var temp = SetRobotWebChartImg(_userList);
            // ModifyFileName();
            // cacheSet.AddOrUpdate(setName);
            //cacheSet.Update();
            _robotUserList.AddRange(_userList);
        }
Beispiel #5
0
        public static tb_User GetFromCachebyUserID(int UserID)
        {
            var     cacheSet  = new PersonalCacheStruct <tb_User>();
            tb_User _tempuser = cacheSet.Find(UserID.ToString(), t => t.UserID == UserID);

            if (cacheSet.Count == 0 || _tempuser == null)
            {
                SchemaTable    schema   = EntitySchemaSet.Get <tb_User>();
                DbBaseProvider provider = DbConnectionProvider.CreateDbProvider(schema);
                DbDataFilter   filter   = new DbDataFilter(0);
                filter.Condition = provider.FormatFilterParam("UserId");
                filter.Parameters.Add("UserId", UserID);
                cacheSet.TryRecoverFromDb(filter);//从数据库中恢复数据
            }
            _tempuser = cacheSet.Find(UserID.ToString(), t => t.UserID == UserID);

            return(_tempuser);
        }
Beispiel #6
0
        /// <summary>
        /// 尝试从DB中恢复数据
        /// </summary>
        /// <param name="filter"></param>
        /// <param name="personalId"></param>
        /// <returns></returns>
        public bool TryRecoverFromDb(DbDataFilter filter, string personalId = "")
        {
            List <T> dataList;

            if (!string.IsNullOrEmpty(personalId))
            {
                personalId = AbstractEntity.EncodeKeyCode(personalId);
            }
            string            redisKey     = CreateRedisKey(personalId);
            TransReceiveParam receiveParam = new TransReceiveParam(redisKey);

            receiveParam.Schema   = SchemaTable();
            receiveParam.DbFilter = filter;
            if (DataContainer.TryRecoverFromDb(receiveParam, out dataList))
            {
                return(InitCache(dataList, receiveParam.Schema.PeriodTime, true));
            }
            return(false);
        }
Beispiel #7
0
        /// <summary>
        /// 系统加载单服配置
        /// </summary>
        public static void LoadGlobalData()
        {
            Console.WriteLine("系统加载单服配置开始...");
            Stopwatch stopwatch = new Stopwatch();

            stopwatch.Start();
            int capacity = int.MaxValue;
            //todo Load
            var dbFilter = new DbDataFilter(capacity);

            new ShareCacheStruct <UserFriends>().AutoLoad(dbFilter);

            stopwatch.Stop();
            //AddTestFriends("1380026");
            //new ShareCacheStruct<UserFriends>().AddOrUpdate(user);
            List <UserFriends> friendsList = new ShareCacheStruct <UserFriends>().FindAll();

            Console.WriteLine("系统加载单服配置所需时间:{0}ms   加载好友数{1}", stopwatch.Elapsed.TotalMilliseconds, friendsList.Count);
        }
Beispiel #8
0
        public static tb_Notice GetLastNotice()
        {
            var notice        = new tb_Notice();
            var cacheSettable = new ShareCacheStruct <tb_Notice>();

            cacheSettable.ReLoad();

            notice = cacheSettable.Find(w => w.isStart == 1);
            if (notice == null)
            {
                SchemaTable    schema   = EntitySchemaSet.Get <tb_Notice>();
                DbBaseProvider provider = DbConnectionProvider.CreateDbProvider(schema);
                DbDataFilter   filter   = new DbDataFilter(0);
                filter.Condition = provider.FormatFilterParam("isStart");
                filter.Parameters.Add("isStart", 1);
                cacheSettable.TryRecoverFromDb(filter);//从数据库中恢复数据
                notice = cacheSettable.Find(w => w.isStart == 1);
            }
            return(notice);
        }
Beispiel #9
0
        /// <summary>
        /// 处理加载数据参数
        /// </summary>
        /// <param name="personalId"></param>
        /// <returns></returns>
        protected bool ProcessLoadParam(string personalId)
        {
            string            redisKey     = CreateRedisKey(personalId);
            TransReceiveParam receiveParam = new TransReceiveParam(redisKey);

            receiveParam.Schema = SchemaTable();
            string paramName  = receiveParam.Schema.PersonalName;
            int    periodTime = receiveParam.Schema.PeriodTime;
            int    maxCount   = receiveParam.Schema.Capacity;
            var    provider   = DbConnectionProvider.CreateDbProvider(receiveParam.Schema);

            if (provider != null)
            {
                var filter = new DbDataFilter(maxCount);
                filter.Condition = provider.FormatFilterParam(paramName);
                filter.Parameters.Add(paramName, personalId);
                receiveParam.DbFilter = filter;
            }
            receiveParam.Capacity = maxCount;
            return(TryLoadCache(personalId, receiveParam, periodTime));
        }
Beispiel #10
0
 public void Dispose()
 {
     _schema = null;
     _filter = null;
 }
Beispiel #11
0
 public SqlDataReceiver(SchemaTable schema, int capacity, DbDataFilter filter)
 {
     _schema  = schema;
     _filter  = filter;
     Capacity = capacity;
 }
Beispiel #12
0
 public SqlDataReceiver(SchemaTable schema, DbDataFilter filter)
 {
     _schema = schema;
     _filter = filter;
 }
        /// <summary>
        ///
        /// </summary>
        /// <param name="filter"></param>
        /// <param name="dataList"></param>
        /// <returns></returns>
        protected bool TryLoadFromDb(DbDataFilter filter, out List <T> dataList)
        {
            var schema = EntitySchemaSet.Get <T>();

            return(DataSyncManager.TryReceiveSql <T>(schema, filter, SetPropertyValue, out dataList));
        }
Beispiel #14
0
        /// <summary>
        ///    一桌完统计数据
        /// </summary>
        /// <param name="guid">桌号</param>
        /// <param name="gameover">是否结束了</param>
        /// <param name="numpertable">一桌有多少人</param>
        public static void SetRateDataByTableNum(string _guid, bool gameover, int numpertable)
        {
            _pos2Rate1 = new List <CommonPosValSD>();
            _pos2Rate2 = new List <CommonPosValSD>();
            _pos2Rate3 = new List <CommonPosValSD>();
            _pos2Rate4 = new List <CommonPosValSD>();
            if (!gameover)
            {
                return;
            }
            var cacheSet = new ShareCacheStruct <tb_TableMoneyLog>();
            //if (cacheSet.Count == 0)
            //{
            DbDataFilter filter = new DbDataFilter();

            filter.Condition = "_guid = @guid";
            filter.Parameters.Add("guid", _guid);
            cacheSet.TryRecoverFromDb(filter);
            //}
            List <tb_TableMoneyLog> _tmList = cacheSet.FindAll();

            if (_tmList == null || !_tmList.Any())
            {
                return;
            }
            for (int _pos = 1; _pos <= numpertable; _pos++)
            {
                var _moneylist1 = _tmList.FindAll((money) => { return(money._pos == _pos && money._bullrate == 1); });
                if (_moneylist1.Count != 0)
                {
                    _pos2Rate1.Add(new CommonPosValSD()
                    {
                        pos = _pos, val = _moneylist1.Count
                    });
                }

                var _moneylist2 = _tmList.FindAll((money) => { return(money._pos == _pos && money._bullrate == 2); });
                if (_moneylist2.Count != 0)
                {
                    _pos2Rate2.Add(new CommonPosValSD()
                    {
                        pos = _pos, val = _moneylist2.Count
                    });
                }

                var _moneylist3 = _tmList.FindAll((money) => { return(money._pos == _pos && money._bullrate == 3); });
                if (_moneylist3.Count != 0)
                {
                    _pos2Rate3.Add(new CommonPosValSD()
                    {
                        pos = _pos, val = _moneylist3.Count
                    });
                }

                var _moneylist4 = _tmList.FindAll((money) => { return(money._pos == _pos && money._bullrate == 4); });
                if (_moneylist4.Count != 0)
                {
                    _pos2Rate4.Add(new CommonPosValSD()
                    {
                        pos = _pos, val = _moneylist4.Count
                    });
                }
            }

            //写入排行信息
            _tmList = cacheSet.FindAll((t_user) => { return(t_user._guid == _guid && t_user._isover); });
            foreach (tb_TableMoneyLog moneylog in _tmList)
            {
                var          cacheSetRank = new GameDataCacheSet <tb_Rank>();
                DbDataFilter filter1      = new DbDataFilter();
                //filter1.Condition = "UserId=@UserId";
                //filter.Parameters.Add("UserId", moneylog.UserID);

                var userRank = new tb_Rank();
                userRank = cacheSetRank.FindKey(moneylog.UserID.ToString());
                if (userRank == null)
                {
                    cacheSetRank.TryRecoverFromDb(filter1);
                    tb_Rank rank = new tb_Rank()
                    {
                        UserID = moneylog.UserID
                    };
                    if (moneylog._win)
                    {
                        rank.ScoreWin++;
                    }
                    else
                    {
                        rank.ScoreLost++;
                    }
                    rank.records.Add(new Record()
                    {
                        ItemId = cacheSetRank.GetNextNo(), MatchCode = moneylog.MatchCode, Money = moneylog.AddorReduceMoney
                    });
                    cacheSetRank.Add(rank);
                }
                else
                {
                    userRank = cacheSetRank.FindKey(moneylog.UserID.ToString());
                    userRank.ModifyLocked(() => {
                        if (moneylog._win)
                        {
                            userRank.ScoreWin++;
                        }
                        else
                        {
                            userRank.ScoreLost++;
                        }
                        if (userRank.records == null)
                        {
                            userRank.records = new CacheList <Record>();
                        }
                        userRank.records.Add(new Record()
                        {
                            ItemId = cacheSetRank.GetNextNo(), MatchCode = moneylog.MatchCode, Money = moneylog.AddorReduceMoney
                        });
                        cacheSetRank.Update();
                    });
                }
                // if(userRank.)
                //tb_Rank _temprank = cacheSetRank.Find((rank) => { return rank.UserID == moneylog.UserID; });
                //if (_temprank == null)
                //{
                //    _temprank = new tb_Rank();
                //    _temprank.UserID = moneylog.UserID;
                //    _temprank.ScoreLost = 0;
                //    _temprank.ScoreWin = 0;
                //}
                //_temprank.CreateDate = DateTime.Now;
                //if (moneylog._win) _temprank.ScoreWin++;
                //else _temprank.ScoreLost++;
                //cacheSetRank.AddOrUpdate(_temprank);
            }
        }
Beispiel #15
0
        public bool TryLoadHistory <T>(string redisKey, out List <T> dataList)
        {
            bool result = false;

            dataList = null;
            SchemaTable schemaTable;

            if (EntitySchemaSet.TryGet <EntityHistory>(out schemaTable))
            {
                try
                {
                    var provider = DbConnectionProvider.CreateDbProvider(schemaTable);
                    if (provider == null)
                    {
                        //DB is optional and can no DB configuration
                        dataList = new List <T>();
                        return(true);
                    }
                    TransReceiveParam receiveParam = new TransReceiveParam(redisKey);
                    receiveParam.Schema = schemaTable;
                    int    maxCount = receiveParam.Schema.Capacity;
                    var    filter   = new DbDataFilter(maxCount);
                    string key      = schemaTable.Keys[0];
                    filter.Condition = provider.FormatFilterParam(key);
                    filter.Parameters.Add(key, redisKey);
                    receiveParam.DbFilter = filter;
                    receiveParam.Capacity = maxCount;

                    List <EntityHistory> historyList;
                    if (_dbTransponder.TryReceiveData(receiveParam, out historyList))
                    {
                        if (historyList.Count == 0)
                        {
                            dataList = new List <T>();
                            result   = true;
                        }
                        else
                        {
                            EntityHistory history = historyList[0];
                            RedisManager.Process(client => client.Set(redisKey, history.Value));
                            var dataSet = ProtoBufUtils.Deserialize <Dictionary <string, T> >(history.Value);
                            if (dataSet != null)
                            {
                                dataList = dataSet.Values.ToList();
                                result   = true;
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    TraceLog.WriteError("Try load Redis's history key:{0}\r\nerror:{1}", redisKey, ex);
                }
            }
            else
            {
                dataList = new List <T>();
                result   = true;
            }
            return(result);
        }
Beispiel #16
0
        public bool TryLoadHistory <T>(string redisKey, out List <T> dataList)
        {
            redisKey = RedisConnectionPool.GetRedisEntityKeyName(redisKey);
            bool result = false;

            dataList = null;
            SchemaTable schemaTable;

            if (EntitySchemaSet.TryGet <EntityHistory>(out schemaTable))
            {
                try
                {
                    var provider = DbConnectionProvider.CreateDbProvider(schemaTable);
                    if (provider == null)
                    {
                        //DB is optional and can no DB configuration
                        dataList = new List <T>();
                        return(true);
                    }
                    TransReceiveParam receiveParam = new TransReceiveParam(redisKey);
                    receiveParam.Schema = schemaTable;
                    int    maxCount = receiveParam.Schema.Capacity;
                    var    filter   = new DbDataFilter(maxCount);
                    string key      = schemaTable.Keys[0];
                    filter.Condition = provider.FormatFilterParam(key);
                    filter.Parameters.Add(key, redisKey);
                    receiveParam.DbFilter = filter;
                    receiveParam.Capacity = maxCount;

                    List <EntityHistory> historyList;
                    if (_dbTransponder.TryReceiveData(receiveParam, out historyList))
                    {
                        EntityHistory history = historyList.Count > 0 ? historyList[0] : null;
                        if (history != null && history.Value != null && history.Value.Length > 0)
                        {
                            byte[][] bufferBytes = ProtoBufUtils.Deserialize <byte[][]>(history.Value);
                            byte[][] keys        = bufferBytes.Where((b, index) => index % 2 == 0).ToArray();
                            byte[][] values      = bufferBytes.Where((b, index) => index % 2 == 1).ToArray();
                            RedisConnectionPool.Process(client => client.HMSet(redisKey, keys, values));
                            dataList = values.Select(value => ProtoBufUtils.Deserialize <T>(value)).ToList();
                            result   = true;
                        }
                        else
                        {
                            dataList = new List <T>();
                            result   = true;
                        }
                    }
                }
                catch (Exception ex)
                {
                    TraceLog.WriteError("Try load Redis's history key:{0}\r\nerror:{1}", redisKey, ex);
                }
            }
            else
            {
                dataList = new List <T>();
                result   = true;
            }
            return(result);
        }
Beispiel #17
0
        public override bool TakeAction()
        {
            var iemiCache = new ShareCacheStruct <IemiEntity>();


            var cache = new PersonalCacheStruct <GameUser>();


            var entity = iemiCache.FindKey(_pid);

            if (entity == null)
            {
                var filter = new DbDataFilter();
                filter.Condition = "IEMI = @IEMI";
                filter.Parameters.Add("IEMI", _pid);
                iemiCache.TryRecoverFromDb(filter, _pid);

                entity = iemiCache.FindKey(_pid);
            }

            if (entity == null)
            {
                Console.WriteLine("1004-------------IemiEntity Is Null");

                entity      = new IemiEntity();
                entity.IEMI = _pid;

                _user = new GameUser()
                {
                    UserId    = (int)cache.GetNextNo(),
                    IEMI      = _pid,
                    Searching = false,
                    RivalId   = -1
                };

                entity.UserId = _user.UserId;


                iemiCache.AddOrUpdate(entity);

                cache.AddOrUpdate(_user);

                Current.Bind(_user);
            }
            else
            {
                int userId = entity.UserId;

                _user = cache.FindKey(userId.ToString());

                if (_user == null)
                {
                    var filter = new DbDataFilter();
                    filter.Condition = "UserId = @UserId";
                    filter.Parameters.Add("UserId", userId);
                    var ii = cache.TryRecoverFromDb(filter, userId.ToString());

                    Console.WriteLine(string.Format("1004-------------UserId:{0},IEMI:{1}", userId, entity.IEMI));
                }

                if (cache.TryFindKey(entity.UserId.ToString(), out _user, entity.UserId.ToString()) == ZyGames.Framework.Model.LoadingStatus.Success)
                {
                    Current.Bind(_user);
                }
                else
                {
                }
            }


            return(true);
        }
        /// <summary>
        /// 处理消息
        /// </summary>
        /// <param name="clientcommand"></param>
        /// <returns></returns>
        public bool DealDataEx(string _data, string _ipport, int SessionUserID, out string senddata)
        {
            senddata = "";
            if (SessionUserID == 0)
            {
                sc_exit_rebindsession_n _rebind = new sc_exit_rebindsession_n()
                {
                    result = 1, fn = "sc_exit_rebindsession_n"
                };
                senddata = JsonUtils.Serialize(_rebind);
                return(true);
            }
            _strIPandPort = _ipport;
            cs_base _basedata = JsonUtils.Deserialize <cs_base>(_data);
            var     cacheSet  = new PersonalCacheStruct <tb_User>();
            tb_User _tempuser = cacheSet.FindKey(SessionUserID.ToString());

            if (cacheSet.Count == 0 || _tempuser == null)
            {
                SchemaTable    schema   = EntitySchemaSet.Get <tb_User>();
                DbBaseProvider provider = DbConnectionProvider.CreateDbProvider(schema);
                DbDataFilter   filter   = new DbDataFilter(0);
                filter.Condition = provider.FormatFilterParam("UserId");
                filter.Parameters.Add("UserId", SessionUserID);
                cacheSet.TryRecoverFromDb(filter);                      //从数据库中恢复数据
                ////cacheSet.TryRecoverFromDb(new DbDataFilter(0));//all
                _tempuser = cacheSet.FindKey(SessionUserID.ToString()); //
            }
            if (_tempuser == null)
            {
                ErrorRecord.Record("CommonLogic 201611051736 User数据找不到SessionUserID:" + SessionUserID);
                return(false);
            }
            lock (_lockObj)
            {
                try
                {
                    switch (_basedata.fn)
                    {
                    case "cs_base": break;

                    case "cs_login":    //登录
                        cs_login _login = JsonUtils.Deserialize <cs_login>(_data);
                        senddata = Login(_tempuser, _login.accountId);
                        break;

                    case "cs_getgamelist":     //获取游戏列表
                        cs_getgamelist _gamelist = JsonUtils.Deserialize <cs_getgamelist>(_data);
                        senddata = GetGameList(_tempuser);
                        break;

                    case "cs_getgamelevel":     //获取游戏列表   也是房间列表
                        cs_getgamelevel _levellist = JsonUtils.Deserialize <cs_getgamelevel>(_data);
                        senddata = GetLevelList(_tempuser, _levellist.gameid);
                        break;

                    case "cs_freshplayerInfoSD":     //获取玩家信息
                        senddata = GetCurrentPlayerInfoSD(_tempuser);
                        break;

                    case "cs_enterroom":     //进入指定房间
                        cs_enterroom _enterroom = JsonUtils.Deserialize <cs_enterroom>(_data);
                        senddata = EnterRoom(_tempuser, _enterroom);
                        break;

                    case "cs_enterroomtable":     //进入指定房间
                        cs_enterroomtable _enterroomtable = JsonUtils.Deserialize <cs_enterroomtable>(_data);
                        senddata = EnterRoomTable(_tempuser, _enterroomtable);
                        break;

                    case "cs_exitroom":     //退出指定房间
                        cs_exitroom _exitroom = JsonUtils.Deserialize <cs_exitroom>(_data);
                        senddata = ExitRoom(_tempuser, _exitroom);
                        break;

                    case "cs_applyexittable":
                        cs_applyexittable _exittable = JsonUtils.Deserialize <cs_applyexittable>(_data);
                        senddata = ApplyExitTable(_tempuser, _exittable);
                        break;

                    case "cs_dealexittable":
                        cs_dealexittable _dealexittable = JsonUtils.Deserialize <cs_dealexittable>(_data);
                        senddata = DealExitTable(_tempuser, _dealexittable);
                        break;

                    case "cs_getnotice":    // 请求当前公告
                        cs_getnotice _notice = JsonUtils.Deserialize <cs_getnotice>(_data);
                        senddata = GetNotice("");
                        break;

                    case "cs_chat":    // 发送聊天信息
                        cs_chat _chat = JsonUtils.Deserialize <cs_chat>(_data);
                        senddata = NotifyChat(_tempuser, _chat);
                        break;

                    case "cs_gm_chesscard":        //GM 操作
                        break;

                    case "cs_reenterroom":     //断线重连第一版
                        cs_reenterroom _reroom = JsonUtils.Deserialize <cs_reenterroom>(_data);
                        senddata = ReEnterRoom(_tempuser, _reroom);
                        break;

                    case "cs_ping":    //GetPing  //给请求方发送服务器时间
                        senddata = GetPing();
                        break;

                    case "cs_getranklist":     //获取排行榜列表
                        cs_getranklist _getrank = JsonUtils.Deserialize <cs_getranklist>(_data);
                        senddata = GetRankList(_tempuser, _getrank);
                        break;

                    case "cs_getcombatgainlist":     //获取排行榜列表
                        cs_getcombatgainlist _getcombatgain = JsonUtils.Deserialize <cs_getcombatgainlist>(_data);
                        senddata = GetCombatGainList(_tempuser, _getcombatgain);
                        break;

                    case "cs_feedback":
                        cs_feedback _feedback = JsonUtils.Deserialize <cs_feedback>(_data);
                        senddata = PostFeedback(_tempuser, _feedback);
                        break;

                    case "cs_askmoneytrading":    //索要赠送请求
                        cs_askmoneytrading data = JsonUtils.Deserialize <cs_askmoneytrading>(_data);
                        //如果是作弊账号则走单独处理流程
                        HandelType type;
                        type = _tempuser.winpercent > 0 ? HandelType.abnormal : HandelType.normal;
                        var handleGoldOper = CreateHandleGoldFactory.CreateHandleGoldOperation(type);
                        handleGoldOper.model = data;
                        handleGoldOper.user  = _tempuser;
                        senddata             = handleGoldOper.Operation();
                        break;

                    case "cs_ensuremoneytrading":    //确认接收赠送金币
                        cs_ensuremoneytrading data1 = JsonUtils.Deserialize <cs_ensuremoneytrading>(_data);
                        senddata = EnsureMoneyTrading(_tempuser, data1);
                        break;

                    default:
                        if (_basedata.fn.EndsWith("_bf100"))
                        {
                            senddata = _bf100logic.DealDataEx(_data, _ipport, _tempuser);
                        }
                        else if (_basedata.fn.EndsWith("_bfc"))
                        {
                            senddata = _tclogic.DealDataEx(_data, _ipport, _tempuser);
                        }
                        //else if (_basedata.fn.EndsWith("_tc"))
                        //{ senddata = _tclogic.DealDataEx(_data, _ipport, _tempuser); }
                        break;
                    }
                    return(true);
                }
                catch (Exception ex)
                {
                    ErrorRecord.Record(ex, " 201206091508 ");
                    return(false);
                }
            }
        }
        /// <summary>
        /// 从历史库中加载数据
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="redisKey"></param>
        /// <param name="dataList"></param>
        /// <returns></returns>
        public bool TryLoadHistory <T>(string redisKey, out List <T> dataList) where T : ISqlEntity
        {
            string[] entityAndKeys = (redisKey ?? "").Split('_');
            var      entityKey     = entityAndKeys.Length > 1 ? entityAndKeys[1] : null;
            string   entityNameKey = RedisConnectionPool.GetRedisEntityKeyName(entityAndKeys[0]);

            bool result = false;

            dataList = null;
            SchemaTable schemaTable;

            if (EntitySchemaSet.TryGet <EntityHistory>(out schemaTable))
            {
                try
                {
                    var provider = DbConnectionProvider.CreateDbProvider(schemaTable);
                    if (provider == null)
                    {
                        //DB is optional and can no DB configuration
                        dataList = new List <T>();
                        return(true);
                    }
                    TransReceiveParam receiveParam = new TransReceiveParam(entityNameKey);
                    receiveParam.Schema = schemaTable;
                    int    maxCount     = receiveParam.Schema.Capacity;
                    var    filter       = new DbDataFilter(maxCount);
                    string key          = schemaTable.Keys[0];
                    var    entitySchema = EntitySchemaSet.Get(entityAndKeys[0]);

                    if (entitySchema != null && entitySchema.Keys.Length == 1)
                    {
                        filter.Condition = provider.FormatFilterParam(key);
                        filter.Parameters.Add(key, string.Format("{0}_{1}", entityNameKey, entityKey));
                    }
                    else
                    {
                        filter.Condition = provider.FormatFilterParam(key, "LIKE");
                        filter.Parameters.Add(key, string.Format("{0}_%{1}%", entityNameKey, entityKey));
                    }
                    receiveParam.DbFilter = filter;

                    List <EntityHistory> historyList;
                    if (_dbTransponder.TryReceiveData(receiveParam, out historyList))
                    {
                        if (historyList.Count == 0)
                        {
                            dataList = new List <T>();
                            return(true);
                        }
                        dataList = new List <T>();
                        var keyBytes   = new byte[historyList.Count][];
                        var valueBytes = new byte[historyList.Count][];
                        for (int i = 0; i < keyBytes.Length; i++)
                        {
                            var entityHistory = historyList[i];
                            keyBytes[i]   = RedisConnectionPool.ToByteKey(entityHistory.Key.Split('_')[1]);
                            valueBytes[i] = entityHistory.Value;
                            dataList.Add((T)_serializer.Deserialize(entityHistory.Value, typeof(T)));
                        }
                        //从DB备份中恢复到Redis, 多个Key时也要更新
                        var entitys = dataList.ToArray();
                        RedisConnectionPool.Process(client =>
                        {
                            client.HMSet(entityNameKey, keyBytes, valueBytes);
                            if (entitySchema.Keys.Length > 1)
                            {
                                RedisConnectionPool.UpdateFromMutilKeyMap <T>(client, entityKey, entitys);
                            }
                        });
                        result = true;
                    }
                }
                catch (Exception ex)
                {
                    TraceLog.WriteError("Try load Redis's history key:{0}\r\nerror:{1}", entityNameKey, ex);
                }
            }
            else
            {
                dataList = new List <T>();
                result   = true;
            }
            return(result);
        }
Beispiel #20
0
        /// <summary>
        /// 执行指令 格式 "001|1,2,3"
        /// </summary>
        /// <param name="cmd"></param>
        /// <returns></returns>
        public string DoExecCmd(string address, string json)
        {
            TraceLog.WriteInfo("{0}执行指令:{1}", address, json);
            cs_base_gm _basegm = null;

            try
            {
                _basegm = JsonUtils.Deserialize <cs_base_gm>(json);
            }
            catch (Exception ex)
            {
                return("0");
            }
            string errorCode = "0";

            switch (_basegm.fn)
            {
            case "0001":    //通知所有玩家 ?CMD=0001|玩家1524879,获得了以排行榜一等级奖!
                //sc_getnotice_n _getnotice = new sc_getnotice_n() { result = 1, fn = "_getnotice", noticelist = new List<string>() };
                //_getnotice.noticelist.Add(cmds[1]);
                //BaseSendDataServer.AutoNotifySendData(JsonUtils.Serialize((_getnotice)));
                errorCode = "1";
                break;

            case "0002":    //踢出游戏 ?CMD=0002|1524879

                errorCode = "1";
                break;

            case "0003":    //充值 ?CMD=0002|1524879|5000


                //int userId = 0;
                //int diamond = 0;
                //if(int.TryParse(cmds[1],out userId) && int.TryParse(cmds[2],out diamond))
                //{
                //    var user = tb_UserEx.GetFromCachebyUserID(userId);
                //    if(user != null)
                //    {
                //        user.ModifyLocked(() =>
                //            {
                //                user.diamond += diamond;
                //            });
                //    }
                //    errorCode = "1";
                //}
                break;

            case "0004":    //设置指定玩家的当前分数     ?CMD=0004|1380162|99     http://127.0.0.1:8080/Service/?CMD=0004|2000001|-9999|4
                //if (cmds.Length != 4) break;
                //int _userId004 = 0;
                //int _money = 0;
                //int _gameid = 0;
                //if (int.TryParse(cmds[1], out _userId004) && int.TryParse(cmds[2], out _money) && int.TryParse(cmds[3], out _gameid))
                //{
                //    if (_gameid == BullFightLobby.instance.Gameid)
                //    {
                //        //只修改内存数据,不做持久化
                //        UserStatus _us = BullFightLobby.instance.GetUserStatusbyUserID(_userId004);
                //        if (_us == null) break;
                //        BullFightTable _bftable = BullFightLobby.instance.GetTableByRoomIDandTableID(_us.RoomID, _us.TableID);
                //        if (_bftable == null) break;


                //        BullFightUser _bfuser = _bftable.GetUserByID(_userId004);
                //        if (_bfuser == null) break;
                //        _bfuser._moneyaddorreduce = _money;
                //        //_bfuser.UpdateMoney(99);            被覆盖了,无效
                //        errorCode = "1";
                //    }
                //    else if (_gameid == LandLordLobby.instance.Gameid)
                //    {   //只修改内存数据,不做持久化
                //        UserStatus _us = LandLordLobby.instance.GetUserStatusbyUserID(_userId004);
                //        if (_us == null) break;
                //        LandLordTable _bftable = LandLordLobby.instance.GetTableByRoomIDandTableID(_us.RoomID, _us.TableID);
                //        if (_bftable == null) break;


                //        LandLordUser _bfuser = _bftable.GetUserByID(_userId004);
                //        if (_bfuser == null) break;
                //        _bfuser._moneyaddorreduce = _money;
                //        //_bfuser.UpdateMoney(99);            被覆盖了,无效
                //        errorCode = "1";
                //    }
                //}
                break;

            case "0005":    //设置指定玩家申请解散游戏     ?CMD=0005|1380162     http://127.0.0.1:8080/Service/?CMD=0004|2000001|4
                //if (cmds.Length != 3) break;
                //int _userId005 = 0;
                //int _gamedi5 = 0;
                //if (int.TryParse(cmds[1], out _userId005) && int.TryParse(cmds[2], out _gamedi5))
                //{
                //    if (_gamedi5 == BullFightLobby.instance.Gameid)
                //    {
                //        //只修改内存数据,不做持久化
                //        UserStatus _us = BullFightLobby.instance.GetUserStatusbyUserID(_userId005);
                //        if (_us == null) break;
                //        BullFightTable _bftable = BullFightLobby.instance.GetTableByRoomIDandTableID(_us.RoomID, _us.TableID);
                //        if (_bftable == null) break;
                //        _bftable.ApplyExitTable(_userId005);

                //        //_bfuser.UpdateMoney(99);            被覆盖了,无效
                //        errorCode = "1";
                //    }
                //    else if (_gamedi5 == LandLordLobby.instance.Gameid)
                //    {
                //        //只修改内存数据,不做持久化
                //        UserStatus _us = LandLordLobby.instance.GetUserStatusbyUserID(_userId005);
                //        if (_us == null) break;
                //        LandLordTable _bftable = LandLordLobby.instance.GetTableByRoomIDandTableID(_us.RoomID, _us.TableID);
                //        if (_bftable == null) break;
                //        _bftable.ApplyExitTable(_userId005);

                //        //_bfuser.UpdateMoney(99);            被覆盖了,无效
                //        errorCode = "1";
                //    }
                //    }
                break;

            case "cs_setcard_ll_gm":    //设置指定玩家牌型最小    ?CMD=1001|1380162     http://127.0.0.1:8080/Service/?CMD=cs_setcard_ll_gm|1380162|4
                cs_setcard_ll_gm _setcard = JsonUtils.Deserialize <cs_setcard_ll_gm>(json);
                if (_setcard != null)
                {
                    int _userId1001             = _setcard.userid;
                    int _gameid1001             = _setcard.gameid;
                    sc_setcard_ll_gm _scSetcard = new sc_setcard_ll_gm()
                    {
                        fn = "sc_setcard_ll_gm", _good = true, _info = "", _ret = 1
                    };
                    if (_gameid1001 == BullFight100Lobby.instance.Gameid)
                    {
                        //只修改内存数据,不做持久化
                        UserStatus _us = BaseLobby.instanceBase.GetUserStatusbyUserID(_userId1001);
                        if (_us != null)
                        {
                            BullFight100Table _bftable = BullFight100Lobby.instance.GetTableByRoomIDandTableID(_us.RoomID, _us.TableID);
                            if (_bftable != null)
                            {
                                ////_bftable.ForeashAllDo((i) =>
                                ////{
                                ////    if (_bftable._DicPos2User[i]._userid == _userId1001)
                                ////    {
                                ////        _bftable._DicPos2User[i]._shouPaiArr = new List<int>() { 103, 103, 202, 203, 201 };
                                ////    }
                                ////});
                                _scSetcard._ret = 0;
                            }
                        }
                    }
                    errorCode = JsonUtils.Serialize(_scSetcard);
                }
                break;

            case "cs_settb_user_gm":
                cs_settb_user_gm _settb_user = JsonUtils.Deserialize <cs_settb_user_gm>(json);
                if (_settb_user != null)
                {
                    tb_User _user = JsonUtils.Deserialize <tb_User>(_settb_user._userjson);
                    tb_UserEx.UpdateData(_user);
                    sc_base_gm _scSetcard = new sc_base_gm()
                    {
                        fn = "cs_settb_user_gm", _info = "", _ret = 0
                    };
                    errorCode = JsonUtils.Serialize(_scSetcard);
                }
                else
                {
                    sc_base_gm _scSetcard = new sc_base_gm()
                    {
                        fn = "cs_settb_user_gm", _info = "参数错误", _ret = 1
                    };
                    errorCode = JsonUtils.Serialize(_scSetcard);
                }
                break;

            case "cs_setuserdes_gm":
                cs_setuserdes_gm _setuserinfo = JsonUtils.Deserialize <cs_setuserdes_gm>(json);
                if (_setuserinfo != null)
                {
                    int        _userId1001 = _setuserinfo.userid;
                    sc_base_gm _scResult   = new sc_base_gm()
                    {
                        fn = "cs_setuserdes_gm", _info = "", _ret = 0
                    };
                    tb_User _user = tb_UserEx.GetFromCachebyUserID(_userId1001);
                    if (_user != null)
                    {
                        if (_user.wechatName != _setuserinfo.webname ||
                            _user.wechatHeadIcon != _setuserinfo.headinfo || _user.AgentId != Convert.ToInt32(_setuserinfo.AgentId))
                        {
                            _user.wechatName     = _setuserinfo.webname;
                            _user.wechatHeadIcon = _setuserinfo.headinfo;
                            _user.AgentId        = Convert.ToInt32(_setuserinfo.AgentId);
                            tb_UserEx.UpdateData(_user);
                        }
                        else
                        {
                            _scResult._ret  = 1;
                            _scResult._info = "无需重新设置";
                        }
                    }
                    else
                    {
                        _scResult._ret  = 1;
                        _scResult._info = "会员不存在";
                    }
                    errorCode = JsonUtils.Serialize(_scResult);
                }
                else
                {
                    sc_base_gm _scSetcard = new sc_base_gm()
                    {
                        fn = "cs_setuserdes_gm", _info = "参数错误", _ret = 1
                    };
                    errorCode = JsonUtils.Serialize(_scSetcard);
                }
                break;

            case "cs_setagent_ll_gm":    //设置代理
                cs_setagent_ll_gm _setagent = JsonUtils.Deserialize <cs_setagent_ll_gm>(json);
                if (_setagent != null)
                {
                    int        _userId1001 = _setagent.userid;
                    sc_base_gm _scResult   = new sc_base_gm()
                    {
                        fn = "sc_setagent_ll_gm", _info = "", _ret = 0
                    };
                    tb_User _user = tb_UserEx.GetFromCachebyUserID(_userId1001);
                    if (_user != null)
                    {
                        if (_user.isagent != _setagent.agentid)
                        {
                            _user.isagent = _setagent.agentid;
                            tb_UserEx.UpdateData(_user);
                        }
                        else
                        {
                            _scResult._ret  = 1;
                            _scResult._info = "无需重新设置";
                        }
                    }
                    else
                    {
                        _scResult._ret  = 1;
                        _scResult._info = "会员不存在";
                    }
                    errorCode = JsonUtils.Serialize(_scResult);
                }
                else
                {
                    sc_base_gm _scSetcard = new sc_base_gm()
                    {
                        fn = "cs_setagent_ll_gm", _info = "参数错误", _ret = 1
                    };
                    errorCode = JsonUtils.Serialize(_scSetcard);
                }
                break;

            case "cs_setrobot_gm":    //设置机器人
                cs_setrobot_gm _setrobot = JsonUtils.Deserialize <cs_setrobot_gm>(json);
                if (_setrobot != null)
                {
                    int        _userId1001 = _setrobot.userid;
                    sc_base_gm _scResult   = new sc_base_gm()
                    {
                        fn = "sc_setagent_ll_gm", _info = "", _ret = 0
                    };
                    tb_User _user = tb_UserEx.GetFromCachebyUserID(_userId1001);
                    if (_user != null)
                    {
                        if (_user.isRobot != _setrobot.isrobot ||
                            _user.winpercent != _setrobot.winpercent ||
                            _user.RobotLevel != _setrobot.robotlevel)
                        {
                            _user.isRobot    = _setrobot.isrobot;
                            _user.RobotLevel = _setrobot.robotlevel;
                            _user.winpercent = _setrobot.winpercent;
                            tb_UserEx.UpdateData(_user);
                        }
                        else
                        {
                            _scResult._ret  = 1;
                            _scResult._info = "无需重新设置";
                        }
                    }
                    else
                    {
                        _scResult._ret  = 1;
                        _scResult._info = "会员不存在";
                    }
                    errorCode = JsonUtils.Serialize(_scResult);
                }
                else
                {
                    sc_base_gm _scSetcard = new sc_base_gm()
                    {
                        fn = "cs_setagent_ll_gm", _info = "参数错误", _ret = 1
                    };
                    errorCode = JsonUtils.Serialize(_scSetcard);
                }
                break;

            case "cs_setlocktime_gm":    //锁定账号
                cs_setlocktime_gm _setlocktime = JsonUtils.Deserialize <cs_setlocktime_gm>(json);
                if (_setlocktime != null)
                {
                    int        _userId1001 = _setlocktime.userid;
                    sc_base_gm _scResult   = new sc_base_gm()
                    {
                        fn = "sc_setagent_ll_gm", _info = "", _ret = 0
                    };
                    tb_User _user = tb_UserEx.GetFromCachebyUserID(_userId1001);
                    if (_user != null)
                    {
                        _user.lockTime = _setlocktime.locktime;
                        tb_UserEx.UpdateData(_user);
                    }
                    else
                    {
                        _scResult._ret  = 1;
                        _scResult._info = "会员不存在";
                    }
                    errorCode = JsonUtils.Serialize(_scResult);
                }
                else
                {
                    sc_base_gm _scSetcard = new sc_base_gm()
                    {
                        fn = "cs_setlocktime_gm", _info = "参数错误", _ret = 1
                    };
                    errorCode = JsonUtils.Serialize(_scSetcard);
                }
                break;

            case "cs_charge_gm":    //修改充值金额或钻石
                cs_charge_gm _charge = JsonUtils.Deserialize <cs_charge_gm>(json);
                if (_charge != null)
                {
                    sc_charge_gm _scResult = new sc_charge_gm()
                    {
                        fn = "sc_charge_gm", _info = "", _ret = 0, UserMoney = 0
                    };
                    tb_User _user = tb_UserEx.GetFromCachebyUserID(_charge.userid);
                    if (_user != null)
                    {
                        if (_charge.type == 1)
                        {
                            _scResult.UserMoney = _user.UserMoney;
                            _user.UserMoney    += (decimal)_charge.money;
                            _user.TotalMoney   += (decimal)_charge.money;
                        }
                        else
                        {
                            _scResult.UserMoney = (decimal)_user.diamond;
                            _user.diamond      += _charge.money;
                            _user.totaldiamond += (decimal)_charge.money;
                        }
                        tb_UserEx.UpdateData(_user);
                    }
                    else
                    {
                        _scResult._ret  = 1;
                        _scResult._info = "会员不存在";
                    }
                    errorCode = JsonUtils.Serialize(_scResult);
                }
                else
                {
                    sc_base_gm _scSetcard = new sc_base_gm()
                    {
                        fn = "sc_charge_gm", _info = "参数错误", _ret = 1
                    };
                    errorCode = JsonUtils.Serialize(_scSetcard);
                }
                break;

            case "cs_setNotice_gm":
                cs_setnotice_gm _setnotice = JsonUtils.Deserialize <cs_setnotice_gm>(json);
                if (_setnotice != null)
                {
                    //播放消息还没做好  BullFightLobby.SendChat(_user.UserID, gm);
                }
                break;

            case "cs_applyexittable_gm":        //tick somebody
                cs_applyexittable_gm _applyexit = JsonUtils.Deserialize <cs_applyexittable_gm>(json);
                if (_applyexit != null)
                {
                    sc_base_gm _scSetcard = new sc_base_gm()
                    {
                        fn = "sc_base_gm", _info = "", _ret = 0
                    };

                    if (_applyexit.gameid == BullFight100Lobby.instance.Gameid)
                    {
                        //只修改内存数据,不做持久化
                        UserStatus _us = BaseLobby.instanceBase.GetUserStatusbyUserID(_applyexit.userid);
                        if (_us != null)
                        {
                            BullFight100Table _bftable = BullFight100Lobby.instance.GetTableByRoomIDandTableID(_us.RoomID, _us.TableID);
                            if (_bftable != null)
                            {
                                _bftable.ApplyExitTable(_applyexit.userid);
                            }
                            _scSetcard._ret = 1;
                        }
                    }

                    errorCode = JsonUtils.Serialize(_scSetcard);
                }
                else
                {
                    sc_base_gm _scSetcard = new sc_base_gm()
                    {
                        fn = "cs_applyexittable_gm", _info = "参数错误", _ret = 1
                    };
                    errorCode = JsonUtils.Serialize(_scSetcard);
                }
                break;

            case "cs_createtable_gm":
                ////cs_createtable_gm _createtable = JsonUtils.Deserialize<cs_createtable_gm>(json);
                ////if (_createtable != null)
                ////{
                ////    sc_base_gm _scSetcard = new sc_base_gm() { fn = "sc_base_gm", _info = "", _ret = 0 };

                ////    if (_createtable.gameid == BullFightLobby.instance.Gameid)
                ////    {
                ////        cs_enterroom _enterroomdata = new cs_enterroom();
                ////        _enterroomdata.gameid = _createtable.gameid;   //暂时写固定
                ////        _enterroomdata.levelid = 1;   //暂时写固定
                ////        _enterroomdata.gametype = 1;
                ////        _enterroomdata.baseallmoney = 10000;
                ////        _enterroomdata.numpertable = 4;
                ////        _enterroomdata.roomcard = 2;
                ////        _enterroomdata.tableCount = 3;
                ////        _enterroomdata.rankertype = 2;

                ////    }
                ////    errorCode = JsonUtils.Serialize(_scSetcard);
                ////}
                break;
            //case "cs_getonlinecount_gm":
            //    ////cs_getonlinecount_gm _getonline = JsonUtils.Deserialize<cs_getonlinecount_gm>(json);
            //    ////if (_getonline != null)
            //    ////{
            //    ////    sc_getonlinecount_gm _scSetcard = new sc_getonlinecount_gm() { fn = "sc_getonlinecount_gm", _info = "", _ret = 0 };

            //    ////    if (_getonline.gameid == BullFightLobby.instance.Gameid)
            //    ////    {
            //    ////        //只修改内存数据,不做持久化
            //    ////        UserStatus _us = BaseLobby.instanceBase.GetUserStatusbyUserID(_applyexit.userid);
            //    ////        if (_us != null)
            //    ////        {
            //    ////            BullFightTable _bftable = BullFightLobby.instance.GetTableByRoomIDandTableID(_us.RoomID, _us.TableID);
            //    ////            if (_bftable != null) _bftable.ApplyExitTable(_applyexit.userid);
            //    ////            _scSetcard._ret = 1;
            //    ////        }
            //    ////    }
            //    ////    else if (_applyexit.gameid == LandLordLobby.instance.Gameid)
            //    ////    {

            //    ////    }
            //    ////    errorCode = JsonUtils.Serialize(_scSetcard);
            //    ////}
            //    break;
            case "cs_enterroom_gm":
                cs_enterroom_gm _createroomtable = JsonUtils.Deserialize <cs_enterroom_gm>(json);
                if (_createroomtable != null)
                {
                    sc_enterroom_gm _scSetcard = new sc_enterroom_gm()
                    {
                        fn = "sc_enterroom_gm", _info = "", _ret = 0
                    };
                    //只修改内存数据,不做持久化
                    UserStatus _us = BaseLobby.instanceBase.GetUserStatusbyUserID(_createroomtable.userid);
                    if (_us == null)
                    {
                        var     cacheSet  = new PersonalCacheStruct <tb_User>();
                        tb_User _tempuser = cacheSet.FindKey(_createroomtable.userid.ToString());
                        if (cacheSet.Count == 0 || _tempuser == null)
                        {
                            SchemaTable    schema   = EntitySchemaSet.Get <tb_User>();
                            DbBaseProvider provider = DbConnectionProvider.CreateDbProvider(schema);
                            DbDataFilter   filter   = new DbDataFilter(0);
                            filter.Condition = provider.FormatFilterParam("UserId");
                            filter.Parameters.Add("UserId", _createroomtable.userid);
                            cacheSet.TryRecoverFromDb(filter);                                //从数据库中恢复数据
                            ////cacheSet.TryRecoverFromDb(new DbDataFilter(0));//all
                            _tempuser = cacheSet.FindKey(_createroomtable.userid.ToString()); //
                        }
                        if (_tempuser == null)
                        {
                            ErrorRecord.Record("CommonLogic 201611051736 User数据找不到SessionUserID:" + _createroomtable.userid);
                            return("");
                        }
                        cs_enterroom _enterData = new cs_enterroom()
                        {
                            cc          = 0,
                            fn          = "cs_enterroom",
                            gameid      = _createroomtable.gameid,
                            levelid     = _createroomtable.levelid,
                            gametype    = _createroomtable.gametype,
                            numpertable = _createroomtable.numpertable,
                            rankertype  = _createroomtable.rankertype,
                            roomcard    = _createroomtable.roomcard,
                            tableCount  = _createroomtable.tableCount,
                            _userid     = _createroomtable.userid
                        };
                        CommonLogic _commonLogic = new CommonLogic();
                        _scSetcard.tablenum = _commonLogic.EnterRoom(_tempuser, _enterData);
                    }
                    errorCode = JsonUtils.Serialize(_scSetcard);
                }
                break;

            case "cs_maintain_operation":
                cs_maintain_operation data = JsonUtils.Deserialize <cs_maintain_operation>(json);
                _syncTimer.Start();
                sc_maintain_operation sedata = new sc_maintain_operation {
                    fn = "sc_maintain_operation", _ret = 1, _info = "操作成功"
                };
                int tableCount = 0;
                var brlist     = BullFight100Room.roomCache.FindAll();
                foreach (var bullfightroom in brlist)
                {
                    tableCount += bullfightroom.DicTable.Count;
                }
                sedata.tableCount = tableCount;
                errorCode         = JsonUtils.Serialize(sedata);
                break;

            case "cs_getonlinecount_gm":
                sc_getonlinecount senddata = new sc_getonlinecount {
                    fn = "sc_getonlinecount", _ret = 1, _info = "获取成功"
                };
                senddata.userCount = GameSession.Count;
                errorCode          = JsonUtils.Serialize(senddata);
                break;

            case "cs_closetable":
                cs_closetable receiveData = JsonUtils.Deserialize <cs_closetable>(json);
                // receiveData.
                sc_closetable sendData = new sc_closetable {
                    fn = "sc_closetable", _ret = 1, _info = "操作成功"
                };
                if (receiveData.userNo <= 0)
                {
                    sendData._ret  = -1;
                    sendData._info = "用户名错误";
                    errorCode      = JsonUtils.Serialize(sendData);
                    break;
                }
                var userStatus = BullFight100Lobby.instanceBase.GetUserStatusbyUserID(receiveData.userNo);
                if (userStatus == null)
                {
                    sendData._ret  = -1;
                    sendData._info = "用户不存在";
                    errorCode      = JsonUtils.Serialize(sendData);
                    break;
                }
                lock (tablelock)
                {
                    var table = BullFight100Lobby.instance.GetTableByRoomIDandTableID(userStatus.RoomID, userStatus.TableID);
                    table._gameover = true;
                }
                errorCode = JsonUtils.Serialize(sendData);
                break;

            case "cs_updatePro":    //更新机器人获胜几率
                cs_updatePro data1         = JsonUtils.Deserialize <cs_updatePro>(json);
                sc_updatePro sendUpdatePro = new sc_updatePro {
                    fn = "", _ret = 1, _info = "成功"
                };
                var cacheUser = new GameDataCacheSet <tb_User>();
                cacheUser.ReLoad();
                if (cacheUser.Count == 0)
                {
                    DbDataFilter filter = new DbDataFilter();
                    filter.Condition = "isRobot=@isRobot";
                    filter.Parameters.Add("@isRobot", 1);
                    cacheUser.TryRecoverFromDb(filter);
                }
                List <tb_User> userList = new List <tb_User>();
                var            robotId  = tb_UserEx.GetUserIdListByRobot(1);
                robotId.ForEach(d =>
                {
                    tb_User user;
                    cacheUser.TryFindKey(d.ToString(), out user);
                    if (user != null)
                    {
                        user.winpercent = data1.probability;
                        userList.Add(user);
                    }
                });
                cacheUser.AddOrUpdate(userList);
                errorCode = JsonUtils.Serialize(sendUpdatePro);
                break;

            case "cs_updateRobot":    //更新机器人头像名称信息
                cs_updateRobot robotData  = JsonUtils.Deserialize <cs_updateRobot>(json);
                var            result     = UpdateRobotImgAndName(robotData);
                sc_updateRobot sendUpdate = new sc_updateRobot {
                    fn = "", _ret = 1
                };
                sendUpdate._ret = result ? 1 : -1;
                errorCode       = JsonUtils.Serialize(sendUpdate);
                break;

            case "cs_gameinfo":

                sc_gameInfo sendgameinfo = new sc_gameInfo {
                    _ret = 1
                };
                try
                {
                    tb_gamelevelinfo gameinfo = JsonUtils.Deserialize <tb_gamelevelinfo>(json);
                    var gameCache             = new ShareCacheStruct <tb_gamelevelinfo>();
                    gameCache.AddOrUpdate(gameinfo);
                }
                catch (Exception)
                {
                    sendgameinfo._ret = -1;
                }
                errorCode = JsonUtils.Serialize(sendgameinfo);
                break;
            }
            return(errorCode);
        }