public void Add(byte[] octets) { // log.Debug("Adding to receive stream:{0:X}", octets); queue.Enqueue(octets, 0, octets.Length); HastyPacket packet = null; do { var octetCount = queue.Peek(targetBuffer, 0, targetBuffer.Length); if (octetCount == 0) { // log.Debug("octetCount zero"); return; } int newOffset; packet = PacketDecoder.Decode(targetBuffer, 0, octetCount, out newOffset, log); if (packet != null) { // log.Debug("Got packet!"); queue.Skip(newOffset); packetReceiver.ReceivePacket(packet); } else { // log.Debug("No packet so far"); } } while (packet != null); }
void ReceiveCallback(IAsyncResult ar) { if (!ar.IsCompleted) { log.Warning("AR is not completed!"); return; } if (stream == null) { log.Warning("Stream is null"); return; } int receivedOctets = -1; try { receivedOctets = stream.EndRead(ar); } catch (Exception e) { log.Exception(e); throw e; } if (receivedOctets <= 0) { log.Warning("Negative octets"); Disconnected("Receive"); return; } // LogOctets(receiveBuffer, receivedOctets); octetQueue.Enqueue(receiveBuffer, 0, receivedOctets); OnOctetQueueChanged(octetQueue); continueReceiving(); }