public LogicRecvBuffer GetUsedBuf() { lock (m_LockerForRecvList) { LogicRecvBuffer buffer = null; //-- 01. 在当前list中查找free的。 for (Int32 index = 0; index < m_RecvList.Count; ++index, m_iUsedPos++) { if (m_iUsedPos >= m_RecvList.Count) { m_iUsedPos = 0; } try { buffer = m_RecvList[m_iUsedPos]; } catch (System.Exception ex) { //-- log记录异常 //-- 从开始找到一个可以free的。 CommonDebugLog.LogWarning("ex:=[" + ex.ToString() + "]"); m_iUsedPos = 0; goto __NO_USED_LOGICSENDBUFFER; } if (buffer.GetUsedFlag() == false) { continue; } //-- test buffer.m_indexInPool = m_iUsedPos; m_iUsedPos++; if (m_iUsedPos >= m_RecvList.Count) { m_iUsedPos = 0; } buffer.GetMemoryStream().Seek(0, SeekOrigin.Begin); return(buffer); } __NO_USED_LOGICSENDBUFFER: //-- 02. 没有找到,则返回null return(null); } }
public LogicRecvBuffer GetEmptyBuf() { lock (m_LockerForRecvList) { LogicRecvBuffer buffer = null; //-- 01. 在当前list中查找free的。 for (Int32 index = 0; index < m_RecvList.Count; ++index, m_iEmptyPos++) { if (m_iEmptyPos >= m_RecvList.Count) { m_iEmptyPos = 0; } try { buffer = m_RecvList[m_iEmptyPos]; } catch (System.Exception ex) { //-- log记录异常 //-- 从开始找到一个可以free的。 CommonDebugLog.LogWarning("ex:=[" + ex.ToString() + "]"); m_iEmptyPos = 0; goto __NEW_LOGICSENDBUFFER; } if (buffer.GetUsedFlag() == true) { continue; } buffer.Clear(); //-- test buffer.m_indexInPool = m_iEmptyPos; m_iEmptyPos++; if (m_iEmptyPos >= m_RecvList.Count) { m_iEmptyPos = 0; } return(buffer); } __NEW_LOGICSENDBUFFER: //-- 02. 没有找到则需要添加 if ((buffer == null) || (buffer != null) && (buffer.GetUsedFlag() == true) ) { buffer = new LogicRecvBuffer(); //-TODO: 下面这种情况就SB了。。。 if (buffer == null) { //-- log 怎么处理。 } m_RecvList.Add(buffer); } buffer.Clear(); m_iEmptyPos++; if (m_iEmptyPos >= m_RecvList.Count) { m_iEmptyPos = 0; } //-- test buffer.m_indexInPool = (m_RecvList.Count - 1); return(buffer); } //-- end_lock(m_LockerForRecvList) }