📄 simplemultichatserver.java
字号:
package onlyfun.caterpillar.simplenet.multichat;
import java.io.*;
import java.net.ServerSocket;
import java.util.*;
public class SimpleMultiChatServer {
private ServerSocket serverSocket;
private List clientList;
public SimpleMultiChatServer(int serverPort) throws IOException {
serverSocket = new ServerSocket(serverPort);
clientList = new ArrayList();
log("multi chat server start up....");
}
// Wait for next client.
// If there's one, add it to the client list and start a subServer thread for it.
public void waitForNextClient() throws IOException {
SimpleMultiChatSubServer subServer =
new SimpleMultiChatSubServer(serverSocket.accept(), this);
addSubServer(subServer);
Thread thread = new Thread(subServer);
thread.setDaemon(true);
thread.start();
}
public void removeDeadConnections() {
Iterator iterator = clientList.iterator();
List deadConnections = new ArrayList();
SimpleMultiChatSubServer subServer;
while(iterator.hasNext()) {
subServer = (SimpleMultiChatSubServer) iterator.next();
if(subServer.isClosed())
deadConnections.add(subServer);
}
removeSubServers(deadConnections);
}
public Iterator getClientList() {
removeDeadConnections();
return clientList.iterator();
}
// Remove the client According to the client number
public void removeClientAccordingTo(int number) {
SimpleMultiChatSubServer subServer = (SimpleMultiChatSubServer) clientList.get(number);
shutdownSubServer(subServer);
clientList.remove(number);
log(subServer.getName() + ": removed");
}
// Broadcast
public void broadCastToClient(String message) {
Iterator iterator = clientList.iterator();
SimpleMultiChatSubServer subServer;
while(iterator.hasNext()) {
subServer = (SimpleMultiChatSubServer) iterator.next();
subServer.sendMessageToClient(message);
}
log(message);
}
// Shutdown all subServers first.
// Then shutdown the multi chat server.
public void shutdown() {
Iterator iterator = clientList.iterator();
SimpleMultiChatSubServer subServer;
while(iterator.hasNext()) {
subServer = (SimpleMultiChatSubServer) iterator.next();
shutdownSubServer(subServer);
}
removeSubServers(clientList);
try {
serverSocket.close();
}
catch(IOException e) {
log("server shutdown: " + e);
}
log("multi chat server shutdown ok...");
}
public Object log(Object o) {
System.out.println(o);
return null;
}
private void addSubServer(SimpleMultiChatSubServer subServer) {
clientList.add(subServer);
log(subServer.getName() + ": added");
}
private void removeSubServers(List subServers) {
Iterator iterator = subServers.iterator();
SimpleMultiChatSubServer subServer;
while(iterator.hasNext()) {
subServer = (SimpleMultiChatSubServer) iterator.next();
log(subServer.getName() + ": removed");
}
clientList.removeAll(subServers);
}
private void shutdownSubServer(SimpleMultiChatSubServer subServer) {
// The multi chat server's hascode is necessary for notify a subServer
// that this is a main server's command.
subServer.sendMessageToClient(this.hashCode() + ":quit");
subServer.shutdown();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -