QuickServer
v1.4.7

org.quickserver.net.server
Interface ClientHandler

All Superinterfaces:
java.lang.Runnable
All Known Implementing Classes:
BasicClientHandler

public interface ClientHandler
extends java.lang.Runnable

Interface that represents client handle in QuickServer.

This class is used by QuickServer to handle each new client connected. This class is responsible to handle client sockets. It can operate in both blocking mode and non-blocking mode (java nio) based on its implementation.

Author:
Akshathkumar Shetty

Method Summary
 void addEvent(ClientEvent event)
          Adds the ClientEvent.
 void clean()
           
 void closeConnection()
          Closes client socket associated.
 void forceClose()
          Force the closing of the client by closing the associated socket.
 java.util.logging.Logger getAppLogger()
          Returns client SelectionKey associated, if any.
 java.io.BufferedInputStream getBufferedInputStream()
          Returns the BufferedInputStream associated with the Client being handled.
 java.io.BufferedOutputStream getBufferedOutputStream()
          Returns the BufferedOutputStream associated with the Client being handled.
 java.io.BufferedReader getBufferedReader()
          Returns the BufferedReader associated with the Client being handled.
 java.io.BufferedWriter getBufferedWriter()
          Deprecated. since 1.4.5 use getOutputStream()
 java.lang.String getCharset()
          Returns Charset to be used for String decoding and encoding..
 java.util.Date getClientConnectedTime()
          Returns the date/time when the client socket was assigned to this ClientHanlder.
 ClientData getClientData()
          Returns the ClientData object associated with this ClientHandler, if not set will return null
 boolean getCommunicationLogging()
          Returns the communication logging flag.
 java.sql.Connection getConnection(java.lang.String id)
          Deprecated. as of v1.4.5 use getServer().getDBPoolUtil().getConnection(id)
 DataMode getDataMode(DataType dataType)
          Returns the DataMode of the ClientHandler for the DataType.
 java.lang.String getHostAddress()
          Returns cached socket host ip address.
 java.io.InputStream getInputStream()
          Returns the InputStream associated with the Client being handled.
 java.util.Date getLastCommunicationTime()
          Returns the date/time when the client socket last sent a data to this ClientHanlder.
 java.lang.String getMaxConnectionMsg()
          Returns message to be displayed to the client when maximum connection reaches.
 java.lang.String getName()
          Returns the ClientHandler name
 java.io.ObjectInputStream getObjectInputStream()
          Returns the ObjectInputStream associated with the Client being handled.
 java.io.ObjectOutputStream getObjectOutputStream()
          Returns the ObjectOutputStream associated with the Client being handled.
 java.io.OutputStream getOutputStream()
          Returns the OutputStream associated with the Client being handled.
 java.nio.channels.SelectionKey getSelectionKey()
          Returns client SelectionKey associated, if any.
 QuickServer getServer()
          Returns the QuickServer object that created it.
 java.net.Socket getSocket()
          Returns client socket associated.
 java.nio.channels.SocketChannel getSocketChannel()
          Returns client socket channel associated, if any.
 int getTimeout()
          Returns the Client socket timeout in milliseconds.
 void handleClient(TheClient theClient)
          Associates the ClientHanlder with the client encapsulated by theClient.
 boolean hasEvent(ClientEvent event)
          Checks if this client has the event.
 java.lang.String info()
          Returns the ClientHandler detailed information.
 boolean isClientEventNext(ClientEvent clientEvent)
          Checks if the passed ClientEvent is the one next for processing if a thread is allowed through this object.
 boolean isClosed()
          Checks if the client is closed.
 boolean isConected()
          Deprecated. since 1.4.5 Use isConnected()
 boolean isConnected()
          Checks if the client is still connected.
 boolean isOpen()
          Checks if the client is still connected and if socket is open.
 boolean isSecure()
          Returns flag indicating if the client is connected in secure mode (SSL or TLS).
 void makeSecure()
          Makes current Client connection to secure protocol based on the secure configuration set to the server.
 void makeSecure(boolean useClientMode, boolean needClientAuth, boolean autoClose, java.lang.String protocol)
          Makes current Client connection to secure protocol.
 void makeSecure(java.lang.String protocol)
          Makes current Client connection to secure protocol.
 byte[] readBinary()
          Read the binary input.
 java.lang.String readBytes()
          Read the byte input.
 void registerForRead()
          Register OP_READ with the SelectionKey associated with the channel.
 void registerForWrite()
          Register OP_WRITE with the SelectionKey associated with the channel.
 void removeEvent(ClientEvent event)
          Removes the ClientEvent.
 void run()
           
 void sendClientBinary(byte[] data)
          Send a binary data to the connected client.
 void sendClientBinary(byte[] data, int off, int len)
          Send a binary data to the connected client.
 void sendClientBytes(java.lang.String msg)
          Send a String message to the connected client as a string of bytes.
 void sendClientMsg(java.lang.String msg)
          Send a String message to the connected client it adds a new line{\r\n} to the end of the string.
 void sendClientObject(java.lang.Object msg)
          Send a Object message to the connected client.
 void sendSystemMsg(java.lang.String msg)
          Send a String message to the logger associated with QuickServer.getAppLogger() with Level.INFO as its level.
 void sendSystemMsg(java.lang.String msg, boolean newline)
          Deprecated. Use sendSystemMsg(java.lang.String), since it uses Logging.
 void sendSystemMsg(java.lang.String msg, java.util.logging.Level level)
          Send a String message to the logger associated with QuickServer.getAppLogger().
 void setCharset(java.lang.String charset)
          Sets the Charset to be used for String decoding and encoding.
 void setCommunicationLogging(boolean communicationLogging)
          Sets the communication logging flag.
 void setDataMode(DataMode dataMode, DataType dataType)
          Sets the DataMode for the ClientHandler Note: When mode is DataMode.OBJECT and type is DataType.IN this call will block until the client ObjectOutputStream has written and flushes the header.
 void setMaxConnectionMsg(java.lang.String msg)
          Sets message to be displayed when maximum connection reaches.
 void setOutputStream(java.io.OutputStream out)
          Set the OutputStream associated with the Client being handled.
 void setSecure(boolean secure)
          Sets flag indicating if the client is connected in secure mode (SSL or TLS).
 void setSelectionKey(java.nio.channels.SelectionKey selectionKey)
          Sets client SelectionKey associated, if any.
 void setSocket(java.net.Socket socket)
          Returns client socket associated.
 void setSocketChannel(java.nio.channels.SocketChannel socketChannel)
          Sets client socket channel associated, if any.
 void setTimeout(int time)
          Sets the client socket's timeout.
 java.lang.String toString()
          Returns the ClientHandler information.
 void updateInputOutputStreams()
          Updates the InputStream and OutputStream for the ClientHandler for the set Socket.
 void updateLastCommunicationTime()
          Updates the last communication time for this client
 

Method Detail

addEvent

public void addEvent(ClientEvent event)
Adds the ClientEvent.

Since:
1.4.5

removeEvent

public void removeEvent(ClientEvent event)
Removes the ClientEvent.

Since:
1.4.5

clean

public void clean()

closeConnection

public void closeConnection()
Closes client socket associated.


forceClose

public void forceClose()
                throws java.io.IOException
Force the closing of the client by closing the associated socket.

Throws:
java.io.IOException
Since:
1.3.3

getAppLogger

public java.util.logging.Logger getAppLogger()
Returns client SelectionKey associated, if any.

Since:
1.4.5

getBufferedInputStream

public java.io.BufferedInputStream getBufferedInputStream()
Returns the BufferedInputStream associated with the Client being handled. Can be null if not available at the time of method call.

Since:
1.4.6
See Also:
getBufferedOutputStream()

getBufferedOutputStream

public java.io.BufferedOutputStream getBufferedOutputStream()
Returns the BufferedOutputStream associated with the Client being handled. Can be null if not available at the time of method call.

Since:
1.4.6
See Also:
getBufferedInputStream()

getBufferedReader

public java.io.BufferedReader getBufferedReader()
Returns the BufferedReader associated with the Client being handled. Note that this is only available under blocking mode.

See Also:
getBufferedWriter()

getCharset

public java.lang.String getCharset()
Returns Charset to be used for String decoding and encoding..

