📄 0029.htm
字号:
setTitle("Chat & WhiteBoard Server 1.0");<br>
setIconImage(icon);<br>
//}}<br>
<br>
message_TextArea = new java.awt.TextArea();<br>
message_TextArea.reshape(insets().left + 12,<br>
insets().top + 36,396,240);<br>
add(message_TextArea);<br>
users_List = new java.awt.List(5,false);<br>
add(users_List);<br>
users_List.reshape(insets().left + 432,<br>
insets().top + 144,76,110);<br>
room_Choice = new java.awt.Choice();<br>
add(room_Choice);<br>
room_Choice.reshape(insets().left + 420,<br>
insets().top + 60,100,1);<br>
message_Label = new java.awt.Label("message");<br>
message_Label.reshape(insets().left + 36,<br>
insets().top + 12,100,24);<br>
add(message_Label);<br>
room_Label = new java.awt.Label("Chat room");<br>
room_Label.reshape(insets().left + 420,<br>
insets().top + 14,100,24);<br>
add(room_Label);<br>
userList_Label = new java.awt.Label("user List");<br>
userList_Label.reshape(insets().left + 420,<br>
insets().top + 108,100,28);<br>
add(userList_Label);<br>
clean_Button = new java.awt.Button("clean");<br>
clean_Button.reshape(insets().left + 180,<br>
insets().top + 12,60,24);<br>
add(clean_Button);<br>
<br>
<br>
//{{INIT_MENUS<br>
mainMenuBar = new java.awt.MenuBar();<br>
<br>
menu1 = new java.awt.Menu("File");<br>
menu1.add("Restart");<br>
menu1.add("Exit");<br>
mainMenuBar.add(menu1);<br>
<br>
<br>
menu3 = new java.awt.Menu("Help");<br>
mainMenuBar.setHelpMenu(menu3);<br>
menu3.add("About");<br>
mainMenuBar.add(menu3);<br>
setMenuBar(mainMenuBar);<br>
//$$ mainMenuBar.move(4,277);<br>
<br>
<br>
this.port=port;<br>
initServer(port);<br>
<br>
<br>
}// constructor 1 ended<br>
<br>
ChatServer() throws IOException{<br>
this(ChatServer.DEFAULT_PORT);<br>
}// contructor 2 ended<br>
<br>
void cleanButton_Clicked(Event event) {<br>
<br>
<br>
//{{CONNECTION<br>
// Hide the Frame<br>
message_TextArea.setText("");<br>
//}}<br>
}<br>
void About_Action(Event event) {<br>
//{{CONNECTION<br>
// Action from About Create and show as modal<br>
(new AboutDialog(this, true)).show();<br>
//}}<br>
}<br>
<br>
void Exit_Action(Event event) {<br>
//{{CONNECTION<br>
// Action from Exit Create and show as modal<br>
(new QuitDialog(this, true)).show();<br>
//}}<br>
}<br>
<br>
void Restart_Action(Event e) {<br>
try{<br>
quit();<br>
initServer(port);<br>
}catch(Exception e1){<br>
message_TextArea.appendText("\ninit server error");<br>
}<br>
}<br>
<br>
public synchronized void show() {<br>
move(50, 50);<br>
<br>
super.show();<br>
}<br>
<br>
void roomChoice_Action(Event e) {<br>
<br>
String roomName=null;<br>
int roomID=0;<br>
<br>
users_List.clear();<br>
roomName=room_Choice.getSelectedItem();<br>
roomID=roomGroup.getRoomID(roomName);<br>
for(int i=0;i< users.length;i++) {<br>
if ((users[i].logged)&&(users[i].belongRoom)<br>
&&(users[i].roomID==roomID)) {<br>
users_List.addItem(users[i].name);<br>
}<br>
}<br>
}<br>
<br>
<br>
public boolean handleEvent(Event event) {<br>
if (event.id == Event.WINDOW_DESTROY) {<br>
quit();<br>
hide(); // hide the Frame<br>
dispose(); // free the system resources<br>
System.exit(0); // close the application<br>
return true;<br>
}<br>
if (event.target == room_Choice && event.id == <br>
Event.ACTION_EVENT) {<br>
roomChoice_Action(event);<br>
return true;<br>
}<br>
if (event.target == clean_Button && event.id <br>
== Event.ACTION_EVENT) {<br>
cleanButton_Clicked(event);<br>
return true;<br>
}<br>
<br>
return super.handleEvent(event);<br>
}<br>
<br>
public boolean action(Event event, Object arg) {<br>
if (event.target instanceof MenuItem) {<br>
String label = (String) arg;<br>
if (label.equalsIgnoreCase("About")) {<br>
About_Action(event);<br>
return true;<br>
} else<br>
if (label.equalsIgnoreCase("Exit")) {<br>
Exit_Action(event);<br>
return true;<br>
} else<br>
if (label.equalsIgnoreCase("Restart")) {<br>
Restart_Action(event);<br>
return true;<br>
}<br>
}<br>
return super.action(event, arg);<br>
}<br>
<br>
public static void main(String args[]) {<br>
<br>
try{<br>
ChatServer chatServer=new ChatServer();<br>
}catch(Exception e){<br>
System.out.println(e);<br>
}<br>
}<br>
<br>
<br>
public void go() {<br>
for(int i=0;i< users.length;i++) {<br>
users[i].start();<br>
}<br>
}// method 'go' ended<br>
<br>
public void quit() {<br>
for(int i=0;i< users.length;i++) {<br>
if (users[i]!=null) users[i].destroy();<br>
}<br>
try{<br>
ss.close();<br>
ss=null;<br>
room_Choice.removeAll();<br>
users_List.clear();<br>
message_TextArea.appendText("\nserver socket closed");<br>
<br>
}catch(IOException e){<br>
System.out.println(e);<br>
}<br>
}// method 'quit' ended<br>
<br>
} // class 'ChatServer' ended<br>
<br>
<br>
//class 2:RoomGroup,服务器用的交谈室数据类<br>
class RoomGroup {<br>
<br>
Room[] rooms=null;<br>
final static String DEFAULT_ROOM_SUBJECT="默认";<br>
final static int DEFAULT_ROOM_ID=0;<br>
Choice room_Choice=null;<br>
List users_List=null;<br>
User[] users=null;<br>
ChatServer chatServer=null;<br>
<br>
RoomGroup(int roomCount,Choice room_Choice,<br>
ChatServer chatServer) {<br>
this.chatServer=chatServer;<br>
this.room_Choice=room_Choice;<br>
this.users=users;<br>
this.users_List=users_List;<br>
rooms=new Room[roomCount];<br>
try{<br>
newRoom(DEFAULT_ROOM_SUBJECT);<br>
}catch(Exception e){<br>
System.out.println(e);<br>
}<br>
}// contructor 1 ended<br>
<br>
void setUsers(User[] users) {<br>
this.users=users;<br>
}<br>
<br>
void refreshList() {<br>
chatServer.handleEvent(new Event(this, Event.ACTION_EVENT, null));<br>
}<br>
<br>
public int getRoomID(String roomName){<br>
for(int i=0;i< rooms.length;i++) {<br>
if ((rooms[i]!=null)&&(rooms[i].getRoomName().equals(roomName))) {<br>
return i;<br>
}<br>
}<br>
return 0;<br>
<br>
}// method 'getRoomID' ended<br>
<br>
public int newRoom(String subject) throws TooManyRoomsException {<br>
int i=0;<br>
while((i< rooms.length)&&(rooms[i]!=null)) {<br>
i++;<br>
}<br>
if (i< rooms.length) {<br>
rooms[i]=new Room(subject,i);<br>
room_Choice.addItem(subject);<br>
room_Choice.repaint();<br>
return i;<br>
}else {<br>
throw new TooManyRoomsException();<br>
}<br>
} // method 'newRoom' ended<br>
<br>
public void join(int roomID,User user) throws NoSuchRoomException {<br>
try{<br>
rooms[roomID].join(user);<br>
room_Choice.select(getRoomName(roomID));<br>
refreshList();<br>
}catch(ArrayIndexOutOfBoundsException e){<br>
throw new NoSuchRoomException();<br>
}catch(NullPointerException e) {<br>
throw new NoSuchRoomException();<br>
}<br>
} // method 'join' ended<br>
<br>
public void quit(int roomID,User user) throws NoSuchRoomException {<br>
try{<br>
try{<br>
rooms[roomID].quit(user);<br>
room_Choice.select(getRoomName(roomID));<br>
refreshList();<br>
<br>
}catch(NotMemberException e){<br>
}finally{<br>
if ((rooms[roomID].getUserCount()==0)&&<br>
(roomID!=DEFAULT_ROOM_ID)) {<br>
room_Choice.remove(rooms[roomID].getRoomName());<br>
rooms[roomID]=null;<br>
}<br>
}<br>
}catch(ArrayIndexOutOfBoundsException e){<br>
throw new NoSuchRoomException();<br>
}catch(NullPointerException e) {<br>
throw new NoSuchRoomException();<br>
}<br>
} // method 'quit' ended<br>
<br>
public String[] getUsersName(int roomID) <br>
throws NoSuchRoomException {<br>
try{<br>
if (rooms[roomID]!=null)<br>
return rooms[roomID].getUsersName();<br>
else return null;<br>
}catch(ArrayIndexOutOfBoundsException e) {<br>
throw new NoSuchRoomException();<br>
}<br>
} // method 'getUsersName' ended<br>
<br>
public int getUserCount(int roomID) throws NoSuchRoomException {<br>
try{<br>
return rooms[roomID].getUserCount();<br>
}catch(ArrayIndexOutOfBoundsException e) {<br>
throw new NoSuchRoomException();<br>
}catch(NullPointerException e) {<br>
throw new NoSuchRoomException();<br>
}<br>
} // method 'getUserCount' ended<br>
<br>
public String getRoomName(int roomID) throws NoSuchRoomException {<br>
try{<br>
return rooms[roomID].getRoomName();<br>
}catch(ArrayIndexOutOfBoundsException e) {<br>
throw new NoSuchRoomException();<br>
}catch(NullPointerException e) {<br>
throw new NoSuchRoomException();<br>
}<br>
} // method 'getRoomName' ended<br>
<br>
public boolean isActive(int roomID) throws NoSuchRoomException {<br>
try{<br>
if (rooms[roomID]!=null)<br>
return true;<br>
else return false;<br>
}catch(ArrayIndexOutOfBoundsException e) {<br>
throw new NoSuchRoomException();<br>
}<br>
}//method 'isActive' ended<br>
<br>
public int roomCount() {<br>
return rooms.length;<br>
} //method 'roomCount' ended<br>
<br>
} // class 'RoomGroup' ended<br>
<br>
// class 3:'Room',RoomGroup引用的数据类<br>
class Room {<br>
<br>
String subject=null;<br>
int ID=0;<br>
Vector users=null;<br>
<br>
Room(String s,int ID) {<br>
subject=s;<br>
this.ID=ID;<br>
users=new Vector(10,5);<br>
<br>
}// constructor 1 ended<br>
<br>
public void join(User user) {<br>
users.addElement(user);<br>
user.roomID=ID;<br>
user.paused=false;<br>
}// method 'join' ended<br>
<br>
public void quit(User user) throws NotMemberException {<br>
if (users.contains(user)) {<br>
users.removeElement(user);<br>
}else<br>
throw new NotMemberException();<br>
}// method 'quit' ended<br>
<br>
public String[] getUsersName() {<br>
<br>
String[] usersName=null;<br>
<br>
if (users.size()!=0) {<br>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -