📄 server.java
字号:
package freech.core;
import java.io.*;
import java.net.ServerSocket;
import java.util.Hashtable;
import javax.xml.parsers.*;
import org.w3c.dom.*;
import org.xml.sax.SAXException;
import freech.room.Room;
public class Server {
public static Server svr = null;
private String BASE_PATH = null;
private Hashtable rtop;//端口到房间的印射
private int[] ports = null;// 端口
private ServerSocket[] sers = null;
public Server() {
rtop = new Hashtable();
}
public static void main(String args[]) {
svr = new Server();
svr.readConfig();
svr.startThread();
}
private void startThread() {
sers = startRoomListen(ports);
}
private void readConfig() {
DocumentBuilderFactory docf = DocumentBuilderFactory.newInstance() ;
try {
DocumentBuilder domb = docf.newDocumentBuilder() ;
if(BASE_PATH ==null){
BASE_PATH = "./";
}
StringBuffer sb = new StringBuffer(BASE_PATH).append( "/baseconfig.xml");
System.out.println(""+sb.toString() );
InputStream in = new FileInputStream(sb.toString() );
Document doc = domb.parse(in);
Element root =doc.getDocumentElement(); //<rooms> </rooms>
NodeList rooms =doc.getElementsByTagName( "room");//比较好的方法
System.out.println(rooms.getLength() );
ports = new int[rooms.getLength() ];
for(int i=0;i<rooms.getLength() ;i++){
Element room = (Element) rooms.item( i);//<room> </room>
Room room1 = new Room();
String roomname = room.getElementsByTagName( "name").item( 0).getFirstChild() .getNodeValue();
room1.setName( roomname);
System.out.println(roomname);
String port = room.getElementsByTagName( "port").item( 0).getFirstChild() .getNodeValue();
room1.setPort( port);
ports[i]=Integer.parseInt( port);
System.out.println(port);
rtop.put( port,room1);
}
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// 每个房间对应一个监听端口,端口号从配置文件读取
private ServerSocket[] startRoomListen(int[] ports) {
ServerSocket[] ss = new ServerSocket[ports.length];
try {
for (int i = 0; i < ports.length; i++) {
ss[i] = new ServerSocket(ports[i]);
new RoomListen(ss[i], i, ports[i]).start();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return ss;
}
public Hashtable getRtop() {
return rtop;
}
public String getBASE_PATH() {
return BASE_PATH;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -