1A Simple Chat Server Example 2 3INTRODUCTION 4============ 5This directory contains a very simple chat server, the server takes input from a 6socket ("user") and sends it to all other connected sockets ("users") along with 7the provided name the user was asked for when first connecting. 8 9The server was written to demonstrate the asynchronous I/O API in JDK 7. 10The sample assumes the reader has some familiarity with the subject matter. 11 12SETUP 13===== 14 15The server must be built with version 7 (or later) of the JDK. 16The server is built with: 17 18 % mkdir build 19 % javac -source 7 -target 7 -d build *.java 20 21EXECUTION 22========= 23 24 % java -classpath build ChatServer [-port <port number>] 25 26 Usage: ChatServer [options] 27 options: 28 -port port port number 29 default: 5000 30 31CLIENT EXECUTION 32================ 33 34No client binary is included in the sample. 35Connections can be made using for example the telnet command or any program 36that supports a raw TCP connection to a port. 37 38SOURCE CODE OVERVIEW 39==================== 40ChatServer is the main class, it handles the startup and handles incoming 41connections on the listening sockets. It keeps a list of connected client 42and provides methods for sending a message to them. 43 44Client represents a connected user, it provides methods for reading/writing 45from/to the underlying socket. It also contains a buffer of input read from 46the user. 47 48DataReader provides the interface of the two states a user can 49be in. Waiting for a name (and not receiving any messages while doing so, implemented 50by NameReader) and waiting for messages from the user (implemented by MessageReader). 51 52ClientReader contains the "main loop" for a connected client. 53 54NameReader is the initial state for a new client, it sends the user a string and 55waits for a response before changing the state to MessageReader. 56 57MessageReader is the main state for a client, it checks for new messages to send to 58other clients and reads messages from the client. 59 60FINALLY 61======= 62This is a sample: it is not production quality and isn't optimized for performance. 63