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