Example #1
0
        public override eRedisAccessError DoCommand(RedisClient redisCli)
        {
#if RedisCommandSpendTime
            m_sw.Stop();
            m_spendMillisecArr[0] = m_sw.ElapsedMilliseconds;
            m_sw.Restart();
#endif
            try
            {
                if (m_script.m_SHA == null || redisCli.HasLuaScript(m_script.m_SHA) == false)
                {
                    m_script.m_SHA = redisCli.LoadLuaScript(m_script.m_Body);
                }
                byte[][] luaArgvByteArr = new byte[m_luaArgv.Length][];
                for (int i = 0; i < m_luaArgv.Length; ++i)
                {
                    luaArgvByteArr[i] = m_luaArgv[i].ToUtf8Bytes();
                }
                m_theReturn = redisCli.EvalSha(m_script.m_SHA, 0, luaArgvByteArr);
            }
            catch (Exception ex)
            {
                m_Err = eRedisAccessError.Command_Exec_Fail;
                SvLogger.Fatal(ex, "ScriptName={2}\nScriptBody={3} -> {0}\n{1}.", ex.Message, ex.StackTrace, m_script.m_Name, m_script.m_Body);
            }

#if RedisCommandSpendTime
            m_sw.Stop();
            m_spendMillisecArr[1] = m_sw.ElapsedMilliseconds;
            m_sw.Restart();
#endif

            return(m_Err);
        }
Example #2
0
                public bool Connect()
                {
                    CloseConnectionService();

                    try
                    {
                        m_connService = new ConnectService(OnRecvServerData,
                                                           OnServerConnectionClose,
                                                           OnOpenNewServerConnection,
                                                           OnOpenConnectionWithSvrInfoFail);
                        //m_connService.RegisterInternalProtocolDealer(InternalProtocolDealer.Instance.Parse);

                        bool result = m_connService.Connect(m_ip, m_port);
                        if (result == true)
                        {
                            SvLogger.Info("Start Connect : Address={0}, Port={1}", m_ip, m_port);
                            return(true);
                        }
                        else
                        {
                            m_connService.Channel.Close();
                            m_connService = null;
                        }
                        return(false);
                    }
                    catch (Exception ex)
                    {
                        SvLogger.Fatal(ex, "OpenConnectionFail : IP={0}, Port={1}, ErrMsg={2}.", m_ip, m_port, ex.Message);
                    }
                    return(false);
                }
Example #3
0
        public override eRedisAccessError DoCommand(RedisClient redisCli)
        {
#if RedisCommandSpendTime
            m_sw.Stop();
            m_spendMillisecArr[0] = m_sw.ElapsedMilliseconds;
            m_sw.Restart();
#endif
            try
            {
                m_value = redisCli.GetValueFromHash(m_hashID, m_key);
            }
            catch (Exception ex)
            {
                m_Err = eRedisAccessError.Command_Exec_Fail;
                SvLogger.Fatal(ex, "{0}\n{1}.", ex.Message, ex.StackTrace);
            }

#if RedisCommandSpendTime
            m_sw.Stop();
            m_spendMillisecArr[1] = m_sw.ElapsedMilliseconds;
            m_sw.Restart();
#endif

            return(m_Err);
        }
Example #4
0
//        public RedisHashSetKeyValue(string hashID, string key, ByteArray value, RedisCommandCallBackNullFunc commandCallBack, params object[] argv)
//            : base(commandCallBack != null)
//        {
//            m_hashID = hashID;
//            m_key = key;
//            m_isStrValue = false;
//            m_valueBtyeArr = value;
//            m_commandCallBack = commandCallBack;
//            m_commandCallBackArgv = argv;
//#if RedisCommandSpendTime
//            m_sw.Start();
//#endif
//        }

        public override eRedisAccessError DoCommand(RedisClient redisCli)
        {
#if RedisCommandSpendTime
            m_sw.Stop();
            m_spendMillisecArr[0] = m_sw.ElapsedMilliseconds;
            m_sw.Restart();
#endif
            try
            {
                if (m_isStrValue == true)
                {
                    redisCli.SetEntryInHash(m_hashID, m_key, m_valueStr);
                }
                //else
                //{
                //    byte[] datas = RedisCommonFunc.ObjByteArrayToRedisObjBytes(m_valueBtyeArr);
                //    reGameDataAllocAccountCountdisCli.HSet(m_hashID, m_key.ToUtf8Bytes(), datas);
                //}
            }
            catch (Exception ex)
            {
                m_Err = eRedisAccessError.Command_Exec_Fail;
                SvLogger.Fatal(ex, "{0}\n{1}.", ex.Message, ex.StackTrace);
            }

#if RedisCommandSpendTime
            m_sw.Stop();
            m_spendMillisecArr[1] = m_sw.ElapsedMilliseconds;
            m_sw.Restart();
#endif

            return(m_Err);
        }
Example #5
0
        public override eRedisAccessError DoCommand(RedisClient redisCli)
        {
#if RedisCommandSpendTime
            m_sw.Stop();
            m_spendMillisecArr[0] = m_sw.ElapsedMilliseconds;
            m_sw.Restart();
#endif
            try
            {
                if (m_script.m_SHA == null || redisCli.HasLuaScript(m_script.m_SHA) == false)
                {
                    m_script.m_SHA = redisCli.LoadLuaScript(m_script.m_Body);
                }
                m_theReturn = redisCli.ExecLuaShaAsList(m_script.m_SHA, m_luaArgv);
            }
            catch (Exception ex)
            {
                m_Err = eRedisAccessError.Command_Exec_Fail;
                SvLogger.Fatal(ex, "ScriptName={2}\nScriptBody={3} -> {0}\n{1}.", ex.Message, ex.StackTrace, m_script.m_Name, m_script.m_Body);
            }

#if RedisCommandSpendTime
            m_sw.Stop();
            m_spendMillisecArr[1] = m_sw.ElapsedMilliseconds;
            m_sw.Restart();
#endif

            return(m_Err);
        }
Example #6
0
        public override eRedisAccessError DoCommand(RedisClient redisCli)
        {
#if RedisCommandSpendTime
            m_sw.Stop();
            m_spendMillisecArr[0] = m_sw.ElapsedMilliseconds;
            m_sw.Restart();
#endif
            try
            {
                redisCli.AddItemToSortedSet(m_key, m_item, m_score);
            }
            catch (Exception ex)
            {
                m_Err = eRedisAccessError.Command_Exec_Fail;
                SvLogger.Fatal(ex, "{0}\n{1}.", ex.Message, ex.StackTrace);
            }

#if RedisCommandSpendTime
            m_sw.Stop();
            m_spendMillisecArr[1] = m_sw.ElapsedMilliseconds;
            m_sw.Restart();
#endif

            return(m_Err);
        }
Example #7
0
        public override eRedisAccessError DoCommand(RedisClient redisCli)
        {
#if RedisCommandSpendTime
            m_sw.Stop();
            m_spendMillisecArr[0] = m_sw.ElapsedMilliseconds;
            m_sw.Restart();
#endif
            try
            {
                HashSet <string> items = redisCli.GetAllItemsFromSet(m_key);
                if (items != null)
                {
                    m_returns = new List <string>();
                    m_returns.AddRange(items);
                }
            }
            catch (Exception ex)
            {
                m_Err = eRedisAccessError.Command_Exec_Fail;
                SvLogger.Fatal(ex, "{0}\n{1}.", ex.Message, ex.StackTrace);
            }

#if RedisCommandSpendTime
            m_sw.Stop();
            m_spendMillisecArr[1] = m_sw.ElapsedMilliseconds;
            m_sw.Restart();
#endif

            return(m_Err);
        }
Example #8
0
        private void run()
        {
            while (m_runThread)
            {
                if (m_redisCliDisconnect == false)
                {
                    try
                    {
                        byte[][] datas = m_redisAccess.RedisCli.BRPop(m_channelNameArr, 1);
                        if (datas.Length > 1)
                        {
                            RedisProtocolData protocolData = new RedisProtocolData(ref datas[1]);
                            lock (m_protocolDatasLockObj)
                                m_selfThreadProtocolDataList.Add(protocolData);
                        }
                    }
                    catch (Exception ex)
                    {
                        if (m_redisAccess.RedisCli.IsSocketConnected() == false)
                        {
                            m_redisCliDisconnect = true;
                        }

                        SvLogger.Fatal(ex, "{0}\n{1}.", ex.Message, ex.StackTrace);
                    }
                }
                else
                {
                    try
                    {
                        if (m_redisAccess.Reconnect())
                        {
                            m_redisCliDisconnect = false;
                        }
                        else
                        {
                            Thread.Sleep(1000);
                        }
                    }
                    catch (Exception ex)
                    {
                        Thread.Sleep(1000);
                    }
                }
            }
        }
Example #9
0
        /// <summary>
        /// 初始化DB连接
        /// </summary>
        /// <param name="dbConnFlag"></param>
        /// <param name="ip"></param>
        /// <param name="port"></param>
        /// <param name="name"></param>
        /// <param name="user"></param>
        /// <param name="passwrod"></param>
        /// <returns></returns>
        public bool InitDBConnection(eDbConnFlag dbConnFlag, string ip, int port, string name, string user, string passwrod)
        {
            //配置载入
            try
            {
                int errCode = DbAccess.Instance.InitilizeDbConn(dbConnFlag, "mysql", ip, port.ToString(), name, user, passwrod, 0);
                if (errCode != 0)
                {
                    return(false);
                }
            }
            catch (Exception ex)
            {
                SvLogger.Fatal(ex, "Connect MySql DataBase Fail: ErrMsg={0}, Stack={1}.", ex.Message, ex.StackTrace);
                return(false);
            }

            return(true);
        }
Example #10
0
//        public RedisHashMSetKeyValue(string hashID, Dictionary<string, ByteArray> dataDic, RedisCommandCallBackNullFunc commandCallBack, params object[] argv)
//            : base(commandCallBack != null)
//        {
//            m_hashID = hashID;
//            m_dataByteArrDic = dataDic;
//            m_isStrValue = false;
//            m_commandCallBack = commandCallBack;
//            m_commandCallBackArgv = argv;
//#if RedisCommandSpendTime
//            m_sw.Start();
//#endif
//        }

        public override eRedisAccessError DoCommand(RedisClient redisCli)
        {
#if RedisCommandSpendTime
            m_sw.Stop();
            m_spendMillisecArr[0] = m_sw.ElapsedMilliseconds;
            m_sw.Restart();
#endif
            try
            {
                if (m_isStrValue == true)
                {
                    redisCli.SetRangeInHash(m_hashID, m_dataStrDic);
                }
                //else
                //{
                //    byte[][] m_keysArr = new byte[m_dataByteArrDic.Count][];
                //    byte[][] m_valuesArr = new byte[m_dataByteArrDic.Count][];
                //    int index = 0;
                //    foreach(KeyValuePair<string, ByteArray> dataByteArrEle in m_dataByteArrDic)
                //    {
                //        m_keysArr[index] = dataByteArrEle.Key.ToUtf8Bytes();
                //        m_valuesArr[index] = RedisCommonFunc.ObjByteArrayToRedisObjBytes(dataByteArrEle.Value);
                //        ++index;
                //    }
                //    redisCli.HMSet(m_hashID, m_keysArr, m_valuesArr);
                //}
            }
            catch (Exception ex)
            {
                m_Err = eRedisAccessError.Command_Exec_Fail;
                SvLogger.Fatal(ex, "{0}\n{1}.", ex.Message, ex.StackTrace);
            }

#if RedisCommandSpendTime
            m_sw.Stop();
            m_spendMillisecArr[1] = m_sw.ElapsedMilliseconds;
            m_sw.Restart();
#endif

            return(m_Err);
        }
