Esempio n. 1
0
        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();
        }