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 class
MessageFramer.BufferChainOutputStream
Produce a collection ofWritableBuffer
instances from the data written to anOutputStream
.private class
MessageFramer.OutputStreamAdapter
OutputStream whose write()s are passed to the framer.static interface
MessageFramer.Sink
Sink implemented by the transport layer to receive frames and forward them to their destination.
-
Field Summary
Fields Modifier and Type Field Description private WritableBuffer
buffer
private WritableBufferAllocator
bufferAllocator
private boolean
closed
private static byte
COMPRESSED
private Compressor
compressor
private int
currentMessageSeqNo
private long
currentMessageWireSize
private static int
HEADER_LENGTH
private java.nio.ByteBuffer
headerScratch
private int
maxOutboundMessageSize
private boolean
messageCompression
private int
messagesBuffered
private static int
NO_MAX_OUTBOUND_MESSAGE_SIZE
private MessageFramer.OutputStreamAdapter
outputStreamAdapter
private MessageFramer.Sink
sink
private StatsTraceContext
statsTraceCtx
private static byte
UNCOMPRESSED
-
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 void
close()
Flushes and closes the framer and releases any buffers.private void
commitToSink(boolean endOfStream, boolean flush)
void
dispose()
Closes the framer and releases any buffers, but does not flush.void
flush()
Flushes any buffered data in the framer to the sink.private int
getKnownLength(java.io.InputStream inputStream)
boolean
isClosed()
private void
releaseBuffer()
MessageFramer
setCompressor(Compressor compressor)
Set the compressor used for compression.void
setMaxOutboundMessageSize(int maxSize)
Set a size limit for each outbound message.MessageFramer
setMessageCompression(boolean enable)
Enable or disable compression.private void
verifyNotClosed()
private void
writeBufferChain(MessageFramer.BufferChainOutputStream bufferChain, boolean compressed)
Write a message that has been serialized to a sequence of buffers.private int
writeCompressed(java.io.InputStream message, int unusedMessageLength)
private int
writeKnownLengthUncompressed(java.io.InputStream message, int messageLength)
Write an unserialized message with a known length, uncompressed.void
writePayload(java.io.InputStream message)
Writes out a payload message.private void
writeRaw(byte[] b, int off, int len)
private static int
writeToOutputStream(java.io.InputStream message, java.io.OutputStream outputStream)
private int
writeUncompressed(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:Framer
Set the compressor used for compression.- Specified by:
setCompressor
in interfaceFramer
-
setMessageCompression
public MessageFramer setMessageCompression(boolean enable)
Description copied from interface:Framer
Enable or disable compression.- Specified by:
setMessageCompression
in interfaceFramer
-
setMaxOutboundMessageSize
public void setMaxOutboundMessageSize(int maxSize)
Description copied from interface:Framer
Set a size limit for each outbound message.- Specified by:
setMaxOutboundMessageSize
in interfaceFramer
-
writePayload
public void writePayload(java.io.InputStream message)
Writes out a payload message.- Specified by:
writePayload
in 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.IOException
Write 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()
-
-