Example #11
0
        /// <summary>
        /// 服务逻辑更新
        /// </summary>
        public void Update()
        {
            try
            {
                #region 协议处理
                ClientProtocolDealManager.Instance.TransferRecvClientData(ref m_protocolList);
                if (m_protocolList.Count > 0)
                {
                    for (int i = 0; i < m_protocolList.Count; i++)
                    {
                        try
                        {
                            //ServerProtocolDealManager.Instance.ServerSend2ClientData(clientSessionID, protocolData);
                        }
                        catch (Exception ex)
                        {
                            SvLogger.Fatal(ex, string.Format("Param Proto Exception : {0}\r\nStackTrace : \r\n{1}", ex.Message, ex.StackTrace));
                        }
                    }
                    m_protocolList.Clear();
                }
                #endregion

                #region 数据库回调处理

                List <DbAccessPoolVistor> dapvistorlist = DbAccessPool.GetVistorList();
                for (int i = 0; i < dapvistorlist.Count; i++)
                {
                    DbAccessPoolVistor dapvistor = dapvistorlist[i];
                    int      callbackNum         = dapvistor.GetCallbackNum();
                    int      doBackNum           = 0;
                    int      vStartTick          = Environment.TickCount;
                    int      doStartTick;
                    DateTime doStartTime;
                    while (doBackNum < callbackNum)
                    {
                        doStartTick = Environment.TickCount;
                        doStartTime = HTBaseFunc.GetTime(0);
                        DbAccessItem dbi = dapvistor.PopupCallback();
                        if (dbi != null)
                        {
                            dbi.OnFinish(dbi);
                        }
                        ++doBackNum;
                        int doEndTick    = Environment.TickCount;
                        int doSpendTicks = (doEndTick >= doStartTick ? doEndTick - doStartTick : (int.MaxValue + doEndTick) + (int.MaxValue - doStartTick));
                        if (doSpendTicks >= 1000)
                        {
                            SvLogger.Warn("Update TimeOut : DbAccessPoolCallback {0}, SpendMs = {1}, SpName = {2}, StartTime = {3}.", dapvistor.Flag, doSpendTicks, ((dbi != null) ? dbi.SpName : ""), doStartTime.ToString("yyyy-MM-dd HH:mm:ss.fff"));
                        }
                        int vSpendTicks = (doEndTick >= vStartTick ? doEndTick - vStartTick : doEndTick + (int.MaxValue - vStartTick));
                        if (vSpendTicks >= SvrCommCfg.Instance.DbAccessPoolCallbackDealInterval)
                        {
                            break;
                        }
                    }
                }

                #endregion

                #region 定时打印服务器监控信息

                m_svrCheckEndTicket   = Environment.TickCount;
                m_svrCheckSpendTicket = (m_svrCheckEndTicket >= m_svrCheckStartTicket ? m_svrCheckEndTicket - m_svrCheckStartTicket : (int.MaxValue + m_svrCheckEndTicket) + (int.MaxValue - m_svrCheckStartTicket));
                if (m_svrCheckSpendTicket >= 60000)
                {
                    m_svrCheckStartTicket = m_svrCheckEndTicket;
                    ServerCommon.DbAccess.Instance.ShowDBAccCountInPool();
                }

                #endregion

                #region 内存回收

                if (m_lastMemoryCheck.AddSeconds(30) < HTBaseFunc.GetTime(0))
                {
                    if (m_lastGcTime.AddSeconds(30) < HTBaseFunc.GetTime(0) && System.Diagnostics.Process.GetCurrentProcess().WorkingSet64 > 128 * 1024 * 1024)
                    {
                        GC.Collect();
                        m_lastGcTime = HTBaseFunc.GetTime(0);
                    }

                    m_lastMemoryCheck = HTBaseFunc.GetTime(0);
                }

                #endregion
            }
            catch (Exception ex)
            {
                SvLogger.Fatal(ex, string.Format("Main Logic Exception : {0}\r\nStackTrace : \r\n{1}", ex.Message, ex.StackTrace));
            }
        }
Example #12
0
        /// <summary>
        /// 初始化服务实例
        /// </summary>
        /// <returns></returns>
        public override bool Init(string[] args)
        {
            if (base.Init(args) == false)
            {
                return(false);
            }

            #region 初始化服务配置

            //初始化LOG日志配置
            SvLogger.Init(XmlConfigure.Instance.GetAppConfigString("LogFile"), XmlConfigure.Instance.GetAppConfigString("LogFileLevel"), XmlConfigure.Instance.GetAppConfigString("LogConsoleLevel"));

            ServerConfigData.ListenPort = XmlConfigure.Instance.GetAppConfigInt("ListenPort");
            ServerConfigData.DBIP       = XmlConfigure.Instance.GetAppConfigString("DBIP");
            ServerConfigData.DBPort     = XmlConfigure.Instance.GetAppConfigInt("DBPort");
            ServerConfigData.DBName     = XmlConfigure.Instance.GetAppConfigString("DBName");
            ServerConfigData.DBUser     = XmlConfigure.Instance.GetAppConfigString("DBUser");
            ServerConfigData.DBPassword = XmlConfigure.Instance.GetAppConfigString("DBPassword");

            ServerConfigData.OSSPath     = XmlConfigure.Instance.GetAppConfigString("OSSPath");
            ServerConfigData.OSSUser     = XmlConfigure.Instance.GetAppConfigString("OSSUser");
            ServerConfigData.OSSPassword = XmlConfigure.Instance.GetAppConfigString("OSSPassword");

            #endregion

            #region 网络组更新启动
            try
            {
                SvLogger.Info("<< Start Network Listen : OutSidePort={0}.", ServerConfigData.ListenPort);
                ServerCommon.Network.XDNetworkManager.Instance.InitConfig(ServerConfigData.ListenPort);
                ServerCommon.Network.XDNetworkManager.Instance.StartRun();
            }
            catch (Exception ex)
            {
                SvLogger.Fatal(ex, ">> ****** Network Listen Fail! Msg={0}", ex.Message);
                return(false);
            }
            SvLogger.Info(">> Network Listen Succ !!!");
            #endregion

            #region 数据库连接

            bool dbConnectBack = false;
            dbConnectBack = DBAccessCfg.Instance.InitDBConnection(eDbConnFlag.Game,
                                                                  ServerConfigData.DBIP,
                                                                  ServerConfigData.DBPort,
                                                                  ServerConfigData.DBName,
                                                                  ServerConfigData.DBUser,
                                                                  ServerConfigData.DBPassword);
            if (dbConnectBack == false)
            {
                SvLogger.Error("DB Access Config Deal Error!");
                return(false);
            }

            #endregion

            #region 从数据库加载服务器组配置数据

            //LoadDataFromMySqlManager.Instance.m_OnLoadAllTableSucc = onLoadConfigFromDBFinish;
            //LoadDataFromMySqlManager.Instance.LoadData();

            #endregion

            return(true);
        }
