コード例 #1
0
        /// <summary>
        /// 载入道具返回
        /// </summary>
        /// <param name="dbi"></param>
        private void loadBack(DbAccessItem dbi)
        {
            if (dbi.Result.ErrCode != 0)
            {
                SvLogger.Error("DB Access Fail : Op=Load Shipping, ErrMsg={0}, Data={1}.", dbi.Result.ErrMsg, dbi.SpName);
            }
            else
            {
                DataTable dt = dbi.OutDs.Tables[0];
                foreach (DataRow dr in dt.Rows)
                {
                    TShipping t = new TShipping();
                    t.id       = HTBaseFunc.NullToLong(dr["ID"]);
                    t.name     = HTBaseFunc.NullToStr(dr["Name"]);
                    t.desc     = HTBaseFunc.NullToStr(dr["Desc"]);
                    t.country  = HTBaseFunc.NullToStr(dr["Country"]);
                    t.address  = HTBaseFunc.NullToStr(dr["Addres"]);
                    t.tel      = HTBaseFunc.NullToStr(dr["Tel"]);
                    t.linkMans = LinkmanStringToList(HTBaseFunc.NullToStr(dr["linkman"]));
                    Shipping s = new Shipping(t);
                    m_shippingDic[s.m_Data.id] = s;
                }

                DataLoadManager.Instance.AddLoadSuccTableCount();
            }

            OnLoadDataFromDBFinish(dbi.Result.ErrCode == 0);
        }
コード例 #2
0
        /// <summary>
        /// 载入道具返回
        /// </summary>
        /// <param name="dbi"></param>
        private void loadBack(DbAccessItem dbi)
        {
            if (dbi.Result.ErrCode != 0)
            {
                SvLogger.Error("DB Access Fail : Op=Load Account, ErrMsg={0}, Data={1}.", dbi.Result.ErrMsg, dbi.SpName);
            }
            else
            {
                DataTable dt = dbi.OutDs.Tables[0];
                foreach (DataRow dr in dt.Rows)
                {
                    TAccount t = new TAccount();
                    t.account    = HTBaseFunc.NullToStr(dr["LoginName"]);
                    t.token      = HTBaseFunc.NullToStr(dr["Token"]);
                    t.showName   = HTBaseFunc.NullToStr(dr["ShowName"]);
                    t.power      = HTBaseFunc.NullToInt(dr["Power"]);
                    t.createTime = HTBaseFunc.NullToDateTime(dr["CreateTime"]).ToString("yyyy-MM-dd HH:mm:ss");
                    Account acc = new Account(t);
                    m_dataDic[acc.m_Data.account] = acc;
                }

                DataLoadManager.Instance.AddLoadSuccTableCount();
            }

            OnLoadDataFromDBFinish(dbi.Result.ErrCode == 0);
        }
コード例 #3
0
        /// <summary>
        /// 载入道具返回
        /// </summary>
        /// <param name="dbi"></param>
        private void loadBack(DbAccessItem dbi)
        {
            if (dbi.Result.ErrCode != 0)
            {
                SvLogger.Error("DB Access Fail : Op=Load Item, ErrMsg={0}, Data={1}.", dbi.Result.ErrMsg, dbi.SpName);
            }
            else
            {
                DataTable dt = dbi.OutDs.Tables[0];
                foreach (DataRow dr in dt.Rows)
                {
                    TItem t = new TItem();
                    t.id   = HTBaseFunc.NullToLong(dr["ID"]);
                    t.name = HTBaseFunc.NullToStr(dr["Name"]);
                    t.desc = HTBaseFunc.NullToStr(dr["Desc"]);
                    string        marksStr  = HTBaseFunc.NullToStr(dr["Marks"]);
                    List <string> marksList = MarksStringToList(marksStr);
                    t.marks = new TStrList();
                    t.marks.GetElements().AddRange(marksList);
                    Item i = new Item(t);
                    m_itemDic[t.id] = i;
                }

                DataLoadManager.Instance.AddLoadSuccTableCount();
            }

            OnLoadDataFromDBFinish(dbi.Result.ErrCode == 0);
        }
コード例 #4
0
        public static void Exec(string sql, DbAccessItem.OnFinishAsync onFinish, object[] finishParams)
        {
            DbAccessPool pool = ServerCommon.DbAccess.Instance.GetDBMainPool(eDbConnFlag.Game);

            if (pool != null && pool.IsAvailable)
            {
                DbAccessItem dbi = new DbAccessItem(sql, onFinish, finishParams, true);
                pool.Push(dbi);
            }
            else
            {
                DbAccessItem dbi = new DbAccessItem(sql, onFinish, finishParams, true);
                dbi.Result = new ErrInfo(101, "DB Pool=Null Or Pool Is Not Available!"); //游戏数据库池不可访问
                onFinish(dbi);
            }
        }
コード例 #5
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));
            }
        }