public abstract class AbstractByteArrayCommandTransport extends CommandTransport
CommandTransportthat works with
byteinstead of command object. This base class hides away some of the
Commandserialization details. One less thing for transport implementers to worry about.
|Modifier and Type||Class and Description|
|Constructor and Description|
|Modifier and Type||Method and Description|
Starts the transport.
Starts the transport.
Writes a byte to the transport.
closeRead, closeWrite, getRemoteCapability
protected Channel channel
public abstract void writeBlock(Channel channel, byte payload) throws IOException
public abstract void setup(AbstractByteArrayCommandTransport.ByteArrayReceiver receiver)
CommandTransport.setup(Channel, CommandReceiver)for more details. In this subtype, we pass in
AbstractByteArrayCommandTransport.ByteArrayReceiverthat uses byte instead of
public final void setup(Channel channel, CommandTransport.CommandReceiver receiver)
Channel, after the
CommandTransport.getRemoteCapability()is invoked. The first purpose of this method is to provide a reference back to
Channel, and the second purpose of this method is to allow
CommandTransportto message pumping, where it starts receiving commands from the other side and pass them onto
CommandTransport.CommandReceiver. This abstraction enables asynchronous processing — for example you can have a single thread serving a large number of
Channels via NIO. For subtypes that prefer synchronous operation, extend from
Closing the read pump:
Channel.CloseCommand its own "end of command stream" marker, and
therefore under the orderly shutdown scenario, it doesn't rely on the transport to provide EOF-like
Channel will call your
CommandTransport.closeRead() (from the same thread
CommandTransport.CommandReceiver.handle(Command)) to indicate that it is done with the reading.
If the transport encounters any error from the lower layer (say, the underlying TCP/IP socket
encountered a REST), then call
CommandTransport.CommandReceiver.terminate(IOException) to initiate the abnormal
channel termination. This in turn calls
CommandTransport.closeRead() to shutdown the reader side.
public final void write(Command cmd, boolean last) throws IOException
Channelto send one command to the other side.
Channelserializes the invocation of this method for ordering. That is, at any given point in time only one thread executes this method.
Asynchronous transport must serialize the given command object before returning from this method, as its content can be modified by the calling thread as soon as this method returns. Also, if an asynchronous transport chooses to return from this method without committing data to the network, then it is also responsible for a flow control (by blocking this method if too many commands are queueing up waiting for the network to unclog.)
cmd- The command object that needs to be sent. Never null. This must be serialized via
last- Informational flag that indicates that this is the last call of the
Copyright © 2004–2022. All rights reserved.