Crossfire JXClient, Trunk
Public Member Functions | Private Member Functions | Private Attributes | Static Private Attributes | List of all members
com.realtime.crossfire.jxclient.server.socket.ClientSocket Class Reference
Collaboration diagram for com.realtime.crossfire.jxclient.server.socket.ClientSocket:
Collaboration graph

Public Member Functions

void addClientSocketListener (@NotNull final ClientSocketListener clientSocketListener)
 
 ClientSocket (@NotNull final GuiStateManager guiStateManager, @Nullable final DebugWriter debugProtocol) throws IOException
 
void connect (@NotNull final String host, final int port)
 
void disconnect (@NotNull final String reason, final boolean isError)
 
void removeClientSocketListener (@NotNull final ClientSocketListener clientSocketListener)
 
void start ()
 
void stop () throws InterruptedException
 
void writePacket (final byte @NotNull[] buf, final int len, @NotNull final ClientSocketMonitorCommand monitor)
 

Private Member Functions

void doConnect () throws IOException
 
void doReconnect () throws IOException
 
void doTransceive () throws IOException
 
void process ()
 
void processConnect (@NotNull final String host, final int port) throws IOException
 
void processDisconnect (@NotNull final String reason, final boolean isError)
 
void processRead () throws IOException
 
void processReadCommand ()
 
void processWrite () throws IOException
 
void updateInterestOps ()
 
void updateWriteInterestOps ()
 

Private Attributes

final EventListenerList2< ClientSocketListenerclientSocketListeners = new EventListenerList2<>()
 
final DebugWriter debugProtocol
 
boolean disconnectPending
 
final GuiStateManager guiStateManager
 
String host
 
final byte[] inputBuf = new byte[2+MAXIMUM_PACKET_SIZE]
 
final ByteBuffer inputBuffer = ByteBuffer.wrap(inputBuf)
 
int inputLen = -1
 
int interestOps
 
boolean isConnected
 
final ByteBuffer outputBuffer = ByteBuffer.allocate(2+MAXIMUM_PACKET_SIZE)
 
final byte[] packetHeader = new byte[2]
 
int port
 
boolean reconnect = true
 
boolean reconnectIsError
 
String reconnectReason = "disconnect"
 
SelectableChannel selectableChannel
 
SelectionKey selectionKey
 
final Selector selector
 
SocketChannel socketChannel
 
final Object syncConnect = new Object()
 
final Object syncOutput = new Object()
 
final Thread thread = new Thread(this::process, "JXClient:ClientSocket")
 

Static Private Attributes

static final int MAXIMUM_PACKET_SIZE = 65536
 

Detailed Description

A socket that processes incoming data.

final ClientSocket clientSocket = new ClientSocket(...);
clientSocket.writePacket(...);
clientSocket.disconnect();
Author
Andreas Kirschbaum

Definition at line 55 of file ClientSocket.java.

Constructor & Destructor Documentation

◆ ClientSocket()

com.realtime.crossfire.jxclient.server.socket.ClientSocket.ClientSocket ( @NotNull final GuiStateManager  guiStateManager,
@Nullable final DebugWriter  debugProtocol 
) throws IOException

Creates a new instance.

Parameters
guiStateManagerthe gui state manager to update
debugProtocoltf non-
null
, write all protocol commands to this writer
Exceptions
IOExceptionif the socket cannot be created

Definition at line 206 of file ClientSocket.java.

References com.realtime.crossfire.jxclient.server.socket.ClientSocket.debugProtocol, com.realtime.crossfire.jxclient.server.socket.ClientSocket.guiStateManager, and com.realtime.crossfire.jxclient.server.socket.ClientSocket.selector.

Member Function Documentation

◆ addClientSocketListener()

void com.realtime.crossfire.jxclient.server.socket.ClientSocket.addClientSocketListener ( @NotNull final ClientSocketListener  clientSocketListener)

Adds a ClientSocketListener to be notified.

Parameters
clientSocketListenerthe client socket listener to add

Definition at line 248 of file ClientSocket.java.

References com.realtime.crossfire.jxclient.server.socket.ClientSocket.clientSocketListeners.

Referenced by com.realtime.crossfire.jxclient.server.server.DefaultServerConnection.addClientSocketListener().

Here is the caller graph for this function:

◆ connect()

void com.realtime.crossfire.jxclient.server.socket.ClientSocket.connect ( @NotNull final String  host,
final int  port 
)

◆ disconnect()

void com.realtime.crossfire.jxclient.server.socket.ClientSocket.disconnect ( @NotNull final String  reason,
final boolean  isError 
)

◆ doConnect()

void com.realtime.crossfire.jxclient.server.socket.ClientSocket.doConnect ( ) throws IOException
private

◆ doReconnect()

void com.realtime.crossfire.jxclient.server.socket.ClientSocket.doReconnect ( ) throws IOException
private

◆ doTransceive()

void com.realtime.crossfire.jxclient.server.socket.ClientSocket.doTransceive ( ) throws IOException
private

◆ process()

void com.realtime.crossfire.jxclient.server.socket.ClientSocket.process ( )
private

◆ processConnect()