Since:
1.4.5
See Also:
setCharset(java.lang.String)

getClientConnectedTime

public java.util.Date getClientConnectedTime()
Returns the date/time when the client socket was assigned to this ClientHanlder. If no client is currently connected it will return null

Since:
1.3.1

getClientData

public ClientData getClientData()
Returns the ClientData object associated with this ClientHandler, if not set will return null

See Also:
ClientData

getCommunicationLogging

public boolean getCommunicationLogging()
Returns the communication logging flag.

Since:
1.3.2
See Also:
setCommunicationLogging(boolean)

getDataMode

public DataMode getDataMode(DataType dataType)
Returns the DataMode of the ClientHandler for the DataType.

Since:
1.2

getHostAddress

public java.lang.String getHostAddress()
Returns cached socket host ip address.

Since:
1.4.5

getInputStream

public java.io.InputStream getInputStream()
Returns the InputStream associated with the Client being handled.


getLastCommunicationTime

public java.util.Date getLastCommunicationTime()
Returns the date/time when the client socket last sent a data to this ClientHanlder. If no client is currently connected it will return null

Since:
1.3.3

getMaxConnectionMsg

public java.lang.String getMaxConnectionMsg()
Returns message to be displayed to the client when maximum connection reaches.

Since:
1.4.5

getName

public java.lang.String getName()
Returns the ClientHandler name

Since:
1.4.6

getObjectInputStream

public java.io.ObjectInputStream getObjectInputStream()
Returns the ObjectInputStream associated with the Client being handled. It will be null if no ClientObjectHandler was set in QuickServer.

Since:
1.2
See Also:
getObjectOutputStream()

getObjectOutputStream

public java.io.ObjectOutputStream getObjectOutputStream()
Returns the ObjectOutputStream associated with the Client being handled. It will be null if no ClientObjectHandler was set in QuickServer.

Since:
1.2
See Also:
getObjectInputStream()

getOutputStream

public java.io.OutputStream getOutputStream()
Returns the OutputStream associated with the Client being handled.

See Also:
setOutputStream(java.io.OutputStream)

getSelectionKey

public java.nio.channels.SelectionKey getSelectionKey()
Returns client SelectionKey associated, if any.

Since:
1.4.5

getServer

public QuickServer getServer()
Returns the QuickServer object that created it.


getSocket

public java.net.Socket getSocket()
Returns client socket associated.


getSocketChannel

public java.nio.channels.SocketChannel getSocketChannel()
Returns client socket channel associated, if any.

Since:
1.4.5

getTimeout

public int getTimeout()
Returns the Client socket timeout in milliseconds.

Since:
1.4.5
See Also:
setTimeout(int)

handleClient

public void handleClient(TheClient theClient)
Associates the ClientHanlder with the client encapsulated by theClient.

Parameters:
theClient - object that encapsulates client socket and its configuration details.

hasEvent

public boolean hasEvent(ClientEvent event)
Checks if this client has the event.

Since:
1.4.5

info

public java.lang.String info()
Returns the ClientHandler detailed information. If ClientData is present and is ClientIdentifiable will return ClientInfo else it will return Clients InetAddress and port information.


isClientEventNext

public boolean isClientEventNext(ClientEvent clientEvent)
Checks if the passed ClientEvent is the one next for processing if a thread is allowed through this object.

Since:
1.4.6

isClosed

public boolean isClosed()
Checks if the client is closed.

Since:
1.4.1

isConnected

public boolean isConnected()
                    throws java.net.SocketException
Checks if the client is still connected.

Throws:
java.net.SocketException - if Socket is not open.
Since:
1.4.5

isOpen

public boolean isOpen()
Checks if the client is still connected and if socket is open. This is same as isConnected() but does not throw SocketException.

Since:
1.4.6

isSecure

public boolean isSecure()
Returns flag indicating if the client is connected in secure mode (SSL or TLS).

Returns:
secure flag
Since:
1.4.0

makeSecure

public void makeSecure()
                throws java.io.IOException,
                       java.security.NoSuchAlgorithmException,
                       java.security.KeyManagementException
Makes current Client connection to secure protocol based on the secure configuration set to the server. This method will just call makeSecure(false, false, true, null).

