Пример #1
0
            private bool tryGetPackage(byte[] buff, int len, int offset, LinkPackage package)
            {
                bool flag = false;
                int  t;

                while (offset < len && (!flag))
                {
                    PackageParseResult res = package.ReadFromBuffer(buff, len, offset, out t);
                    switch (res)
                    {
                    case PackageParseResult.NoSTX:
                        offset++;
                        break;

                    case PackageParseResult.NoEnoughData:
                        flag = true;
                        break;

                    case PackageParseResult.BadCheckSum:
                        Debug.WriteLine("[port scanner]bad checksum");
                        offset++;
                        break;

                    case PackageParseResult.Yes:
                        return(true);
                    }
                }
                return(false);
            }
Пример #2
0
        private void parseBuffer()
        {
            isParsingBuffer = true;
            int           offset   = 0;
            bool          flag     = false;
            bool          received = false;
            LinkEventArgs lea      = new LinkEventArgs();
            int           dataused;

            while (offset < bufferSize)
            {
                PackageParseResult res = receivePackage.ReadFromBuffer(buffer, bufferSize, offset, out dataused);
                switch (res)
                {
                case PackageParseResult.NoSTX:
                    offset++;
                    break;

                case PackageParseResult.NoEnoughData:
                    flag = true;
                    break;

                case PackageParseResult.BadCheckSum:
                    offset++;
                    break;

                case PackageParseResult.Yes:
                    offset += dataused;
                    receivePackage.TimeStamp = this.ConnectedTime;
                    //lock (ReceivedPackageQueue)
                    {
                        enqueueHandler.BeginInvoke(receivePackage.Clone(), null, null);
                        //receivedPackageQueue.Enqueue(receivePackage.Clone());
                    }
                    received = true;
                    lea.Package.Add(receivePackage.Clone());
                    break;
                }
                if (flag)
                {
                    break;
                }
            }

            for (int i = offset; i < bufferSize; i++)
            {
                buffer[i - offset] = buffer[i];
            }
            bufferSize     -= offset;
            isParsingBuffer = false;
            if (received)
            {
                OnReceivePackageEvent(this, lea);
            }
        }