Exemple #1
0
 // Token: 0x0600075B RID: 1883 RVA: 0x00006338 File Offset: 0x00004538
 public static ProcessResult Create(ProcessState state, string message)
 {
     return(ProcessResult.Create(state, message, null));
 }
Exemple #2
0
 // Token: 0x0600075C RID: 1884 RVA: 0x00006342 File Offset: 0x00004542
 public static ProcessResult Create(ProcessState state, IList <IPackageInfo> packages)
 {
     return(ProcessResult.Create(state, string.Empty, packages));
 }
Exemple #3
0
        public virtual ProcessResult Process(ArraySegment <byte> segment)
        {
            BufferList bufferList = m_ReceiveCache;

            bufferList.Add(segment);
            int rest = 0;
            IReceiveFilter <TPackageInfo> receiveFilter  = m_ReceiveFilter;
            SingleItemList <IPackageInfo> singleItemList = null;
            List <IPackageInfo>           list           = null;

            while (true)
            {
                int          count = bufferList.Last.Count;
                TPackageInfo val   = receiveFilter.Filter(bufferList, out rest);
                if (receiveFilter.State == FilterState.Error)
                {
                    return(ProcessResult.Create(ProcessState.Error));
                }
                if (m_MaxPackageLength > 0)
                {
                    int total = bufferList.Total;
                    if (total > m_MaxPackageLength)
                    {
                        return(ProcessResult.Create(ProcessState.Error, $"Max package length: {m_MaxPackageLength}, current processed length: {total}"));
                    }
                }
                IReceiveFilter <TPackageInfo> nextReceiveFilter = receiveFilter.NextReceiveFilter;
                if (val != null)
                {
                    receiveFilter.Reset();
                }
                if (nextReceiveFilter != null)
                {
                    receiveFilter = (m_ReceiveFilter = nextReceiveFilter);
                }
                if (val == null)
                {
                    if (rest > 0)
                    {
                        ArraySegment <byte> last = bufferList.Last;
                        if (rest != count)
                        {
                            PushResetData(segment, rest);
                        }
                        continue;
                    }
                    return(ProcessResult.Create(ProcessState.Cached, GetNotNullOne(list, singleItemList)));
                }
                if (list != null)
                {
                    list.Add(val);
                }
                else if (singleItemList == null)
                {
                    singleItemList = new SingleItemList <IPackageInfo>(val);
                }
                else
                {
                    if (list == null)
                    {
                        list = new List <IPackageInfo>();
                    }
                    list.Add(singleItemList[0]);
                    list.Add(val);
                    singleItemList = null;
                }
                if (val is IBufferedPackageInfo && (val as IBufferedPackageInfo).Data is BufferList)
                {
                    bufferList = (m_ReceiveCache = new BufferList());
                    if (rest <= 0)
                    {
                        return(ProcessResult.Create(ProcessState.Cached, GetNotNullOne(list, singleItemList)));
                    }
                }
                else
                {
                    m_ReceiveCache.Clear();
                    if (rest <= 0)
                    {
                        break;
                    }
                }
                PushResetData(segment, rest);
            }
            return(ProcessResult.Create(ProcessState.Completed, GetNotNullOne(list, singleItemList)));
        }