void com.realtime.crossfire.jxclient.server.socket.ClientSocket.processConnect ( @NotNull final String  host,
final int  port 
) throws IOException
private

◆ processDisconnect()

void com.realtime.crossfire.jxclient.server.socket.ClientSocket.processDisconnect ( @NotNull final String  reason,
final boolean  isError 
)
private

Disconnects the socket. Does nothing if not currently connected.

Parameters
reasonthe reason for disconnection
isErrorwhether the disconnect is unexpected

Definition at line 486 of file ClientSocket.java.

References com.realtime.crossfire.jxclient.server.socket.ClientSocket.clientSocketListeners, com.realtime.crossfire.jxclient.server.socket.ClientSocket.debugProtocol, com.realtime.crossfire.jxclient.util.DebugWriter.debugProtocolWrite(), com.realtime.crossfire.jxclient.guistate.GuiStateManager.disconnected(), com.realtime.crossfire.jxclient.guistate.GuiStateManager.disconnecting(), com.realtime.crossfire.jxclient.server.socket.ClientSocket.disconnectPending, com.realtime.crossfire.jxclient.server.socket.ClientSocket.guiStateManager, com.realtime.crossfire.jxclient.server.socket.ClientSocket.inputBuffer, com.realtime.crossfire.jxclient.server.socket.ClientSocket.outputBuffer, com.realtime.crossfire.jxclient.server.socket.ClientSocket.selectableChannel, com.realtime.crossfire.jxclient.server.socket.ClientSocket.selectionKey, com.realtime.crossfire.jxclient.server.socket.ClientSocket.socketChannel, com.realtime.crossfire.jxclient.server.socket.ClientSocket.syncConnect, com.realtime.crossfire.jxclient.server.socket.ClientSocket.syncOutput, and com.realtime.crossfire.jxclient.server.socket.ClientSocket.thread.

Referenced by com.realtime.crossfire.jxclient.server.socket.ClientSocket.doReconnect(), and com.realtime.crossfire.jxclient.server.socket.ClientSocket.process().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ processRead()

void com.realtime.crossfire.jxclient.server.socket.ClientSocket.processRead ( ) throws IOException
private

Reads data from the socket and parses the data into commands.

Exceptions
IOExceptionif an I/O error occurs

Definition at line 541 of file ClientSocket.java.

References com.realtime.crossfire.jxclient.server.socket.ClientSocket.inputBuffer, com.realtime.crossfire.jxclient.server.socket.ClientSocket.processReadCommand(), com.realtime.crossfire.jxclient.server.socket.ClientSocket.socketChannel, and com.realtime.crossfire.jxclient.server.socket.ClientSocket.syncOutput.

Referenced by com.realtime.crossfire.jxclient.server.socket.ClientSocket.doTransceive().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ processReadCommand()

void com.realtime.crossfire.jxclient.server.socket.ClientSocket.processReadCommand ( )
private

◆ processWrite()

void com.realtime.crossfire.jxclient.server.socket.ClientSocket.processWrite ( ) throws IOException
private

Writes some pending data to the socket. Does nothing if no pending data exists or if the socket does not accept data.

Exceptions
IOExceptionif an I/O error occurs

Definition at line 634 of file ClientSocket.java.

References com.realtime.crossfire.jxclient.server.socket.ClientSocket.outputBuffer, com.realtime.crossfire.jxclient.server.socket.ClientSocket.socketChannel, and com.realtime.crossfire.jxclient.server.socket.ClientSocket.syncOutput.

Referenced by com.realtime.crossfire.jxclient.server.socket.ClientSocket.doTransceive().

Here is the caller graph for this function:

◆ removeClientSocketListener()

void com.realtime.crossfire.jxclient.server.socket.ClientSocket.removeClientSocketListener ( @NotNull final ClientSocketListener  clientSocketListener)

Removes a ClientSocketListener to be notified.

Parameters
clientSocketListenerthe client socket listener to remove

Definition at line 256 of file ClientSocket.java.

References com.realtime.crossfire.jxclient.server.socket.ClientSocket.clientSocketListeners.

Referenced by com.realtime.crossfire.jxclient.server.server.DefaultServerConnection.removeClientSocketListener().

Here is the caller graph for this function:

◆ start()

void com.realtime.crossfire.jxclient.server.socket.ClientSocket.start ( )

◆ stop()

void com.realtime.crossfire.jxclient.server.socket.ClientSocket.stop ( ) throws InterruptedException

◆ updateInterestOps()

void com.realtime.crossfire.jxclient.server.socket.ClientSocket.updateInterestOps ( )
private

◆ updateWriteInterestOps()

void com.realtime.crossfire.jxclient.server.socket.ClientSocket.updateWriteInterestOps ( )
private

◆ writePacket()

void com.realtime.crossfire.jxclient.server.socket.ClientSocket.writePacket ( final byte @NotNull[]  buf,
final int  len,
@NotNull final ClientSocketMonitorCommand  monitor 
)

Writes a packet. The packet contents must not change until this function has returned.

This function may be called even if the socket has been closed. In this case he packet is discarded.

Parameters
bufthe packet to send
lenthe number of bytes to send
monitorthe monitor command to send to script processes

Definition at line 598 of file ClientSocket.java.

References com.realtime.crossfire.jxclient.server.socket.ClientSocket.clientSocketListeners, com.realtime.crossfire.jxclient.server.socket.ClientSocket.outputBuffer, com.realtime.crossfire.jxclient.server.socket.ClientSocket.packetHeader, com.realtime.crossfire.jxclient.server.socket.ClientSocket.selector, com.realtime.crossfire.jxclient.server.socket.ClientSocket.socketChannel, and com.realtime.crossfire.jxclient.server.socket.ClientSocket.syncOutput.

Referenced by com.realtime.crossfire.jxclient.server.server.DefaultServerConnection.writePacket().

Here is the caller graph for this function:

Member Data Documentation

◆ clientSocketListeners

final EventListenerList2<ClientSocketListener> com.realtime.crossfire.jxclient.server.socket.ClientSocket.clientSocketListeners = new EventListenerList2<>()
private

◆ debugProtocol

final DebugWriter com.realtime.crossfire.jxclient.server.socket.ClientSocket.debugProtocol
private

◆ disconnectPending

boolean com.realtime.crossfire.jxclient.server.socket.ClientSocket.disconnectPending
private

◆ guiStateManager

final GuiStateManager com.realtime.crossfire.jxclient.server.socket.ClientSocket.guiStateManager
private

◆ host

String com.realtime.crossfire.jxclient.server.socket.ClientSocket.host
private

◆ inputBuf

final byte [] com.realtime.crossfire.jxclient.server.socket.ClientSocket.inputBuf = new byte[2+MAXIMUM_PACKET_SIZE]
private

The receive buffer. It is wrapped into inputBuffer.

Definition at line 153 of file ClientSocket.java.

Referenced by com.realtime.crossfire.jxclient.server.socket.ClientSocket.processReadCommand().

◆ inputBuffer

final ByteBuffer com.realtime.crossfire.jxclient.server.socket.ClientSocket.inputBuffer = ByteBuffer.wrap(inputBuf)
private

◆ inputLen

int com.realtime.crossfire.jxclient.server.socket.ClientSocket.inputLen = -1
private

If set to

-1

, a two-byte packet header is read next from inputBuffer. Otherwise, it is set to the packet length which will be read from inputBuffer.

Definition at line 166 of file ClientSocket.java.

Referenced by com.realtime.crossfire.jxclient.server.socket.ClientSocket.processReadCommand().

◆ interestOps

int com.realtime.crossfire.jxclient.server.socket.ClientSocket.interestOps
private

◆ isConnected

boolean com.realtime.crossfire.jxclient.server.socket.ClientSocket.isConnected
private

◆ MAXIMUM_PACKET_SIZE

final int com.realtime.crossfire.jxclient.server.socket.ClientSocket.MAXIMUM_PACKET_SIZE = 65536
staticprivate

The maximum payload size of a Crossfire protocol packet.

Definition at line 60 of file ClientSocket.java.

◆ outputBuffer

final ByteBuffer com.realtime.crossfire.jxclient.server.socket.ClientSocket.outputBuffer = ByteBuffer.allocate(2+MAXIMUM_PACKET_SIZE)
private

◆ packetHeader

final byte [] com.realtime.crossfire.jxclient.server.socket.ClientSocket.packetHeader = new byte[2]
private

A buffer for sending packets.

Definition at line 130 of file ClientSocket.java.

Referenced by com.realtime.crossfire.jxclient.server.socket.ClientSocket.writePacket().

◆ port

int com.realtime.crossfire.jxclient.server.socket.ClientSocket.port
private

◆ reconnect

boolean com.realtime.crossfire.jxclient.server.socket.ClientSocket.reconnect = true
private

◆ reconnectIsError

boolean com.realtime.crossfire.jxclient.server.socket.ClientSocket.reconnectIsError
private

◆ reconnectReason

String com.realtime.crossfire.jxclient.server.socket.ClientSocket.reconnectReason = "disconnect"
private

◆ selectableChannel

SelectableChannel com.realtime.crossfire.jxclient.server.socket.ClientSocket.selectableChannel
private

◆ selectionKey

SelectionKey com.realtime.crossfire.jxclient.server.socket.ClientSocket.selectionKey
private

◆ selector

final Selector com.realtime.crossfire.jxclient.server.socket.ClientSocket.selector
private

◆ socketChannel

SocketChannel com.realtime.crossfire.jxclient.server.socket.ClientSocket.socketChannel
private

◆ syncConnect

final Object com.realtime.crossfire.jxclient.server.socket.ClientSocket.syncConnect = new Object()
private

◆ syncOutput

final Object com.realtime.crossfire.jxclient.server.socket.ClientSocket.syncOutput = new Object()
private

◆ thread

final Thread com.realtime.crossfire.jxclient.server.socket.ClientSocket.thread = new Thread(this::process, "JXClient:ClientSocket")
private

The documentation for this class was generated from the following file:
com.realtime.crossfire.jxclient.server.socket.ClientSocket.selectionKey
SelectionKey selectionKey
Definition: ClientSocket.java:143