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); }
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); } }