QuickServer
v1.4.1

org.quickserver.net.server
Class ClientHandler

java.lang.Object
  |
  +--org.quickserver.net.server.ClientHandler
All Implemented Interfaces:
java.lang.Runnable

public class ClientHandler
extends java.lang.Object
implements java.lang.Runnable

Class that handles clients for QuickServer.

This class is used by QuickServer to create a new thread for each new client connected. This class is responsible to handle client sockets.

Author:
Akshathkumar Shetty
, Martin Benns : Added BYTE mode

Field Summary
protected  boolean authorised
          Client authorisation status
protected  int counAuthTry
          Count of client login atempts
protected  int maxAuthTry
          max alloed login atempts
protected  java.lang.String maxAuthTryMsg
          Message to be displayed when max login attempt reaches.
protected  java.net.Socket socket
          Client socket
protected  java.lang.String timeoutMsg
          timeout message
 
Constructor Summary
ClientHandler()
           
ClientHandler(TheClient theClient, int timeOut)
          Created new ClientHandler thread that handles that client encapsulated by theClient.
 
Method Summary
 void clean()
           
 void closeConnection()
          Closes client socket associated.
protected  void finalize()
           
 void forceClose()
          Force the closing of the client by closing the associated socket.
 java.io.BufferedReader getBufferedReader()
          Returns the BufferedReader associated with the Client being handled.
 java.io.BufferedWriter getBufferedWriter()
          Returns the BufferedWriter associated with the Client being handled.
 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)
          Returns the Connection object for the DatabaseConnection that is identified by id passed.
 DataMode getDataMode(DataType dataType)
          Returns the DataMode of the ClientHandler for the DataType.
 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.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.
 QuickServer getServer()
          Returns the QuickServer object that created it.
 java.net.Socket getSocket()
          Returns client socket associated.
 long getSocketTimeout()
          Return socket timeout
 void handleClient(TheClient theClient, int timeOut)
          Start handling of client handles that client encapsulated by theClient.
 boolean isClosed()
          Checks if the client is closed.
 boolean isConected()
          Checks if the client is still conected.
 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 run()
           
 void sendClientBinary(byte[] data)
          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().
protected  void setAuthenticator(Authenticator authenticator)
          Sets the Authenticator class that handles the authentication of a client.
protected  void setClientBinaryHandler(ClientBinaryHandler handler)
          Sets the ClientBinaryHandler class that interacts with client sockets.
protected  void setClientCommandHandler(ClientCommandHandler handler)
          Sets the ClientCommandHandler class that interacts with client sockets.
protected  void setClientData(ClientData data)
          Sets the ClientData object associated with this ClientHandler
protected  void setClientObjectHandler(ClientObjectHandler handler)
          Sets the ClientObjectHandler class that interacts with client sockets.
 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 setInputStream(java.io.InputStream in)
          Sets the InputStream associated with the Client being handled.
 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).
protected  void setServer(QuickServer server)
          Sets the QuickServer object associated with this ClientHandler.
protected  void setServerAuthenticator(Authenticator authenticator)
          Deprecated. As of v1.3 use setAuthenticator(org.quickserver.net.server.Authenticator)
 void setSocket(java.net.Socket socket)
          Returns client socket associated.
 java.lang.String toString()
          Returns the Clients InetAddress
 void updateInputOutputStreams()
          Updates the InputStream and OutputStream for the ClientHandler for the set Socket.
 void updateLastCommunicationTime()
          Updates the last communication time for this client
 
Methods inherited from class java.lang.Object
clone, equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

socket

protected java.net.Socket socket
Client socket


authorised

protected boolean authorised
Client authorisation status


counAuthTry

protected int counAuthTry
Count of client login atempts


maxAuthTry

protected int maxAuthTry
max alloed login atempts


timeoutMsg

protected java.lang.String timeoutMsg
timeout message


maxAuthTryMsg

protected java.lang.String maxAuthTryMsg
Message to be displayed when max login attempt reaches.

Constructor Detail

ClientHandler

public ClientHandler()

ClientHandler

public ClientHandler(TheClient theClient,
                     int timeOut)
Created new ClientHandler thread that handles that client encapsulated by theClient.

Parameters:
theClient - object that encapsulates client socket and its configuration details.
timeOut - Socket timeout in milliseconds
Method Detail

clean

public void clean()

finalize

protected void finalize()
                 throws java.lang.Throwable
Overrides:
finalize in class java.lang.Object
java.lang.Throwable

handleClient

public void handleClient(TheClient theClient,
                         int timeOut)
Start handling of client handles that client encapsulated by theClient.

Parameters:
theClient - object that encapsulates client socket and its configuration details.
timeOut - Socket timeout in milliseconds

getServer

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

See Also:
setServer(org.quickserver.net.server.QuickServer)

setServer

protected void setServer(QuickServer server)
Sets the QuickServer object associated with this ClientHandler.

See Also:
getServer()

setClientData

protected void setClientData(ClientData data)
Sets the ClientData object associated with this ClientHandler

See Also:
ClientData, getClientData()

getClientData

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

See Also:
ClientData, setClientData(org.quickserver.net.server.ClientData)

setServerAuthenticator

protected void setServerAuthenticator(Authenticator authenticator)
Deprecated. As of v1.3 use setAuthenticator(org.quickserver.net.server.Authenticator)

Sets the Authenticator class that handles the authentication of a client.

Parameters:
authenticator - fully qualified name of the class that implements Authenticator.

setAuthenticator

protected void setAuthenticator(Authenticator authenticator)
Sets the Authenticator class that handles the authentication of a client.

Parameters:
authenticator - fully qualified name of the class that implements Authenticator.
Since:
1.3

getInputStream

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

See Also:
setInputStream(java.io.InputStream)

setInputStream

public void setInputStream(java.io.InputStream in)
                    throws java.io.IOException
Sets the InputStream associated with the Client being handled.

java.io.IOException
Since:
1.1
See Also:
getInputStream()

getOutputStream

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

See Also:
setOutputStream(java.io.OutputStream)

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()

getBufferedReader

public java.io.BufferedReader getBufferedReader()
Returns the BufferedReader associated with the Client being handled.

See Also:
getBufferedWriter()

getBufferedWriter

public java.io.BufferedWriter getBufferedWriter()
Returns the BufferedWriter associated with the Client being handled.


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()

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()

setClientCommandHandler

protected void setClientCommandHandler(ClientCommandHandler handler)
Sets the ClientCommandHandler class that interacts with client sockets.

Parameters:
handler - fully qualified name of the class that implements ClientCommandHandler

setClientObjectHandler

protected void setClientObjectHandler(ClientObjectHandler handler)
Sets the ClientObjectHandler class that interacts with client sockets.

Parameters:
handler - fully qualified name of the class that implements ClientObjectHandler
Since:
1.2

closeConnection

public void closeConnection()
Closes client socket associated.


getSocket

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


setSocket

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

Since:
1.4.0
See Also:
updateInputOutputStreams()

isConected

public boolean isConected()
                   throws java.net.SocketException
Checks if the client is still conected.

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

isClosed

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

Since:
1.4.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.

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

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

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.

run

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

toString

public java.lang.String toString()
Returns the Clients InetAddress

Overrides:
toString in class java.lang.Object

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

getDataMode

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

Since:
1.2

getConnection

public java.sql.Connection getConnection(java.lang.String id)
                                  throws java.lang.Exception
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)

java.lang.Exception
Since:
1.3

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

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
java.io.IOException
Since:
1.3.2

setCommunicationLogging

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

Since:
1.3.2
See Also:
getCommunicationLogging()

getCommunicationLogging

public boolean getCommunicationLogging()
Returns the communication logging flag.

Since:
1.3.2
See Also:
setCommunicationLogging(boolean)

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

updateLastCommunicationTime

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

Since:
1.3.3

getSocketTimeout

public long getSocketTimeout()
Return socket timeout

Since:
1.3.3

forceClose

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

java.io.IOException
Since:
1.3.3

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

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

updateInputOutputStreams

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

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

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(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

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

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

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
java.io.IOException
Since:
1.4

setClientBinaryHandler

protected void setClientBinaryHandler(ClientBinaryHandler handler)
Sets the ClientBinaryHandler class that interacts with client sockets.

Parameters:
handler - fully qualified name of the class that implements ClientBinaryHandler
Since:
1.4

QuickServer
v1.4.1

Copyright © 2003-2004 QuickServer.org