Esempio n. 1
0
 protected ExtensionFrame(byte extensionId)
 {
     _extensionId   = extensionId;
     _flags         = FrameFlags.ExtensionFrame;
     _receiveState  = ExtensionFrameState.PayloadLength;
     _sendCompleted = true;
 }
        public bool Read(byte[] buffer, ref int offset, ref int bytesTransferred)
        {
            while (bytesTransferred > 0)
            {
                switch (_receiveState)
                {
                    case ExtensionFrameState.Flags:
                        Flags = (FrameFlags) buffer[offset];
                        _receiveState = ExtensionFrameState.ExtensionId;
                        ++offset;
                        --bytesTransferred;
                        break;
                    case ExtensionFrameState.ExtensionId:
                        var extensionId = buffer[offset];
                        ++offset;
                        --bytesTransferred;
                        _receiveState = ExtensionFrameState.Payload;
                        _receiveFrame = (ExtensionFrame) _extensionFactory(extensionId);
                        break;

                    case ExtensionFrameState.Payload:
                        var isCompleted = _receiveFrame.Read(buffer, ref offset, ref bytesTransferred);
                        if (isCompleted)
                        {
                            _frameReceived(_receiveFrame);
                            _receiveState = ExtensionFrameState.Flags;
                        }

                        return isCompleted;
                }
            }

            return false;
        }
Esempio n. 3
0
        public bool Read(byte[] buffer, ref int offset, ref int bytesTransferred)
        {
            while (bytesTransferred > 0)
            {
                switch (_receiveState)
                {
                    case ExtensionFrameState.PayloadLength:
                        if (IsSmallPayload)
                        {
                            SetReceivePayloadLength(buffer[offset]);

                            _receiveState = ExtensionFrameState.Payload;
                            ++offset;
                            --bytesTransferred;
                        }
                        else
                        {
                            var isBufferCopyCompleted = CopyToReceiveBuffer(buffer, ref offset, ref bytesTransferred);
                            if (isBufferCopyCompleted)
                            {
                                if (BitConverter.IsLittleEndian)
                                    Array.Reverse(_receiveBuffer, 0, 4);

                                SetReceivePayloadLength(BitConverter.ToInt32(_receiveBuffer, 0));
                            }
                        }
                        break;

                    case ExtensionFrameState.Payload:
                        return ParsePayload(buffer, ref offset, ref bytesTransferred);
                }
            }

            return false;
        }
Esempio n. 4
0
 protected ExtensionFrame(byte extensionId)
 {
     _extensionId = extensionId;
     _flags = FrameFlags.ExtensionFrame;
     _receiveState = ExtensionFrameState.PayloadLength;
     _sendCompleted = true;
 }
        public bool Read(byte[] buffer, ref int offset, ref int bytesTransferred)
        {
            while (bytesTransferred > 0)
            {
                switch (_receiveState)
                {
                case ExtensionFrameState.Flags:
                    Flags         = (FrameFlags)buffer[offset];
                    _receiveState = ExtensionFrameState.ExtensionId;
                    ++offset;
                    --bytesTransferred;
                    break;

                case ExtensionFrameState.ExtensionId:
                    var extensionId = buffer[offset];
                    ++offset;
                    --bytesTransferred;
                    _receiveState = ExtensionFrameState.Payload;
                    _receiveFrame = (ExtensionFrame)_extensionFactory(extensionId);
                    break;

                case ExtensionFrameState.Payload:
                    var isCompleted = _receiveFrame.Read(buffer, ref offset, ref bytesTransferred);
                    if (isCompleted)
                    {
                        _frameReceived(_receiveFrame);
                        _receiveState = ExtensionFrameState.Flags;
                    }

                    return(isCompleted);
                }
            }

            return(false);
        }
Esempio n. 6
0
        public bool Read(byte[] buffer, ref int offset, ref int bytesTransferred)
        {
            while (bytesTransferred > 0)
            {
                switch (_receiveState)
                {
                case ExtensionFrameState.PayloadLength:
                    if (IsSmallPayload)
                    {
                        SetReceivePayloadLength(buffer[offset]);

                        _receiveState = ExtensionFrameState.Payload;
                        ++offset;
                        --bytesTransferred;
                    }
                    else
                    {
                        var isBufferCopyCompleted = CopyToReceiveBuffer(buffer, ref offset, ref bytesTransferred);
                        if (isBufferCopyCompleted)
                        {
                            if (BitConverter.IsLittleEndian)
                            {
                                Array.Reverse(_receiveBuffer, 0, 4);
                            }

                            SetReceivePayloadLength(BitConverter.ToInt32(_receiveBuffer, 0));
                        }
                    }
                    break;

                case ExtensionFrameState.Payload:
                    return(ParsePayload(buffer, ref offset, ref bytesTransferred));
                }
            }

            return(false);
        }