private ErrorCode LoadDBCfg() { Hashtable json; try { string content = File.ReadAllText(@".\Config\CSDBCfg.json"); json = ( Hashtable )MiniJSON.JsonDecode(content); } catch (Exception e) { Logger.Error($"load CSDBCfg failed:{e}"); return(ErrorCode.CfgFailed); } Hashtable[] dbs = json.GetMapArray("DB"); foreach (Hashtable db in dbs) { DBCfg cfg = new DBCfg(); DBType dtype = ( DBType )db.GetInt("type"); cfg.aszDBHostIP = db.GetString("ip"); cfg.un32DBHostPort = db.GetInt("port"); cfg.aszDBUserName = db.GetString("user"); cfg.aszDBUserPwd = db.GetString("pwd"); cfg.aszDBName = db.GetString("dbname"); this.dbCfgMap[dtype] = cfg; } return(ErrorCode.Success); }
public CSUserMgr() { this.today = new DateTime(); DBCfg cfgGameDB = CS.instance.csCfg.GetDBCfg(DBType.Game); DBCfg cfgCdkeyDB = CS.instance.csCfg.GetDBCfg(DBType.Cdkey); //第一个参数是更新玩家数据的方法,这是一个异步回调,通常由别的线程投递更新请求 //此实例会开启一个线程专门消费这些更新请求 //第三个参数是当这个线程开启时的回调函数,也是一个异步回调,这个回调只会执行一次,也就是服务器开启的时候 //具体该方法是处理什么消息,以后继续探讨 this._userCacheDBActiveWrapper = new DBActiveWrapper(this.UserCacheDBAsynHandler, cfgGameDB, this.DBAsynQueryWhenThreadBegin); this._userCacheDBActiveWrapper.Start(); //服务端启动就开启一个线程查询玩家数据 this._cdkeyWrapper = new DBActiveWrapper(this.UserAskDBAsynHandler, cfgCdkeyDB, this.CDKThreadBeginCallback); this._cdkeyWrapper.Start(); for (int i = 0; i < G_THREAD; i++) { DBActiveWrapper threadDBWrapper = new DBActiveWrapper(this.UserAskDBAsynHandler, cfgGameDB, null); threadDBWrapper.Start(); this._userAskDBActiveWrappers.Add(threadDBWrapper); } this.gcMsgHandlers[( int )GCToCS.MsgNum.EMsgToGstoCsfromGcAskComleteUserInfo] = this.OnMsgToGstoCsfromGcAskComleteUserInfo; this.gcMsgHandlers[( int )GCToCS.MsgNum.EMsgToGstoCsfromGcAskLogin] = this.OnMsgToGstoCsfromGcAskLogin; this.gcMsgHandlers[( int )GCToCS.MsgNum.EMsgToGstoCsfromGcAskReconnectGame] = this.OnMsgToGstoCsfromGcAskReconnectGame; this.gcMsgHandlers[( int )GCToCS.MsgNum.EMsgToGstoCsfromGcAskChangeNickName] = this.OnMsgToGstoCsfromGcAskChangeNickName; this.gcMsgHandlers[( int )GCToCS.MsgNum.EMsgToGstoCsfromGcAskChangeheaderId] = this.OnMsgToGstoCsfromGcAskChangeheaderId; }
/// <summary> /// 构造函数 /// </summary> /// <param name="callback">消息消费后的回调函数(通常和生产者不在同一个线程上)</param> /// <param name="cfg">数据库配置信息</param> /// <param name="beginCallback">开始处理消息的回调函数</param> public DBActiveWrapper(Action <GBuffer> callback, DBCfg cfg, Action beginCallback) { this._active = new DBActive(callback, beginCallback); this._db = new MySqlConnection( $"server={cfg.aszDBHostIP};user id={cfg.aszDBUserName};password={cfg.aszDBUserPwd};port={cfg.un32DBHostPort};database={cfg.aszDBName}"); }