Example #1
0
        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);
            }
        }
Example #2
0
        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)
        }