diff options
Diffstat (limited to 'src/javaChat/ChatServer.java')
| -rw-r--r-- | src/javaChat/ChatServer.java | 237 |
1 files changed, 0 insertions, 237 deletions
diff --git a/src/javaChat/ChatServer.java b/src/javaChat/ChatServer.java deleted file mode 100644 index 22c5575..0000000 --- a/src/javaChat/ChatServer.java +++ /dev/null @@ -1,237 +0,0 @@ -package javaChat; - -import java.net.* ; -import java.util.* ; -import java.io.* ; - -public class ChatServer - { - - // List of all active users in Server - static ArrayList<ClientHandler> userList = new ArrayList<>() ; - - /** - * Accepts Client requests to join chat server, and - * creates new thread for each individual client. - * - * @param args - * @throws IOException - */ - public static void main( String[] args ) throws IOException - { - - // Register service on port 6789 - ServerSocket serverSocket = new ServerSocket( 6789 ) ; - Socket socket = null ; - - System.out.println( "\nServer established. Awaiting connections..." ) ; - - // Accept client requests - while( true ) - { - socket = serverSocket.accept() ; - - DataOutputStream dataStreamOut = new DataOutputStream( socket.getOutputStream() ) ; - DataInputStream dataStreamIn = new DataInputStream ( socket.getInputStream() ) ; - - System.out.println( "\nClient connection detected, requesting username..." ) ; - String username = dataStreamIn.readUTF() ; - - ClientHandler handle = new ClientHandler( socket, username, dataStreamOut, dataStreamIn ) ; - - System.out.println( "\nCreating new thread...\n" ) ; - Thread thread = new Thread( handle ) ; - - userList.add( handle ) ; - - thread.start() ; - - } - } - - } - // end class ChatClient - - - - - // This class manages the actual messages being sent around - @SuppressWarnings( "javadoc" ) - class ClientHandler implements Runnable - { - - Socket socket ; - String username ; - final DataOutputStream dataStreamOut ; - final DataInputStream dataStreamIn ; - boolean loggedIn ; - private ArrayList<ClientHandler> userList ; - - - /** - * Constructor - * @param s : client socket - * @param user : client's user-name - * @param dos : data stream to client - * @param dis : data stream from client - */ - public ClientHandler( Socket s, String user, - DataOutputStream dos, - DataInputStream dis ) - { - this.username = user ; - this.socket = s ; - this.dataStreamOut = dos ; - this.dataStreamIn = dis ; - this.loggedIn = true ; - - } - - @Override - public void run() - { - - // Note the connection of the new user - String announcement = String.format( "-= User \"%s\" has successfully connected =-\n", this.username ) ; - System.out.println( announcement ) ; - - // Distribute announcement to entire server - distributeAll( announcement ) ; - - // Message management - String message = "" ; - while( true ) - { - // Read incoming messages - try - { - message = this.dataStreamIn.readUTF() ; - } - catch ( IOException x ) - { - x.printStackTrace() ; - } - - // Check message for user commands, returns TRUE is user quits - if( commands(message, this) ) - { - break ; - } - - // Print the message server-side - message = String.format( "%s: %s", this.username, message ) ; - System.out.println( message ) ; - - // Distribute the message to all users - sendMessage( message ) ; - // end try - - } - - try - { - this.loggedIn = false ; - this.socket.close() ; - } - catch( IOException x ) - { - x.printStackTrace() ; - } - } - - - // This method manages the usage of user-commands - public boolean commands(String message, ClientHandler user) - { - String[] commands = new String[] {"/help", "/quit", "/userlist"} ; - - try { - - // Quit command terminates connection, with an announcement - if( message.equals( "/quit" )) - { - String announcement = String.format( "\n-= \"%s\" has disconnected =- \n", user.username ) ; - System.out.println( announcement ) ; - distributeAll( announcement ) ; - return true ; - } - - if( message.equals( "/userlist" ) ) - { - user.dataStreamOut.writeUTF( "Current list of users in the server: " ) ; - for( ClientHandler users : ChatServer.userList ) - { - if( !users.loggedIn ) - { - continue ; - } - - user.dataStreamOut.writeUTF( users.username ) ; - - } - } - - if( message.contentEquals( "/help" ) ) - { - user.dataStreamOut.writeUTF( "\nAll available commands: " ); - for(int i = 0; i < commands.length; i++ ) - { - user.dataStreamOut.writeUTF( commands[i] ); - } - - user.dataStreamOut.writeUTF( "\n" ) ; - } - } - - catch( IOException x ) - { - System.out.println( x ) ; - } - - return false ; - } - - - // Convenience method to send messages (but not to the user that's sending the message) - private void sendMessage(String message) - { - try - { - for( ClientHandler users : ChatServer.userList ) - { - if( !users.loggedIn || users.equals( this ) ) - { - continue ; - } - users.dataStreamOut.writeUTF( "> " + message ) ; - } - } - catch ( IOException x ) - { - x.printStackTrace() ; - } - } - - - // Convenience method to distribute messages to all clients (announcements) - private void distributeAll(String message) - { - try - { - for( ClientHandler users : ChatServer.userList ) - { - if( !users.loggedIn ) - { - continue ; - } - users.dataStreamOut.writeUTF( message ) ; - } - } - catch ( IOException x ) - { - x.printStackTrace() ; - } - } - - } - // end class ClientHandler
\ No newline at end of file |
