Package com.cosylab.epics.caj.impl
Class CATransport
- java.lang.Object
-
- com.cosylab.epics.caj.impl.CATransport
-
- All Implemented Interfaces:
ReactorHandler,Transport,Timer.TimerRunnable
public class CATransport extends Object implements Transport, ReactorHandler, Timer.TimerRunnable
CA transport implementation.- Version:
- $id$
- Author:
- Matej Sekoranja
-
-
Field Summary
Fields Modifier and Type Field Description protected shortpriorityProcess priority.protected ResponseHandlerresponseHandlerCA reponse handler.
-
Constructor Summary
Constructors Constructor Description CATransport(CAJContext context, TransportClient client, ResponseHandler responseHandler, SocketChannel channel, short remoteTransportRevision, short priority)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description booleanacquire(TransportClient client)Acquires transport.voidbeaconArrivalNotify()Beacon arrival.voidchangedTransport()Changed transport (server restarted) notify.voidclose(boolean forced)Close connection.protected voiddisableFlowControl()Disable flow control (enables events).voidechoNotify()Called when echo request (state-of-health message) was responed.protected voidenableFlowControl()Enable flow control (disables events).booleanflush()Flush send buffer.booleanflushInternal()Flush send buffer (blocks until flushed).CAContextgetContext()Get context transport is living in.shortgetMinorRevision()Transport protocol minor revision.shortgetPriority()Transport priority.InetSocketAddressgetRemoteAddress()Get remote address.voidhandleEvent(SelectionKey key)Handle IO event.protected voidprocessRead()Process input (read) IO event.protected voidprocessRead(ByteBuffer socketBuffer)Process input.protected voidprocessWrite()Process output (write) IO event.voidrelease(TransportClient client)Releases transport.voidsend(ByteBuffer buffer, boolean asyncCloseOnError)Send a buffer through the transport.voidsetMinorRevision(short rev)voidsubmit(Request requestMessage)Enqueue (if supported or if necessary send immediately) request message.voidtimeout(long timeToRun)Beacon timer.voidupdateUserName()Sends client username message to the server.
-
-
-
Field Detail
-
responseHandler
protected ResponseHandler responseHandler
CA reponse handler.
-
priority
protected short priority
Process priority.
-
-
Constructor Detail
-
CATransport
public CATransport(CAJContext context, TransportClient client, ResponseHandler responseHandler, SocketChannel channel, short remoteTransportRevision, short priority)
- Parameters:
context-responseHandler-client-channel-remoteTransportRevision-priority-
-
-
Method Detail
-
close
public void close(boolean forced)
Close connection.- Parameters:
forced- flag indicating if forced (e.g. forced disconnect) is required
-
acquire
public boolean acquire(TransportClient client)
Acquires transport.- Parameters:
client- client (channel) acquiring the transport- Returns:
trueif transport was granted,falseotherwise.
-
release
public void release(TransportClient client)
Releases transport.- Parameters:
client- client (channel) releasing the transport
-
getMinorRevision
public short getMinorRevision()
Description copied from interface:TransportTransport protocol minor revision.- Specified by:
getMinorRevisionin interfaceTransport- Returns:
- protocol minor revision.
- See Also:
Transport.getMinorRevision()
-
setMinorRevision
public void setMinorRevision(short rev)
-
handleEvent
public void handleEvent(SelectionKey key)
Handle IO event.- Specified by:
handleEventin interfaceReactorHandler- Parameters:
key- key to be processed.- See Also:
ReactorHandler.handleEvent(java.nio.channels.SelectionKey)
-
processRead
protected void processRead()
Process input (read) IO event. Alsp handles subscription flow control.
-
processRead
protected void processRead(ByteBuffer socketBuffer)
Process input.
-
processWrite
protected void processWrite()
Process output (write) IO event.
-
updateUserName
public void updateUserName()
Sends client username message to the server. User name is taken from System property "user.name".
-
disableFlowControl
protected void disableFlowControl()
Disable flow control (enables events).
-
enableFlowControl
protected void enableFlowControl()
Enable flow control (disables events).
-
send
public void send(ByteBuffer buffer, boolean asyncCloseOnError) throws IOException
Send a buffer through the transport. NOTE: TCP sent buffer/sending has to be synchronized.- Parameters:
buffer- buffer to be sent- Throws:
IOException
-
flush
public boolean flush()
Flush send buffer. ... by enabling SelectionKey.OP_WRITE and process in reactor.- Specified by:
flushin interfaceTransport- Returns:
trueon success,falseon failure.- See Also:
Transport.flush()
-
flushInternal
public boolean flushInternal()
Flush send buffer (blocks until flushed).- Returns:
- success flag.
- See Also:
Transport.flush()
-
submit
public void submit(Request requestMessage) throws IOException
Description copied from interface:TransportEnqueue (if supported or if necessary send immediately) request message. Message is sent immediately if its priority equalsSEND_IMMEDIATELY_PRIORITY.- Specified by:
submitin interfaceTransport- Parameters:
requestMessage- request message to enqueue.- Throws:
IOException- See Also:
Transport.submit(com.cosylab.epics.caj.impl.Request)
-
getContext
public CAContext getContext()
Description copied from interface:TransportGet context transport is living in.- Specified by:
getContextin interfaceTransport- Returns:
- context transport is living in.
- See Also:
Transport.getContext()
-
getRemoteAddress
public InetSocketAddress getRemoteAddress()
Description copied from interface:TransportGet remote address.- Specified by:
getRemoteAddressin interfaceTransport- Returns:
- remote address.
- See Also:
Transport.getRemoteAddress()
-
getPriority
public short getPriority()
Description copied from interface:TransportTransport priority.- Specified by:
getPriorityin interfaceTransport- Returns:
- protocol priority.
- See Also:
Transport.getPriority()
-
beaconArrivalNotify
public void beaconArrivalNotify()
Beacon arrival.
-
timeout
public void timeout(long timeToRun)
Beacon timer.- Specified by:
timeoutin interfaceTimer.TimerRunnable- Parameters:
timeToRun- time in ms to run.- See Also:
Timer.TimerRunnable.timeout(long)
-
echoNotify
public void echoNotify()
Called when echo request (state-of-health message) was responed.
-
changedTransport
public void changedTransport()
Changed transport (server restarted) notify.
-
-