Chat server's threaded back-end for clients. More...
Public Member Functions | |
ChatServerClient (ChatServer server, Socket socket) | |
Creates instance of chat server's threaded back-end for specific client. | |
String | getClientName () |
Gets identifier of the client. | |
void | send (String message) |
Sends message (appended with new-line) to chat server. | |
void | run () |
Private Member Functions | |
void | sendFromEliza (String messageFromEliza) |
Sends messages from Eliza. | |
void | respondToMessage (String message) |
Broadcasts message, talks to Eliza, responds to "wwhhoo" command etc. | |
Private Attributes | |
ChatServer | server |
Instance of the server to which this client belongs. | |
PrintWriter | out |
Output stream to remote client. | |
String | clientName |
Identifier of the client (remote ip addre + remote port) | |
Socket | socket |
Connection socket to server. | |
volatile boolean | running |
Indicates if thread is (or should be) running. | |
Eliza | eliza |
Instance of Joseph Weizenbaum's Eliza, a simulation of a Rogerian shrink. |
Chat server's threaded back-end for clients.
Definition at line 16 of file ChatServerClient.java.
ChatServerClient.ChatServerClient | ( | ChatServer | server, |
Socket | socket | ||
) |
Creates instance of chat server's threaded back-end for specific client.
server | instance of the chat server, i.e. owner of this back-end |
socket | socket to remote chat client accepted by the server earlier |
Definition at line 55 of file ChatServerClient.java.
References clientName, eliza, out, running, server, and socket.
{ this.server = server; this.socket = socket; this.out = null; this.running = true; this.eliza = null; /* Setup initial client name as <addr>:<port>. * It will be resolved later in <hostname>:<port>, when the thread starts. */ this.clientName = socket.getInetAddress ().getHostAddress () + ":" + socket.getPort (); }
String ChatServerClient.getClientName | ( | ) |
Gets identifier of the client.
Definition at line 73 of file ChatServerClient.java.
References clientName.
Referenced by ChatServer.broadcast(), ChatServer.logEliza(), run(), and ChatServer.wwhhoo().
{ return clientName; }
void ChatServerClient.respondToMessage | ( | String | message ) | [private] |
Broadcasts message, talks to Eliza, responds to "wwhhoo" command etc.
Definition at line 108 of file ChatServerClient.java.
References ChatServer.broadcast(), eliza, ChatServer.getClientCount(), sendFromEliza(), server, and ChatServer.wwhhoo().
Referenced by run().
{ /* Parse input with syntax: [ [ <userId> ] ":: " ] <message> * where default userId is [Anonymous]. */ String textPart = message; String[] parts = message.split( ":: ", 2 ); // String userId = "[Anonymous]"; if ( parts.length == 0 ) { textPart = parts[0]; } else if ( parts[0].trim().length () == 0 && parts.length >= 2 ) { textPart = parts[1]; } else if ( parts.length >= 2 ) { // userId = parts[0].trim(); textPart = parts[1]; } else { textPart = parts[0]; } if ( textPart.equals( "wwhhoo" ) ) { server.wwhhoo( this ); } else if ( server.getClientCount () == 1 && eliza != null ) { server.broadcast( this, message ); sendFromEliza( eliza.processInput( textPart ) ); } else if ( eliza == null && textPart.equalsIgnoreCase( "talk eliza" ) ) { server.broadcast( this, message ); if ( server.getClientCount () > 1 ) { sendFromEliza( "We are not alone!" ); } else { eliza = new Eliza( /*local=*/true, "eliza-script.txt" ); sendFromEliza( "Hello! My name is Eliza and I am the psychoterapist. " ); sendFromEliza( " It seems that we are alone... " + "Please tell me your problem." ); } } else { server.broadcast( this, message ); } }
void ChatServerClient.run | ( | ) |
Definition at line 162 of file ChatServerClient.java.
References ChatServer.broadcast(), clientName, eliza, ChatServer.getClientCount(), getClientName(), out, ChatServer.removeClient(), respondToMessage(), running, send(), server, and socket.
{ // Create i/o buffers on client socket // BufferedReader in = null; try { this.clientName = socket.getInetAddress ().getHostName () + ":" + socket.getPort (); in = new BufferedReader( new InputStreamReader( socket.getInputStream (), "utf-8" ) ); out = new PrintWriter( new OutputStreamWriter( socket.getOutputStream(), "utf-8" ), /*autoflush*/ true ); // Live and well if reached following line // server.broadcast( null, "New client [" + getClientName() + "]" ); if ( server.getClientCount() == 1 && eliza == null ) { send( "[System] :: It seems that you are alone in the chat room. " + "Reply with 'talk eliza' if you want to bring up Eliza..." ); } } catch (IOException ex) { running = false; } while( running ) { try { String message = in.readLine (); if ( message == null ) { running = false; break; } respondToMessage( message ); } catch( IOException ex ) { running = false; } } // On socket error or regular disconnect // server.removeClient( this ); server.broadcast( null, "Client [" + getClientName() + "] disconnected" ); }
void ChatServerClient.send | ( | String | message ) |
Sends message (appended with new-line) to chat server.
message |
Definition at line 83 of file ChatServerClient.java.
References out.
Referenced by run(), and sendFromEliza().
void ChatServerClient.sendFromEliza | ( | String | messageFromEliza ) | [private] |
Sends messages from Eliza.
Definition at line 99 of file ChatServerClient.java.
References ChatServer.logEliza(), send(), and server.
Referenced by respondToMessage().
String ChatServerClient.clientName [private] |
Identifier of the client (remote ip addre + remote port)
Definition at line 31 of file ChatServerClient.java.
Referenced by ChatServerClient(), getClientName(), and run().
Eliza ChatServerClient.eliza [private] |
Instance of Joseph Weizenbaum's Eliza, a simulation of a Rogerian shrink.
Eliza may talk to user (if called up) if user is alone in the chat room.
Definition at line 47 of file ChatServerClient.java.
Referenced by ChatServerClient(), respondToMessage(), and run().
PrintWriter ChatServerClient.out [private] |
Output stream to remote client.
Definition at line 26 of file ChatServerClient.java.
Referenced by ChatServerClient(), run(), and send().
volatile boolean ChatServerClient.running [private] |
Indicates if thread is (or should be) running.
Definition at line 41 of file ChatServerClient.java.
Referenced by ChatServerClient(), and run().
ChatServer ChatServerClient.server [private] |
Instance of the server to which this client belongs.
Definition at line 21 of file ChatServerClient.java.
Referenced by ChatServerClient(), respondToMessage(), run(), and sendFromEliza().
Socket ChatServerClient.socket [private] |
Connection socket to server.
Definition at line 36 of file ChatServerClient.java.
Referenced by ChatServerClient(), and run().