/// <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); }
/// <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); }
/// <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); }
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); } }
/// <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)); } }