public abstract class HeronClient extends java.lang.Object implements ISelectHandler
2. handleWrite(SelectableChannel), which will try to get outgoing message by calling getOutgoingMessage(), pack the outgoing message into OutgoingPacket and write to the sockets.
3. handleConnect(SelectableChannel), which handles some basic setup when this client connect to remote endpoint.
4. handleAccept(SelectableChannel).
5. handleError(SelectableChannel). Remember, the socket client will register Read when the socket is connectible. However, it will register Write when having something to write since the socket in most cases is writable. To implement this, we will add the check whether write is needed into persistent tasks.
Modifier and Type | Field and Description |
---|---|
protected java.util.Map<REQID,java.lang.Object> |
contextMap |
protected java.util.Map<java.lang.String,com.google.protobuf.Message.Builder> |
messageMap |
protected java.util.Map<REQID,com.google.protobuf.Message.Builder> |
responseMessageMap |
Constructor and Description |
---|
HeronClient(NIOLooper s,
java.lang.String host,
int port,
HeronSocketOptions options)
Constructor
|
Modifier and Type | Method and Description |
---|---|
void |
forceFlushWithBestEffort() |
protected java.util.Map<REQID,java.lang.Object> |
getContextMap() |
protected java.util.Map<java.lang.String,com.google.protobuf.Message.Builder> |
getMessageMap() |
NIOLooper |
getNIOLooper() |
int |
getOutstandingPackets() |
protected java.util.Map<REQID,com.google.protobuf.Message.Builder> |
getResponseMessageMap() |
protected java.nio.channels.SocketChannel |
getSocketChannel() |
protected SocketChannelHelper |
getSocketChannelHelper() |
void |
handleAccept(java.nio.channels.SelectableChannel channel)
Handle a SelectableChannel when it is acceptable
|
void |
handleConnect(java.nio.channels.SelectableChannel channel)
Handle a SelectableChannel when it is connectible
|
void |
handleError(java.nio.channels.SelectableChannel channel)
Handle a SelectableChannel when it meets some errors
|
protected void |
handlePacket(IncomingPacket incomingPacket)
Handle an incomingPacket and if necessary,
convert it to Message and call onIncomingMessage() to handle it
|
void |
handleRead(java.nio.channels.SelectableChannel channel)
Handle a SelectableChannel when it is readable
|
protected void |
handleTimeout(REQID rid) |
void |
handleWrite(java.nio.channels.SelectableChannel channel)
Handle a SelectableChannel when it is writable
|
boolean |
isConnected() |
abstract void |
onClose() |
abstract void |
onConnect(StatusCode status) |
abstract void |
onError() |
abstract void |
onIncomingMessage(com.google.protobuf.Message message) |
abstract void |
onResponse(StatusCode status,
java.lang.Object ctx,
com.google.protobuf.Message response) |
void |
registerOnMessage(com.google.protobuf.Message.Builder builder) |
void |
registerTimerEventInNanoSeconds(long timerInNanoSecnods,
java.lang.Runnable task) |
void |
registerTimerEventInSeconds(long timerInSeconds,
java.lang.Runnable task) |
void |
sendMessage(com.google.protobuf.Message message) |
void |
sendRequest(com.google.protobuf.Message request,
com.google.protobuf.Message.Builder responseBuilder) |
void |
sendRequest(com.google.protobuf.Message request,
java.lang.Object context,
com.google.protobuf.Message.Builder responseBuilder,
long timeoutInSeconds) |
void |
start() |
void |
startReading() |
void |
startWriting() |
void |
stop() |
void |
stopReading() |
void |
stopWriting() |
protected java.util.Map<REQID,java.lang.Object> contextMap
protected java.util.Map<REQID,com.google.protobuf.Message.Builder> responseMessageMap
protected java.util.Map<java.lang.String,com.google.protobuf.Message.Builder> messageMap
public HeronClient(NIOLooper s, java.lang.String host, int port, HeronSocketOptions options)
s
- the NIOLooper bind with this socket clienthost
- the host of remote endpoint to communicate withport
- the port of remote endpoint to communicate withpublic void registerOnMessage(com.google.protobuf.Message.Builder builder)
public void start()
public void stop()
public void handleRead(java.nio.channels.SelectableChannel channel)
ISelectHandler
handleRead
in interface ISelectHandler
channel
- the channel ISelectHandler with handle withpublic void handleWrite(java.nio.channels.SelectableChannel channel)
ISelectHandler
handleWrite
in interface ISelectHandler
channel
- the channel ISelectHandler with handle withpublic void sendRequest(com.google.protobuf.Message request, java.lang.Object context, com.google.protobuf.Message.Builder responseBuilder, long timeoutInSeconds)
public void sendRequest(com.google.protobuf.Message request, com.google.protobuf.Message.Builder responseBuilder)
public void sendMessage(com.google.protobuf.Message message)
public boolean isConnected()
public NIOLooper getNIOLooper()
public void registerTimerEventInSeconds(long timerInSeconds, java.lang.Runnable task)
public void registerTimerEventInNanoSeconds(long timerInNanoSecnods, java.lang.Runnable task)
public void handleAccept(java.nio.channels.SelectableChannel channel)
ISelectHandler
handleAccept
in interface ISelectHandler
channel
- the channel ISelectHandler with handle withpublic void handleConnect(java.nio.channels.SelectableChannel channel)
ISelectHandler
handleConnect
in interface ISelectHandler
channel
- the channel ISelectHandler with handle withprotected void handlePacket(IncomingPacket incomingPacket)
protected void handleTimeout(REQID rid)
public void handleError(java.nio.channels.SelectableChannel channel)
ISelectHandler
handleError
in interface ISelectHandler
channel
- the channel ISelectHandler with handle withpublic void startReading()
public void stopReading()
public void startWriting()
public void stopWriting()
public int getOutstandingPackets()
public void forceFlushWithBestEffort()
public abstract void onError()
public abstract void onConnect(StatusCode status)
public abstract void onResponse(StatusCode status, java.lang.Object ctx, com.google.protobuf.Message response)
public abstract void onIncomingMessage(com.google.protobuf.Message message)
public abstract void onClose()
protected java.util.Map<java.lang.String,com.google.protobuf.Message.Builder> getMessageMap()
protected java.util.Map<REQID,com.google.protobuf.Message.Builder> getResponseMessageMap()
protected java.util.Map<REQID,java.lang.Object> getContextMap()
protected SocketChannelHelper getSocketChannelHelper()
protected java.nio.channels.SocketChannel getSocketChannel()