Example #13
0
        private eRedisAccessError commandDeal()
        {
            if (m_redisCliDisconnect == true)
            {
                return(eRedisAccessError.Connection_Is_Disconnect);
            }

            eRedisAccessError errID = eRedisAccessError.None;

            lock (m_mainThreadCommandListLuckObj)
            {
                if (m_mainThreadCommandList.Count > 0)
                {
                    m_selfThreadCommandList.AddRange(m_mainThreadCommandList);
                    m_mainThreadCommandList.Clear();
                }
            }

            if (m_selfThreadCommandList.Count > 0)
            {
                int i = 0;
                for (; i < m_selfThreadCommandList.Count; ++i)
                {
                    try
                    {
                        errID = m_selfThreadCommandList[i].DoCommand(m_redisAccess.RedisCli);
                        if (errID != 0)
                        {
                            if (m_redisAccess.RedisCli.Ping() == false)
                            {
                                m_redisCliDisconnect = true;
                                if (i > 0)
                                {
                                    m_selfThreadCommandList.RemoveRange(0, i);
                                    i = 0;
                                }
                                break;
                            }
                        }
                        if (m_selfThreadCommandList[i].NeedDealCallBack == true)
                        {
                            m_selfThreadDealedCommandList.Add(m_selfThreadCommandList[i]);
                        }
                    }
                    catch (Exception ex)
                    {
                        errID = eRedisAccessError.Command_Exec_Exception;
                        SvLogger.Fatal(ex, "Redis Command Deal Exception: {0}\r\nStackTrace : \r\n{1}", ex.Message, ex.StackTrace);
                    }
                }
                if (i == m_selfThreadCommandList.Count)
                {
                    m_selfThreadCommandList.Clear();
                }
            }

            if (m_selfThreadDealedCommandList.Count > 0)
            {
                lock (m_mainThreadDealdCommandListLuckObj)
                {
                    m_mainThreadDealedCommandList.AddRange(m_selfThreadDealedCommandList);
                }

                m_selfThreadDealedCommandList.Clear();
            }

            return(errID);
        }
