Package io.grpc.internal
Class MessageFramer
- java.lang.Object
-
- io.grpc.internal.MessageFramer
-
- All Implemented Interfaces:
Framer
public class MessageFramer extends java.lang.Object implements Framer
Encodes gRPC messages to be delivered via the transport layer which implementsMessageFramer.Sink.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private classMessageFramer.BufferChainOutputStreamProduce a collection ofWritableBufferinstances from the data written to anOutputStream.private classMessageFramer.OutputStreamAdapterOutputStream whose write()s are passed to the framer.static interfaceMessageFramer.SinkSink implemented by the transport layer to receive frames and forward them to their destination.
-
Field Summary
Fields Modifier and Type Field Description private WritableBufferbufferprivate WritableBufferAllocatorbufferAllocatorprivate booleanclosedprivate static byteCOMPRESSEDprivate Compressorcompressorprivate intcurrentMessageSeqNoprivate longcurrentMessageWireSizeprivate static intHEADER_LENGTHprivate java.nio.ByteBufferheaderScratchprivate intmaxOutboundMessageSizeprivate booleanmessageCompressionprivate intmessagesBufferedprivate static intNO_MAX_OUTBOUND_MESSAGE_SIZEprivate MessageFramer.OutputStreamAdapteroutputStreamAdapterprivate MessageFramer.Sinksinkprivate StatsTraceContextstatsTraceCtxprivate static byteUNCOMPRESSED
-
Constructor Summary
Constructors Constructor Description MessageFramer(MessageFramer.Sink sink, WritableBufferAllocator bufferAllocator, StatsTraceContext statsTraceCtx)Creates aMessageFramer.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description voidclose()Flushes and closes the framer and releases any buffers.private voidcommitToSink(boolean endOfStream, boolean flush)voiddispose()Closes the framer and releases any buffers, but does not flush.voidflush()Flushes any buffered data in the framer to the sink.private intgetKnownLength(java.io.InputStream inputStream)booleanisClosed()private voidreleaseBuffer()MessageFramersetCompressor(Compressor compressor)Set the compressor used for compression.voidsetMaxOutboundMessageSize(int maxSize)Set a size limit for each outbound message.MessageFramersetMessageCompression(boolean enable)Enable or disable compression.private voidverifyNotClosed()private voidwriteBufferChain(MessageFramer.BufferChainOutputStream bufferChain, boolean compressed)Write a message that has been serialized to a sequence of buffers.private intwriteCompressed(java.io.InputStream message, int unusedMessageLength)private intwriteKnownLengthUncompressed(java.io.InputStream message, int messageLength)Write an unserialized message with a known length, uncompressed.voidwritePayload(java.io.InputStream message)Writes out a payload message.private voidwriteRaw(byte[] b, int off, int len)private static intwriteToOutputStream(java.io.InputStream message, java.io.OutputStream outputStream)private intwriteUncompressed(java.io.InputStream message, int messageLength)
-
-
-
Field Detail
-
NO_MAX_OUTBOUND_MESSAGE_SIZE
private static final int NO_MAX_OUTBOUND_MESSAGE_SIZE
- See Also:
- Constant Field Values
-
HEADER_LENGTH
private static final int HEADER_LENGTH
- See Also:
- Constant Field Values
-
UNCOMPRESSED
private static final byte UNCOMPRESSED
- See Also:
- Constant Field Values
-
COMPRESSED
private static final byte COMPRESSED
- See Also:
- Constant Field Values
-
sink
private final MessageFramer.Sink sink
-
maxOutboundMessageSize
private int maxOutboundMessageSize
-
buffer
private WritableBuffer buffer
-
compressor
private Compressor compressor
-
messageCompression
private boolean messageCompression
-
outputStreamAdapter
private final MessageFramer.OutputStreamAdapter outputStreamAdapter
-
headerScratch
private final java.nio.ByteBuffer headerScratch
-
bufferAllocator
private final WritableBufferAllocator bufferAllocator
-
statsTraceCtx
private final StatsTraceContext statsTraceCtx
-
closed
private boolean closed
-
messagesBuffered
private int messagesBuffered
-
currentMessageSeqNo
private int currentMessageSeqNo
-
currentMessageWireSize
private long currentMessageWireSize
-
-
Constructor Detail
-
MessageFramer
public MessageFramer(MessageFramer.Sink sink, WritableBufferAllocator bufferAllocator, StatsTraceContext statsTraceCtx)
Creates aMessageFramer.- Parameters:
sink- the sink used to deliver frames to the transportbufferAllocator- allocates buffers that the transport can commit to the wire.
-
-
Method Detail
-
setCompressor
public MessageFramer setCompressor(Compressor compressor)
Description copied from interface:FramerSet the compressor used for compression.- Specified by:
setCompressorin interfaceFramer
-
setMessageCompression
public MessageFramer setMessageCompression(boolean enable)
Description copied from interface:FramerEnable or disable compression.- Specified by:
setMessageCompressionin interfaceFramer
-
setMaxOutboundMessageSize
public void setMaxOutboundMessageSize(int maxSize)
Description copied from interface:FramerSet a size limit for each outbound message.- Specified by:
setMaxOutboundMessageSizein interfaceFramer
-
writePayload
public void writePayload(java.io.InputStream message)
Writes out a payload message.- Specified by:
writePayloadin interfaceFramer- Parameters:
message- contains the message to be written out. It will be completely consumed.
-
writeUncompressed
private int writeUncompressed(java.io.InputStream message, int messageLength) throws java.io.IOException- Throws:
java.io.IOException
-
writeCompressed
private int writeCompressed(java.io.InputStream message, int unusedMessageLength) throws java.io.IOException- Throws:
java.io.IOException
-
getKnownLength
private int getKnownLength(java.io.InputStream inputStream) throws java.io.IOException- Throws:
java.io.IOException
-
writeKnownLengthUncompressed
private int writeKnownLengthUncompressed(java.io.InputStream message, int messageLength) throws java.io.IOExceptionWrite an unserialized message with a known length, uncompressed.- Throws:
java.io.IOException
-
writeBufferChain
private void writeBufferChain(MessageFramer.BufferChainOutputStream bufferChain, boolean compressed)
Write a message that has been serialized to a sequence of buffers.
-
writeToOutputStream
private static int writeToOutputStream(java.io.InputStream message, java.io.OutputStream outputStream) throws java.io.IOException- Throws:
java.io.IOException
-
writeRaw
private void writeRaw(byte[] b, int off, int len)
-
flush
public void flush()
Flushes any buffered data in the framer to the sink.
-
close
public void close()
Flushes and closes the framer and releases any buffers. After the framer is closed or disposed, additional calls to this method will have no affect.
-
dispose
public void dispose()
Closes the framer and releases any buffers, but does not flush. After the framer is closed or disposed, additional calls to this method will have no affect.
-
releaseBuffer
private void releaseBuffer()
-
commitToSink
private void commitToSink(boolean endOfStream, boolean flush)
-
verifyNotClosed
private void verifyNotClosed()
-
-