Class ReactorClient
- java.lang.Object
-
- org.ovirt.vdsm.jsonrpc.client.reactors.ReactorClient
-
- Direct Known Subclasses:
StompCommonClient
public abstract class ReactorClient extends java.lang.ObjectAbstract implementation ofJsonRpcClientwhich handles low level networking.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static interfaceReactorClient.MessageListener
-
Field Summary
Fields Modifier and Type Field Description static intBUFFER_SIZEprotected java.nio.channels.SocketChannelchannelstatic java.lang.StringCLIENT_CLOSEDprivate java.util.concurrent.atomic.AtomicBooleanclosingprotected java.util.List<ReactorClient.MessageListener>eventListenersprotected java.util.concurrent.atomic.AtomicBooleanhalfprivate java.lang.Stringhostnameprotected java.nio.ByteBufferibuffprotected java.nio.channels.SelectionKeykeyprivate java.util.concurrent.atomic.AtomicLonglastIncomingHeartbeatprivate java.util.concurrent.atomic.AtomicLonglastOutgoingHeartbeatprivate static intLIMITprivate java.util.concurrent.locks.Locklockprivate static org.slf4j.Loggerlogprotected java.util.Deque<java.nio.ByteBuffer>outboxprotected ClientPolicypolicyprivate intportprotected Reactorreactor
-
Constructor Summary
Constructors Constructor Description ReactorClient(Reactor reactor, java.lang.String hostname, int port)
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description voidaddEventListener(ReactorClient.MessageListener el)protected abstract byte[]buildNetworkResponse(java.lang.String reason)Builds network issue message for specific protocol.protected abstract voidclean()Cleans internal state.java.util.concurrent.Future<java.lang.Void>close()protected voidcloseChannel()voidconnect()voiddisconnect(java.lang.String message)protected voidemitOnMessageReceived(byte[] message)java.lang.StringgetClientId()intgetConnectionId()private longgetHeartbeatTime()java.lang.StringgetHostname()java.util.List<java.security.cert.Certificate>getPeerCertificates()protected abstract OneTimeCallbackgetPostConnectCallback()ClientPolicygetRetryPolicy()java.nio.channels.SelectionKeygetSelectionKey()private booleanisIncomingHeartbeatExceeded()abstract booleanisInInit()booleanisOpen()private booleanisOutgoingHeartbeatExceeded()longnow()voidperformAction()protected abstract voidpostConnect(OneTimeCallback callback)Transport specific post connection functionality.abstract voidpostDisconnect()Cleans resources after disconnect.voidprocess()private voidprocessHeartbeat()protected abstract voidprocessIncoming()Process incoming channel.protected voidprocessOutgoing()protected abstract intread(java.nio.ByteBuffer buff)Reads provided buffer.voidremoveEventListener(ReactorClient.MessageListener el)private java.util.concurrent.Future<java.lang.Void>scheduleClose(java.lang.String message)protected <T> java.util.concurrent.FutureTask<T>scheduleTask(java.util.concurrent.Callable<T> callable)protected abstract voidsendHeartbeat()Client sends protocol specific heartbeat messageabstract voidsendMessage(byte[] message)Sends message using provided byte array.voidsetClientPolicy(ClientPolicy policy)abstract voidupdateInterestedOps()Updates selection key's operation set.protected voidupdateLastIncomingHeartbeat()protected voidupdateLastOutgoingHeartbeat()abstract voidvalidate(ClientPolicy policy)Validates policy when it is set.protected abstract voidwrite(java.nio.ByteBuffer buff)Writes provided buffer.
-
-
-
Field Detail
-
CLIENT_CLOSED
public static final java.lang.String CLIENT_CLOSED
- See Also:
- Constant Field Values
-
BUFFER_SIZE
public static final int BUFFER_SIZE
- See Also:
- Constant Field Values
-
LIMIT
private static final int LIMIT
- See Also:
- Constant Field Values
-
log
private static final org.slf4j.Logger log
-
hostname
private final java.lang.String hostname
-
port
private final int port
-
lock
private final java.util.concurrent.locks.Lock lock
-
lastIncomingHeartbeat
private final java.util.concurrent.atomic.AtomicLong lastIncomingHeartbeat
-
lastOutgoingHeartbeat
private final java.util.concurrent.atomic.AtomicLong lastOutgoingHeartbeat
-
closing
private final java.util.concurrent.atomic.AtomicBoolean closing
-
half
protected final java.util.concurrent.atomic.AtomicBoolean half
-
policy
protected volatile ClientPolicy policy
-
eventListeners
protected final java.util.List<ReactorClient.MessageListener> eventListeners
-
reactor
protected final Reactor reactor
-
outbox
protected final java.util.Deque<java.nio.ByteBuffer> outbox
-
key
protected java.nio.channels.SelectionKey key
-
ibuff
protected java.nio.ByteBuffer ibuff
-
channel
protected java.nio.channels.SocketChannel channel
-
-
Constructor Detail
-
ReactorClient
public ReactorClient(Reactor reactor, java.lang.String hostname, int port)
-
-
Method Detail
-
getHostname
public java.lang.String getHostname()
-
getClientId
public java.lang.String getClientId()
-
setClientPolicy
public void setClientPolicy(ClientPolicy policy)
-
getRetryPolicy
public ClientPolicy getRetryPolicy()
-
connect
public void connect() throws ClientConnectionException- Throws:
ClientConnectionException
-
getSelectionKey
public java.nio.channels.SelectionKey getSelectionKey()
-
addEventListener
public void addEventListener(ReactorClient.MessageListener el)
-
removeEventListener
public void removeEventListener(ReactorClient.MessageListener el)
-
emitOnMessageReceived
protected void emitOnMessageReceived(byte[] message)
-
disconnect
public final void disconnect(java.lang.String message)
-
close
public java.util.concurrent.Future<java.lang.Void> close()
-
scheduleClose
private java.util.concurrent.Future<java.lang.Void> scheduleClose(java.lang.String message)
-
scheduleTask
protected <T> java.util.concurrent.FutureTask<T> scheduleTask(java.util.concurrent.Callable<T> callable)
-
process
public void process() throws java.io.IOException, ClientConnectionException- Throws:
java.io.IOExceptionClientConnectionException
-
processIncoming
protected abstract void processIncoming() throws java.io.IOException, ClientConnectionExceptionProcess incoming channel.- Throws:
java.io.IOException- Thrown when reading issue occurred.ClientConnectionException- Thrown when issues with connection.
-
processHeartbeat
private void processHeartbeat()
-
getHeartbeatTime
private long getHeartbeatTime()
-
isIncomingHeartbeatExceeded
private boolean isIncomingHeartbeatExceeded()
-
updateLastIncomingHeartbeat
protected void updateLastIncomingHeartbeat()
-
updateLastOutgoingHeartbeat
protected void updateLastOutgoingHeartbeat()
-
processOutgoing
protected void processOutgoing() throws java.io.IOException- Throws:
java.io.IOException
-
closeChannel
protected void closeChannel()
-
isOpen
public boolean isOpen()
-
getConnectionId
public int getConnectionId()
-
performAction
public void performAction() throws java.io.IOException- Throws:
java.io.IOException
-
isOutgoingHeartbeatExceeded
private boolean isOutgoingHeartbeatExceeded()
-
now
public long now()
-
sendMessage
public abstract void sendMessage(byte[] message) throws ClientConnectionExceptionSends message using provided byte array.- Parameters:
message- - content of the message to sent.- Throws:
ClientConnectionException- when issues with connection.
-
read
protected abstract int read(java.nio.ByteBuffer buff) throws java.io.IOExceptionReads provided buffer.- Parameters:
buff- provided buffer to be read.- Returns:
- Number of bytes read.
- Throws:
java.io.IOException- when networking issue occurs.
-
write
protected abstract void write(java.nio.ByteBuffer buff) throws java.io.IOExceptionWrites provided buffer.- Parameters:
buff- provided buffer to be written.- Throws:
java.io.IOException- when networking issue occurs.
-
postConnect
protected abstract void postConnect(OneTimeCallback callback) throws ClientConnectionException
Transport specific post connection functionality.- Parameters:
callback- - callback which is executed after connection is estabilished.- Throws:
ClientConnectionException- when issues with connection.
-
updateInterestedOps
public abstract void updateInterestedOps()
Updates selection key's operation set.
-
getPostConnectCallback
protected abstract OneTimeCallback getPostConnectCallback()
- Returns:
- Client specific
OneTimeCallbackor null. The callback is executed after the connection is established.
-
postDisconnect
public abstract void postDisconnect()
Cleans resources after disconnect.
-
isInInit
public abstract boolean isInInit()
- Returns:
truewhen connection initialization is in progress like SSL hand shake.falsewhen connection is initialized.
-
buildNetworkResponse
protected abstract byte[] buildNetworkResponse(java.lang.String reason)
Builds network issue message for specific protocol.- Parameters:
reason- why we want to build network response.- Returns:
- byte array containing response.
-
sendHeartbeat
protected abstract void sendHeartbeat()
Client sends protocol specific heartbeat message
-
validate
public abstract void validate(ClientPolicy policy)
Validates policy when it is set.- Parameters:
policy- - validated policy
-
clean
protected abstract void clean()
Cleans internal state.
-
getPeerCertificates
public java.util.List<java.security.cert.Certificate> getPeerCertificates()
- Returns:
- the peer certificates of the current session
-
-