/// <summary> /// DUMP出当前NetworkContainer内部所包含的所有数据 /// </summary> /// <returns>返回包含的数据</returns> public string Dump() { if (_head == null) { return(string.Empty); } if (!Global.AllowedPrintDumpInfo) { return(string.Empty); } ThriftSegmentNode node = _head; StringBuilder s = new StringBuilder(); string spc = " "; string nxtSpace = " "; while (node != null) { byte[] data = new byte[node.RemainingSize]; Buffer.BlockCopy(node.Args.GetStub().Segment.Segment.Array, node.Args.GetStub().Segment.UsedOffset, data, 0, data.Length); byte[] array = data; s.AppendLine(string.Format("{0}Data: ", spc)).Append(spc).AppendLine("{"); int round = array.Length / 8 + (array.Length % 8 > 0 ? 1 : 0); int currentOffset, remainningLen; for (int j = 0; j < round; j++) { currentOffset = j * 8; remainningLen = ((array.Length - currentOffset) >= 8 ? 8 : (array.Length - currentOffset)); StringBuilder rawByteBuilder = new StringBuilder(); rawByteBuilder.Append(nxtSpace); for (int k = 0; k < remainningLen; k++) { rawByteBuilder.AppendFormat("0x{0}", array[currentOffset + k].ToString("X2")); if (k != remainningLen - 1) { rawByteBuilder.Append(", "); } } rawByteBuilder.Append(new string(' ', (remainningLen == 8 ? 5 : (8 - remainningLen) * 4 + (((8 - remainningLen) - 1) * 2) + 7))); for (int k = 0; k < remainningLen; k++) { if ((char)array[currentOffset + k] > 126 || (char)array[currentOffset + k] < 32) { rawByteBuilder.Append('.'); } else { rawByteBuilder.Append((char)array[currentOffset + k]); } } s.AppendLine(string.Format("{0}{1}", nxtSpace, rawByteBuilder)); } node = (ThriftSegmentNode)node.Next; } s.Append(spc).AppendLine("}"); return(s.ToString()); }
/// <summary> /// ��һ�θոս��յ�������������ݵ��������� /// </summary> /// <param name="args">���յ�����������</param> public void AppendNetworkData(SegmentReceiveEventArgs args) { if (_head == null) _head = _tail = _curUsedHead = _curGiveBackUsedHead = new ThriftSegmentNode(args); else { ThriftSegmentNode node = new ThriftSegmentNode(args); _tail.Next = node; node.Previous = _tail; _tail = (ThriftSegmentNode) _tail.Next; } }
private void ReCalculateCurrentUsedSegment() { if (_curUsedHead.Args.BytesTransferred - _curUsedCount <= 0) { if (_curUsedHead.Next != null) { _curGiveBackUsedHead = (ThriftSegmentNode)_curGiveBackUsedHead.Next; } _curUsedHead = (ThriftSegmentNode)_curUsedHead.Next; _curUsedCount = 0; _lastReCalculatedUsingCount = 0; } }
/// <summary> /// ִ�����ͷŻ����÷��й���Դ��ص�Ӧ�ó���������� /// </summary> /// <filterpriority>2</filterpriority> public void Dispose() { if (_head == null) return; ThriftSegmentNode node = _head; while (node != null) { node.Args.Complete(); node = (ThriftSegmentNode)node.Next; } _head = null; _tail = null; _curUsedHead = null; _curGiveBackUsedHead = null; }
/// <summary> /// 追加一段刚刚接收到的网络可用数据到此容器中 /// </summary> /// <param name="args">接收到的网络数据</param> public void AppendNetworkData(SegmentReceiveEventArgs args) { if (_head == null) { _head = _tail = _curUsedHead = _curGiveBackUsedHead = new ThriftSegmentNode(args); } else { ThriftSegmentNode node = new ThriftSegmentNode(args); _tail.Next = node; node.Previous = _tail; _tail = (ThriftSegmentNode)_tail.Next; } }
/// <summary> /// 执行与释放或重置非托管资源相关的应用程序定义的任务。 /// </summary> /// <filterpriority>2</filterpriority> public void Dispose() { if (_head == null) { return; } ThriftSegmentNode node = _head; while (node != null) { node.Args.Complete(); node = (ThriftSegmentNode)node.Next; } _head = null; _tail = null; _curUsedHead = null; _curGiveBackUsedHead = null; }
/// <summary> /// 变更内部可用数据的偏移 /// </summary> public void UpdateOffset() { if (_curUsedHead != null) { ReCalculateCurrentUsedSegment(); } if (_curUsedCount != 0) { _lastReCalculatedUsingCount = _curUsedCount; } ThriftSegmentNode node = (ThriftSegmentNode)(_curUsedHead == null ? _curGiveBackUsedHead : _curUsedHead.Previous); while (node != null) { node.Args.Complete(); node = (ThriftSegmentNode)node.Previous; } _curGiveBackUsedHead = _curUsedHead; _head = _curUsedHead; if (_head != null) { _head.Previous = null; } }
private void ReCalculateCurrentUsedSegment() { if (_curUsedHead.Args.BytesTransferred - _curUsedCount <= 0) { if (_curUsedHead.Next != null) _curGiveBackUsedHead = (ThriftSegmentNode) _curGiveBackUsedHead.Next; _curUsedHead = (ThriftSegmentNode) _curUsedHead.Next; _curUsedCount = 0; _lastReCalculatedUsingCount = 0; } }
/// <summary> /// ����ڲ��������ݵ�ƫ�� /// </summary> public void UpdateOffset() { if (_curUsedHead != null) ReCalculateCurrentUsedSegment(); if (_curUsedCount != 0) _lastReCalculatedUsingCount = _curUsedCount; ThriftSegmentNode node = (ThriftSegmentNode)(_curUsedHead == null ? _curGiveBackUsedHead : _curUsedHead.Previous); while (node != null) { node.Args.Complete(); node = (ThriftSegmentNode) node.Previous; } _curGiveBackUsedHead = _curUsedHead; _head = _curUsedHead; if (_head != null) _head.Previous = null; }
/// <summary> /// �����ڲ����ݵ���ʼ����ƫ�� /// </summary> public void ResetOffset() { _curUsedHead = _curGiveBackUsedHead = _head; _curUsedCount = _lastReCalculatedUsingCount; }
/// <summary> /// 重置内部数据的起始可用偏移 /// </summary> public void ResetOffset() { _curUsedHead = _curGiveBackUsedHead = _head; _curUsedCount = _lastReCalculatedUsingCount; }