?? 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 + -