Throws:
java.io.IOException
java.security.NoSuchAlgorithmException
java.security.KeyManagementException
Since:
1.4.0

makeSecure

public void makeSecure(boolean useClientMode,
                       boolean needClientAuth,
                       boolean autoClose,
                       java.lang.String protocol)
                throws java.io.IOException,
                       java.security.NoSuchAlgorithmException,
                       java.security.KeyManagementException
Makes current Client connection to secure protocol.

Parameters:
useClientMode - falg if the socket should start its first handshake in "client" mode.
needClientAuth - flag if the clients must authenticate themselves.
autoClose - close the underlying socket when this socket is closed
protocol - the standard name of the requested protocol. If null will use the protocol set in secure configuration of the server.
Throws:
java.io.IOException
java.security.NoSuchAlgorithmException
java.security.KeyManagementException
Since:
1.4.0

makeSecure

public void makeSecure(java.lang.String protocol)
                throws java.io.IOException,
                       java.security.NoSuchAlgorithmException,
                       java.security.KeyManagementException
Makes current Client connection to secure protocol. This method will just call makeSecure(false, false, true, protocol).

Throws:
java.io.IOException
java.security.NoSuchAlgorithmException
java.security.KeyManagementException
Since:
1.4.0

readBinary

public byte[] readBinary()
                  throws java.io.IOException
Read the binary input. This will block till some data is received from the stream. Allowed only when DataType.IN is in DataMode.BINARY mode.

Returns:
The data as a String
Throws:
java.io.IOException
Since:
1.4

readBytes

public java.lang.String readBytes()
                           throws java.io.IOException
Read the byte input. This will block till some data is received from the stream. Allowed only when DataType.IN is in DataMode.BYTE mode.

Returns:
The data as a String
Throws:
java.io.IOException
Since:
1.3.2

registerForRead

public void registerForRead()
                     throws java.io.IOException,
                            java.nio.channels.ClosedChannelException
Register OP_READ with the SelectionKey associated with the channel. If SelectionKey is not set then it registers the channel with the Selector.

Throws:
java.io.IOException
java.nio.channels.ClosedChannelException
Since:
1.4.5

registerForWrite

public void registerForWrite()
                      throws java.io.IOException,
                             java.nio.channels.ClosedChannelException
Register OP_WRITE with the SelectionKey associated with the channel.

Throws:
java.io.IOException
java.nio.channels.ClosedChannelException
Since:
1.4.5

run

public void run()
Specified by:
run in interface java.lang.Runnable

sendClientBinary

public void sendClientBinary(byte[] data)
                      throws java.io.IOException
Send a binary data to the connected client. If client is not connected it will just return.

Throws:
java.io.IOException - if Socket IO Error or Socket was closed by the client.
Since:
1.4

sendClientBinary

public void sendClientBinary(byte[] data,
                             int off,
                             int len)
                      throws java.io.IOException
Send a binary data to the connected client. If client is not connected it will just return.

Throws:
java.io.IOException - if Socket IO Error or Socket was closed by the client.
Since:
1.4.5

sendClientBytes

public void sendClientBytes(java.lang.String msg)
                     throws java.io.IOException
Send a String message to the connected client as a string of bytes. If client is not connected it will just return.

Throws:
java.io.IOException - if Socket IO Error or Socket was closed by the client.
Since:
1.3.1

sendClientMsg

public void sendClientMsg(java.lang.String msg)
                   throws java.io.IOException
Send a String message to the connected client it adds a new line{\r\n} to the end of the string. If client is not connected it will just return.

Throws:
java.io.IOException - if Socket IO Error or Socket was closed by the client.

sendClientObject

public void sendClientObject(java.lang.Object msg)
                      throws java.io.IOException
Send a Object message to the connected client. The message Object passed must be serializable. If client is not connected it will just return.

Throws:
java.io.IOException - if Socket IO Error or Socket was closed by the client.
java.lang.IllegalStateException - if DataType.OUT is not in DataMode.OBJECT
Since:
1.2
See Also:
setDataMode(org.quickserver.net.server.DataMode, org.quickserver.net.server.DataType)

sendSystemMsg

