/// <summary> /// 如果数据满了,且缓冲区内的数据是空的则返回需要发送的数据 /// 调用Enqueue(...)后调用Dequeue(...),不能直接调用Dequeue(...) /// </summary> /// <param name="byteBuffer"></param> /// <param name="iOffset"></param> /// <param name="iLength"></param> /// <returns></returns> public void Enqueue(byte[] byteBuffer, long iOffset, long iLength) { if (byteBuffer == null) { throw new Exception("SendQueue.Enqueue(...) - byteBuffer == null error!"); } if (iOffset < 0 || iOffset >= byteBuffer.Length) { throw new Exception("SendQueue.Enqueue(...) - iOffset < 0 || iOffset >= byteBuffer.Length error!"); } if (iLength < 0 || iLength > byteBuffer.Length) // 如果iLength == 0就返回空,如果iLength == 0就跳过 { throw new Exception("SendQueue.Enqueue(...) - iLength < 0 || iLength > byteBuffer.Length error!"); } if ((byteBuffer.Length - iOffset) < iLength) { throw new Exception("SendQueue.Enqueue(...) - ( byteBuffer.Length - iOffset ) < iLength error!"); } m_LockFlushAndPending.Enter(); { do { if (m_FlushBuffer.IsNull == true) { // nothing yet buffered m_FlushBuffer = SendBuffer.Instance(); if (m_FlushBuffer.IsNull == true) { throw new Exception("SendQueue.Enqueue(...) - m_FlushBuffer.IsNull == true error!"); } } // 当前已经写入的字节 long iBytesWritten = m_FlushBuffer.Write(byteBuffer, iOffset, iLength); iOffset += iBytesWritten; iLength -= iBytesWritten; // 写入需要发送的数据的大小 m_WaitSendSize += iBytesWritten; // 如果数据没有满,且数据写入完毕则退出,返回空,不添加到集合内 if (m_FlushBuffer.IsFull == true) { // 如果满了添加到集合内的尾处 m_PendingBuffer.Enqueue(m_FlushBuffer); m_FlushBuffer = SendBuffer.NullBuffer; // 置空再次请求缓存 } } while (iLength > 0); } m_LockFlushAndPending.Exit(); }
public void InstanceTest() { SendBuffer expected = new SendBuffer(); // TODO: 初始化为适当的值 SendBuffer actual; actual = SendBuffer.Instance(); Assert.AreEqual(expected, actual); Assert.Inconclusive("验证此测试方法的正确性。"); }