blob: 9ad810ea3fa5fce986514c195e1caa4e8eff6af7 [file] [log] [blame]
/*
* This file is part of the QuickServer library
* Copyright (C) QuickServer.org
*
* Use, modification, copying and distribution of this software is subject to
* the terms and conditions of the GNU Lesser General Public License.
* You should have received a copy of the GNU LGP License along with this
* library; if not, you can download a copy from <http://www.quickserver.org/>.
*
* For questions, suggestions, bug-reports, enhancement-requests etc.
* visit http://www.quickserver.org
*
*/
package org.quickserver.net.server;
import java.net.Socket;
import java.nio.channels.SocketChannel;
/**
* Encapsulates client socket and its configuration details. Used by
* {@link QuickServer} and {@link ClientHandler} classes.
* @author Akshathkumar Shetty
*/
public class TheClient {
private String timeoutMsg;
private String maxAuthTryMsg;
private int maxAuthTry;
private Socket socket;
private Authenticator authenticator;
private ClientAuthenticationHandler clientAuthenticationHandler; //v1.4.6
private ClientEventHandler eventHandler;//v1.4.6
private ClientExtendedEventHandler extendedEventHandler;//v1.4.6
private ClientCommandHandler commandHandler;
private ClientObjectHandler objectHandler; //v1.2
private ClientBinaryHandler binaryHandler; //v1.4
private QuickServer quickServer;
private ClientData clientData;
//--v1.3.2
private boolean trusted = false;
private boolean communicationLogging = true;
//--v1.4.5
private int socketTimeout;
private String maxConnectionMsg;
private ClientEvent event = ClientEvent.RUN_BLOCKING;
private SocketChannel socketChannel;
private ClientWriteHandler writeHandler;
/**
* Sets the QuickServer object associated with this Client
* @see #getServer
*/
public void setServer(QuickServer server) {
this.quickServer=server;
}
/**
* Gets the QuickServer object associated with this Client
* @see #getServer
*/
public QuickServer getServer() {
return quickServer;
}
/** Sets client socket associated. */
public void setSocket(Socket socket) {
this.socket = socket;
}
/** Returns client socket associated. */
public Socket getSocket() {
return socket;
}
/**
* Sets the Authenticator class that handles the
* authentication of a client.
* @param authenticator object that implements {@link Authenticator}.
* @see #getAuthenticator
* @since 1.3
* @deprecated As of 1.4.6 use {@link #setClientAuthenticationHandler}
*/
public void setAuthenticator(Authenticator authenticator) {
this.authenticator=authenticator;
}
/**
* Returns the Authenticator object that handles the
* authentication of a client.
* @see #setAuthenticator
* @since 1.3
* @deprecated As of 1.4.6 use {@link #getClientAuthenticationHandler}
*/
public Authenticator getAuthenticator() {
return authenticator;
}
/**
* Sets the ClientAuthenticationHandler class that handles the
* authentication of a client.
* @param clientAuthenticationHandler object that implements {@link ClientAuthenticationHandler}.
* @see #getClientAuthenticationHandler
* @since 1.4.6
*/
public void setClientAuthenticationHandler(ClientAuthenticationHandler clientAuthenticationHandler) {
this.clientAuthenticationHandler = clientAuthenticationHandler;
}
/**
* Returns the ClientAuthenticationHandler object that handles the
* authentication of a client.
* @see #setClientAuthenticationHandler
* @since 1.4.6
*/
public ClientAuthenticationHandler getClientAuthenticationHandler() {
return clientAuthenticationHandler;
}
/**
* Sets the ClientData object that carries client data.
* @param data object of the class that
* extends {@link ClientData}.
* @see #getClientData
*/
public void setClientData(ClientData data) {
this.clientData=data;
}
/**
* Returns the ClientData object that carries client data.
* @return object of the class that implements {@link ClientData}.
* @see #setClientData
*/
public ClientData getClientData() {
return clientData;
}
/**
* Sets maximum allowed login attempts.
* @since 1.2
*/
public void setMaxAuthTry(int authTry) {
maxAuthTry = authTry;
}
/**
* Returns maximum allowed login attempts.
* @since 1.2
*/
public int getMaxAuthTry() {
return maxAuthTry;
}
/** Sets message to be displayed when max login attempt reaches.*/
public void setMaxAuthTryMsg(String msg) {
maxAuthTryMsg = msg;
}
/**
* Returns message to be displayed to the client when maximum
* allowed login attempts reaches.
*/
public String getMaxAuthTryMsg() {
return maxAuthTryMsg;
}
/** Sets timeout message. */
public void setTimeoutMsg(String msg) {
timeoutMsg = msg;
}
/** Returns timeout message. */
public String getTimeoutMsg() {
return timeoutMsg;
}
/**
* Sets the ClientEventHandler objects class that gets notified of
* client events.
* @param handler object that
* implements {@link ClientEventHandler}
* @see #getClientEventHandler
* @since 1.4.6
*/
public void setClientEventHandler(ClientEventHandler handler) {
this.eventHandler = handler;
}
/**
* Returns the ClientEventHandler object that gets notified of
* client events.
* @see #setClientEventHandler
* @since 1.4.6
*/
public ClientEventHandler getClientEventHandler() {
return eventHandler;
}
/**
* Sets the ClientExtendedEventHandler objects class that gets notified of
* extended client events.
* @param handler object that
* implements {@link ClientExtendedEventHandler}
* @see #getClientExtendedEventHandler
* @since 1.4.6
*/
public void setClientExtendedEventHandler(ClientExtendedEventHandler handler) {
this.extendedEventHandler = handler;
}
/**
* Returns the ClientExtendedEventHandler object that gets notified of
* client events.
* @see #setClientExtendedEventHandler
* @since 1.4.6
*/
public ClientExtendedEventHandler getClientExtendedEventHandler() {
return extendedEventHandler;
}
/**
* Sets the ClientCommandHandler objects that interacts with
* client sockets.
* @param handler object that
* implements {@link ClientCommandHandler}
* @see #getClientCommandHandler
*/
public void setClientCommandHandler(ClientCommandHandler handler) {
this.commandHandler = handler;
}
/**
* Returns the ClientCommandHandler object that interacts with
* client sockets.
* @see #setClientCommandHandler
*/
public ClientCommandHandler getClientCommandHandler() {
return commandHandler;
}
/**
* Sets the ClientObjectHandler object that interacts with
* client sockets.
* @param handler object that
* implements {@link ClientObjectHandler}
* @see #getClientObjectHandler
* @since 1.2
*/
public void setClientObjectHandler(ClientObjectHandler handler) {
this.objectHandler = handler;
}
/**
* Returns the ClientObjectHandler object that interacts with
* client sockets.
* @see #setClientObjectHandler
* @since 1.2
*/
public ClientObjectHandler getClientObjectHandler() {
return objectHandler;
}
/**
* Returns flag to skip timeout setting and authentication of this client.
* @since 1.3.2
*/
public boolean getTrusted() {
return trusted;
}
/**
* Sets flag to skip timeout setting and authentication of this client.
* @since 1.3.2
*/
public void setTrusted(boolean flag) {
trusted = flag;
}
/**
* Sets the communication logging flag.
* @see #getCommunicationLogging
* @since 1.3.2
*/
public void setCommunicationLogging(boolean communicationLogging) {
this.communicationLogging = communicationLogging;
}
/**
* Returns the communication logging flag.
* @see #setCommunicationLogging
* @since 1.3.2
*/
public boolean getCommunicationLogging() {
return communicationLogging;
}
/**
* Sets the ClientBinaryHandler object that interacts with
* client sockets.
* @param handler object that
* implements {@link ClientBinaryHandler}
* @see #getClientBinaryHandler
* @since 1.4
*/
public void setClientBinaryHandler(ClientBinaryHandler handler) {
this.binaryHandler = handler;
}
/**
* Returns the ClientBinaryHandler object that interacts with
* client sockets.
* @see #setClientBinaryHandler
* @since 1.4
*/
public ClientBinaryHandler getClientBinaryHandler() {
return binaryHandler;
}
/**
* Sets the client socket's timeout.
* @param time client socket timeout in milliseconds.
* @see #getTimeout
* @since 1.4.5
*/
public void setTimeout(int time) {
socketTimeout = time;
}
/**
* Returns the Client socket timeout in milliseconds.
* @see #setTimeout
* @since 1.4.5
*/
public int getTimeout() {
return socketTimeout;
}
/**
* Sets ClientEvent.
* @since 1.4.5
*/
public void setClientEvent(ClientEvent event) {
this.event = event;
}
/**
* Returns ClientEvent.
* @since 1.4.5
*/
public ClientEvent getClientEvent() {
return event;
}
/**
* Sets message to be displayed when maximum connection reaches.
* @since 1.4.5
*/
public void setMaxConnectionMsg(String msg) {
maxConnectionMsg = msg;
}
/**
* Returns message to be displayed to the client when maximum
* connection reaches.
* @since 1.4.5
*/
public String getMaxConnectionMsg() {
return maxConnectionMsg;
}
/**
* Sets client socket channel associated, if any.
* @since 1.4.5
*/
public void setSocketChannel(SocketChannel socketChannel) {
this.socketChannel = socketChannel;
}
/**
* Returns client socket channel associated, if any.
* @since 1.4.5
*/
public SocketChannel getSocketChannel() {
return socketChannel;
}
/**
* Sets the ClientWriteHandler object that interacts with
* client sockets.
* @param handler object that
* implements {@link ClientWriteHandler}
* @see #getClientWriteHandler
* @since 1.4.5
*/
public void setClientWriteHandler(ClientWriteHandler handler) {
this.writeHandler = handler;
}
/**
* Returns the ClientWriteHandler object that interacts with
* client sockets.
* @see #setClientWriteHandler
* @since 1.4.5
*/
public ClientWriteHandler getClientWriteHandler() {
return writeHandler;
}
/**
* Returns client info.
* @since 1.4.5
*/
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("{TheClient ");
if(socket!=null)
sb.append(socket);
else
sb.append("no socket");
sb.append(", Event: ").append(event);
sb.append('}');
return sb.toString();
}
}