예제 #1
0
        /// <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());
        }
예제 #2
0
 /// <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;
     }
 }
예제 #3
0
 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;
     }
 }
예제 #4
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;
 }
예제 #5
0
 /// <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;
     }
 }
예제 #6
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;
        }
예제 #7
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;
            }
        }
예제 #8
0
 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;
     }
 }
예제 #9
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;
 }
예제 #10
0
 /// <summary>
 ///    �����ڲ����ݵ���ʼ����ƫ��
 /// </summary>
 public void ResetOffset()
 {
     _curUsedHead = _curGiveBackUsedHead = _head;
     _curUsedCount = _lastReCalculatedUsingCount;
 }
예제 #11
0
 /// <summary>
 ///    重置内部数据的起始可用偏移
 /// </summary>
 public void ResetOffset()
 {
     _curUsedHead  = _curGiveBackUsedHead = _head;
     _curUsedCount = _lastReCalculatedUsingCount;
 }