1.Implement the same electronic chatroom application that you did for exercise
2. 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)