public void sendSystemMsg(java.lang.String msg)
Send a String message to the logger associated with QuickServer.getAppLogger() with Level.INFO as its level.


sendSystemMsg

public void sendSystemMsg(java.lang.String msg,
                          java.util.logging.Level level)
Send a String message to the logger associated with QuickServer.getAppLogger().

Since:
1.2

setCharset

public void setCharset(java.lang.String charset)
Sets the Charset to be used for String decoding and encoding.

Parameters:
charset - to be used for String decoding and encoding
Since:
1.4.5
See Also:
getCharset()

setCommunicationLogging

public void setCommunicationLogging(boolean communicationLogging)
Sets the communication logging flag.

Since:
1.3.2
See Also:
getCommunicationLogging()

setDataMode

public void setDataMode(DataMode dataMode,
                        DataType dataType)
                 throws java.io.IOException
Sets the DataMode for the ClientHandler Note: When mode is DataMode.OBJECT and type is DataType.IN this call will block until the client ObjectOutputStream has written and flushes the header.

Parameters:
dataMode - mode of data exchange - String or Object.
dataType - type of data for which mode has to be set.
Throws:
java.io.IOException - if mode could not be changed.
Since:
1.2

setMaxConnectionMsg

public void setMaxConnectionMsg(java.lang.String msg)
Sets message to be displayed when maximum connection reaches.

Since:
1.4.5

setOutputStream

public void setOutputStream(java.io.OutputStream out)
                     throws java.io.IOException
Set the OutputStream associated with the Client being handled.

Throws:
java.io.IOException - if ObjectOutputStream could not be created.
Since:
1.1
See Also:
getOutputStream()

setSecure

public void setSecure(boolean secure)
Sets flag indicating if the client is connected in secure mode (SSL or TLS).

Parameters:
secure -
Since:
1.4.0

setSelectionKey

public void setSelectionKey(java.nio.channels.SelectionKey selectionKey)
Sets client SelectionKey associated, if any.

Since:
1.4.5

setSocket

public void setSocket(java.net.Socket socket)
Returns client socket associated.

Since:
1.4.0
See Also:
updateInputOutputStreams()

setSocketChannel

public void setSocketChannel(java.nio.channels.SocketChannel socketChannel)
Sets client socket channel associated, if any.

Since:
1.4.5

setTimeout

public void setTimeout(int time)
Sets the client socket's timeout.

Parameters:
time - client socket timeout in milliseconds.
Since:
1.4.5
See Also:
getTimeout()

toString

public java.lang.String toString()
Returns the ClientHandler information. If ClientData is present and is ClientIdentifiable will return ClientInfo else it will return Clients InetAddress and port information.


updateInputOutputStreams

public void updateInputOutputStreams()
                              throws java.io.IOException
Updates the InputStream and OutputStream for the ClientHandler for the set Socket.

Throws:
java.io.IOException
Since:
1.4.0
See Also:
setSocket(java.net.Socket)

updateLastCommunicationTime

public void updateLastCommunicationTime()
Updates the last communication time for this client

Since:
1.3.3

getConnection

public java.sql.Connection getConnection(java.lang.String id)
                                  throws java.lang.Exception
Deprecated. as of v1.4.5 use getServer().getDBPoolUtil().getConnection(id)

Returns the Connection object for the DatabaseConnection that is identified by id passed. If id passed does not match with any connection loaded by this class it will return null. This just calls getServer().getDBPoolUtil().getConnection(id)

Throws:
java.lang.Exception
Since:
1.3

isConected

public boolean isConected()
                   throws java.net.SocketException
Deprecated. since 1.4.5 Use isConnected()

Checks if the client is still connected.

Throws:
java.net.SocketException - if Socket is not open.

sendSystemMsg

public void sendSystemMsg(java.lang.String msg,
                          boolean newline)
Deprecated. Use sendSystemMsg(java.lang.String), since it uses Logging.

Send a String message to the system output stream.

Parameters:
newline - indicates if new line required at the end.

getBufferedWriter

public java.io.BufferedWriter getBufferedWriter()
Deprecated. since 1.4.5 use getOutputStream()

Returns the BufferedWriter associated with the Client being handled.


QuickServer
v1.4.7

Copyright © 2003-2006 QuickServer.org