Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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}");
 }