123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using SuperSocket.Common;
- namespace SuperSocket.SocketBase.Protocol
- {
-
-
-
-
- public abstract class ReceiveFilterBase<TRequestInfo> : IReceiveFilter<TRequestInfo>
- where TRequestInfo : IRequestInfo
- {
- private ArraySegmentList m_BufferSegments;
-
-
-
- protected ArraySegmentList BufferSegments
- {
- get { return m_BufferSegments; }
- }
-
-
-
- protected ReceiveFilterBase()
- {
- m_BufferSegments = new ArraySegmentList();
- }
-
-
-
-
- protected ReceiveFilterBase(ReceiveFilterBase<TRequestInfo> previousRequestFilter)
- {
- Initialize(previousRequestFilter);
- }
-
-
-
-
- public void Initialize(ReceiveFilterBase<TRequestInfo> previousRequestFilter)
- {
- m_BufferSegments = previousRequestFilter.BufferSegments;
- }
- #region IReceiveFilter<TRequestInfo> Members
-
-
-
-
-
-
-
-
-
- public abstract TRequestInfo Filter(byte[] readBuffer, int offset, int length, bool toBeCopied, out int rest);
-
-
-
-
-
-
- public int LeftBufferSize
- {
- get { return m_BufferSegments.Count; }
- }
-
-
-
-
-
-
- public IReceiveFilter<TRequestInfo> NextReceiveFilter { get; protected set; }
- #endregion
-
-
-
-
-
-
-
- protected void AddArraySegment(byte[] buffer, int offset, int length, bool toBeCopied)
- {
- m_BufferSegments.AddSegment(buffer, offset, length, toBeCopied);
- }
-
-
-
- protected void ClearBufferSegments()
- {
- m_BufferSegments.ClearSegements();
- }
-
-
-
- public virtual void Reset()
- {
- if(m_BufferSegments != null && m_BufferSegments.Count > 0)
- m_BufferSegments.ClearSegements();
- }
-
-
-
-
-
-
- public FilterState State { get; protected set; }
- }
- }
|