/// <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);//从数据库中恢复数据 } }
/// <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); }
/// <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); }
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); }
/// <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); }
/// <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); }
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); }
/// <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)); }
public void Dispose() { _schema = null; _filter = null; }
public SqlDataReceiver(SchemaTable schema, int capacity, DbDataFilter filter) { _schema = schema; _filter = filter; Capacity = capacity; }
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)); }
/// <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); } }
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); }
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); }
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); }
/// <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); }