Example #14
0
        private void run()
        {
            while (m_runThread)
            {
                m_stopwatch.Restart();
                if (m_redisCliDisconnect == false)
                {
                    try
                    {
                        if (commandDeal() > 0)
                        {
                            try
                            {
                                if (m_redisAccess.Reconnect() == true)
                                {
                                    m_redisCliDisconnect = false;
                                }
                            }
                            catch (Exception ex)
                            {
                                m_redisCliDisconnect = true;
                                SvLogger.Fatal(ex, "{0}\n{1}.", ex.Message, ex.StackTrace);
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        if (m_redisAccess.RedisCli.IsSocketConnected() == false)
                        {
                            m_redisCliDisconnect = true;
                        }

                        SvLogger.Fatal(ex, "{0}\n{1}.", ex.Message, ex.StackTrace);
                    }
                }
                else
                {
                    try
                    {
                        if (m_redisAccess.Reconnect())
                        {
                            m_redisCliDisconnect = false;
                        }
                        else
                        {
                            Thread.Sleep(1000);
                        }
                    }
                    catch (Exception ex)
                    {
                        Thread.Sleep(1000);
                    }
                }
                m_stopwatch.Stop();
                if (m_stopwatch.Elapsed < m_maxSleepTS)
                {
                    Thread.Sleep(m_maxSleepTS - m_stopwatch.Elapsed);
                }
                else
                {
                    Thread.Sleep(1);
                }
            }

            commandDeal();

            m_redisAccess.Close();
        }
Example #15
0
        /// <summary>
        /// 初始化数据库连接
        /// </summary>
        /// <param name="dbConnFlag">连接名</param>
        /// <param name="serverType">数据库类型</param>
        /// <param name="serverIp">数据库服务器名</param>
        /// <param name="serverPort">数据库端口</param>
        /// <param name="databaseName">数据库名</param>
        /// <param name="userName">数据库用户名</param>
        /// <param name="userPass">数据库用户密码</param>
        /// <param name="childConnCount">子连接个数</param>
        /// <returns>返回错误信息</returns>
        public int InitilizeDbConn(eDbConnFlag dbConnFlag, string serverType, string serverIp, string serverPort, string databaseName, string userName, string userPass, int childConnCount)
        {
            int errCode = 0;

            //最终Connect Flag生成
            m_connFlagMakeLines[dbConnFlag] += 1;
            int lineIndex = Convert.ToInt32(m_connFlagMakeLines[dbConnFlag]);
            int connFlag  = Convert.ToInt32(dbConnFlag) | lineIndex;

            DbAccessPool dapool = DbAccessPool.GetPool(connFlag);

            if (dapool != null)
            {
                errCode = 1111;
                SvLogger.Error("Had Same DB Connections : ConnectType={0}, ConnectFlag={1}.", dbConnFlag, connFlag);
                return(errCode);
            }

            //获取SQL日志记录池
            DbAccessPool sqlogdapool = null;
            //if (dbConnFlag != eDbConnFlag.SqlLog)
            //    sqlogdapool = DbAccessPool.GetPool(EnumDbConnName.SqlLog.ToString());

            //建立数据库连接
            DbAccessPoolVistor vistor = new DbAccessPoolVistor(connFlag);

            dapool = new DbAccessPool(connFlag, SvLogger.GetLogger(), vistor, sqlogdapool);
            try
            {
                dapool.Start(serverType, serverIp, serverPort, databaseName, userName, userPass);
            }
            catch (Exception ex)
            {
                SvLogger.Fatal(ex, "{0}\n{1}.", ex.Message, ex.StackTrace);
                errCode = 1111;
                return(errCode);
            }
            int mainFlag = dapool.Flag;

            if (dbConnFlag == eDbConnFlag.Game)
            {
                m_gameDBMainConnFlagList.Add(dapool.Flag);
            }
            else if (dbConnFlag == eDbConnFlag.Log)
            {
                m_logDbAccPool = dapool;
            }
            else if (dbConnFlag == eDbConnFlag.Secd)
            {
                m_secdDbAccPool = dapool;
            }
            else if (dbConnFlag == eDbConnFlag.GM)
            {
                m_gmDBAccPool = dapool;
            }
            else if (dbConnFlag == eDbConnFlag.Platform)
            {
                m_platformDBAccPool = dapool;
            }
            else if (dbConnFlag == eDbConnFlag.Moniteor)
            {
                m_moniteorDBAccPool = dapool;
            }
            else if (dbConnFlag == eDbConnFlag.Entry)
            {
                m_entryDBAccPool = dapool;
            }
            else if (dbConnFlag == eDbConnFlag.GiftCode)
            {
                m_giftCodeDBAccPool = dapool;
            }

            //加入池
            DbAccessPool.AddPool(dapool);

            //Game数据库子连接建立
            if (dbConnFlag == eDbConnFlag.Game)
            {
                for (int i = 0; i < childConnCount; ++i)
                {
                    //最终Connect Flag生成
                    m_connFlagMakeLines[dbConnFlag] += 1;
                    lineIndex = Convert.ToInt32(m_connFlagMakeLines[dbConnFlag]);
                    connFlag  = Convert.ToInt32(dbConnFlag) | lineIndex;

                    dapool = DbAccessPool.GetPool(connFlag);
                    if (dapool != null)
                    {
                        errCode = 1111;
                        SvLogger.Error("Had Same DB Connections : ConnectType={0}, ConnectFlag={1}.", dbConnFlag, connFlag);
                        return(errCode);
                    }

                    //获取SQL日志记录池
                    sqlogdapool = null;
                    //if (dbConnFlag != eDbConnFlag.SqlLog)
                    //    sqlogdapool = DbAccessPool.GetPool(EnumDbConnName.SqlLog.ToString());

                    //建立数据库连接
                    vistor = new DbAccessPoolVistor(connFlag);
                    dapool = new DbAccessPool(connFlag, SvLogger.GetLogger(), vistor, sqlogdapool);
                    try
                    {
                        dapool.Start(serverType, serverIp, serverPort, databaseName, userName, userPass);
                    }
                    catch (Exception ex)
                    {
                        SvLogger.Fatal(ex, "{0}\n{1}.", ex.Message, ex.StackTrace);
                        errCode = 1111;
                        return(errCode);
                    }
                    List <int> childList;
                    if (m_gameDBChildConnFlagDic.TryGetValue(mainFlag, out childList) == false)
                    {
                        childList = new List <int>();
                        m_gameDBChildConnFlagDic.Add(mainFlag, childList);
                    }
                    childList.Add(dapool.Flag);

                    //加入池
                    DbAccessPool.AddPool(dapool);
                }
            }

            return(errCode);
        }
Example #16
0
        /// <summary>
        /// 初始化连接
        /// </summary>
        /// <returns>是否成功</returns>
        public bool InitDBConnections()
        {
            //配置载入
            XmlDocument doc = new XmlDocument();

            try
            {
                doc.Load(@"Config\DatabaseCfg.xml");

                XmlNode root = doc.SelectSingleNode("XmlAppConfig");
                if (root == null)
                {
                    return(false);
                }
                else
                {
                    XmlNodeList dbNodeList = root.SelectNodes("DBItem");
                    foreach (XmlNode dbNode in dbNodeList)
                    {
                        eDbConnFlag connFlag   = eDbConnFlag.None;
                        string      dbTypeName = dbNode.Attributes["name"].Value;
                        switch (dbTypeName)
                        {
                        case "GameDB":
                            connFlag = eDbConnFlag.Game;
                            break;

                        case "LogDB":
                            connFlag = eDbConnFlag.Log;
                            break;

                        case "SecdDB":
                            connFlag = eDbConnFlag.Secd;
                            break;

                        case "GMDB":
                            connFlag = eDbConnFlag.GM;
                            break;
                        }
                        if (connFlag != eDbConnFlag.None)
                        {
                            string      dbType = "", serverIP = "", serverPort = "", databaseName = "", userName = "", UserPass = "", childConnCount = "";
                            XmlNodeList cfgNodeList = dbNode.SelectNodes("config");
                            foreach (XmlNode cfgNode in cfgNodeList)
                            {
                                switch (cfgNode.Attributes["key"].Value)
                                {
                                case "DbType":
                                    dbType = cfgNode.Attributes["value"].Value;
                                    break;

                                case "ServerIP":
                                    serverIP = cfgNode.Attributes["value"].Value;
                                    break;

                                case "ServerPort":
                                    serverPort = cfgNode.Attributes["value"].Value;
                                    break;

                                case "DatabaseName":
                                    databaseName = cfgNode.Attributes["value"].Value;
                                    break;

                                case "UserName":
                                    userName = cfgNode.Attributes["value"].Value;
                                    break;

                                case "UserPass":
                                    UserPass = cfgNode.Attributes["value"].Value;
                                    break;

                                case "ChildConnCount":
                                    childConnCount = cfgNode.Attributes["value"].Value;
                                    break;
                                }
                            }
                            int errCode = DbAccess.Instance.InitilizeDbConn(connFlag, dbType, serverIP, serverPort, databaseName, userName, UserPass, Convert.ToInt32(childConnCount));
                            if (errCode != 0)
                            {
                                return(false);
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                SvLogger.Fatal(ex, "Load Fail Fatal: ErrMsg={0}, Stack={1}.", ex.Message, ex.StackTrace);
                return(false);
            }

            return(true);
        }
Example #17
0
 static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
 {
     SvLogger.Fatal((Exception)e.ExceptionObject, "UnhandledException");
 }