Springer - An Introduction to Network Programming with Java_2

Page 99

Multithreading and Multiplexing

89

sending 'Bye'), so place this reading line inside a try and have an empty catch. 3.6

Implement the same electronic chatroom application that you did for exercise 3.5 above, but this time using Java's non-blocking I/O on the server. You may very well be able to make use of your original client program, but have the client close its socket only after it has received (and displayed) its own 'Bye' message sent back from the server. You can also now get rid of the code dealing with any NoSuchElementException. At the server end, you will probably find it useful to maintain two Vectors, the first of these holding references to all SocketChannels of newly-connected clients for which no data has been processed and the second holding references to instances/objects of class ChatUser. Each instance of this class should hold references to the SocketChannel and chatname (a String) associated with an individual chatroom user, with appropriate 'get' methods to retrieve these references. As the first message from a given user (the one holding the user's chatroom nickname) is processed, the user's SocketChannel reference should be removed from the first Vector and a ChatUser instance created and added to the second Vector. It will probably be desirable to have separate methods to deal with the following: (i) a user's entry into the chatroom; (ii) a normal message; (iii) a user's exit from the chatroom (after sending 'Bye'). Signatures for the first and last of these are shown below. public static void announceNewUser( SocketChannel userSocketChannel, ByteBuffer buffer) public static void announceExit(String name) The method for processing an ordinary message has been done for you and is shown below.

public static void broadcastMessage(String chatName, ByteBuffer buffer) { String messagePrefix = chatName + ": "; byte[] messagePrefixBytes = messagePrefix.getBytes(); final byte[] CR = "\n".getBytes();//Carriage return. try { int messageSize = buffer.position();


Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.