📄 0029.htm
字号:
usersName=new String[users.size()];<br>
for(int i=0;i< usersName.length;i++) {<br>
usersName[i]=((User)(users.elementAt(i))).name;<br>
}<br>
return usersName;<br>
}else {<br>
return null;<br>
}<br>
}<br>
// method 'getUsersName' ended<br>
<br>
public String getRoomName() {<br>
return subject;<br>
}// method 'getRoomName' ended<br>
<br>
public int getUserCount() {<br>
return users.size();<br>
}// method 'getUserCount' ended<br>
<br>
} // class 'Room' ended<br>
<br>
//class 4:'User',服务器引用的用户服务线程类<br>
class User extends Thread {<br>
<br>
String name=null;<br>
int ID=0;<br>
boolean paused=false;<br>
boolean used=false;<br>
boolean belongRoom=false;<br>
boolean logged=false;<br>
DataInputStream io_in=null;<br>
DataOutputStream io_out=null;<br>
int roomID=0;<br>
ServerSocket ss=null;<br>
Socket s=null;<br>
User[] users=null;<br>
RoomGroup roomGroup=null;<br>
TextArea message_TextArea=null;<br>
ChatServer chatServer=null;<br>
<br>
User(ChatServer chatServer,int ID) {<br>
this.message_TextArea=chatServer.message_TextArea;<br>
this.ss=chatServer.ss;<br>
this.users=chatServer.users;<br>
this.roomGroup=chatServer.roomGroup;<br>
this.ID=ID;<br>
this.chatServer=chatServer;<br>
}// CONSTRATOR 1 ended<br>
<br>
public void run() {<br>
used=false;<br>
try{<br>
while(true){<br>
String message=null;<br>
s=ss.accept();<br>
message_TextArea.appendText("\nChannel "+ID+" socket opened");<br>
io_in=new DataInputStream(s.getInputStream());<br>
io_out=new DataOutputStream(s.getOutputStream());<br>
used=true;<br>
logged=false;<br>
try{<br>
while(used) {<br>
message=io_in.readUTF();<br>
message_TextArea.appendText("\nChannel"+ID+"("+<br>
name+"):receive:"+message);<br>
chatServer.num_Line++;<br>
if (chatServer.num_Line >150) {<br>
message_TextArea.setText("");<br>
chatServer.num_Line=0;<br>
}<br>
if (message.equals("text")) sendText();<br>
else if (message.equals("draw")) sendDraw();<br>
else {<br>
commandCenter(message,new DataBag("none","none",0,0,0,0,0));<br>
if<br>
((message.equals("new"))|(message.equals("join"))) <br>
refreshToAll();<br>
else if (message.equals("quit")) refreshToAllNotMe();<br>
}<br>
}<br>
}catch(PleaseCloseSocketException e) {<br>
}catch(IOException e){<br>
}finally {<br>
try{<br>
roomGroup.quit(roomID,this);<br>
refreshToAllNotMe();<br>
}catch(Exception e){}<br>
socketClose();<br>
used=false;<br>
logged=false;<br>
}<br>
}<br>
}catch(IOException e){<br>
System.out.println(e);<br>
}<br>
}// method 'run' ended<br>
<br>
public void destroy() {<br>
socketClose();<br>
this.stop();<br>
}// method 'destroy' ended<br>
<br>
public void socketClose() {<br>
try{<br>
io_in.close();<br>
io_in=null;<br>
}catch(Exception e){}<br>
try{<br>
io_out.flush();<br>
io_out.close();<br>
io_out=null;<br>
}catch(Exception e){}<br>
try{<br>
s.close();<br>
s=null;<br>
}catch(Exception e){}<br>
}// method 'socketClose' ended<br>
<br>
public void sendText() throws PleaseCloseSocketException {<br>
<br>
String message=null;<br>
DataBag data=null;<br>
try{<br>
synchronized (this){<br>
message=io_in.readUTF();<br>
}<br>
data=new DataBag(name,message,0,0,0,0,0);<br>
for(int i=0;i< users.length;i++) {<br>
if ((users[i].logged)&&(users[i].ID!=ID)&&<br>
(!users[i].paused)&&(users[i].roomID==roomID))<br>
users[i].commandCenter("server_ask_text",data);<br>
}<br>
}catch(IOException e){<br>
throw new PleaseCloseSocketException();<br>
}<br>
}// method 'sendText' ended<br>
<br>
public void sendDraw() throws PleaseCloseSocketException {<br>
<br>
String message=null;<br>
int color=0,x0=0,y0=0,x1=0,y1=0;<br>
DataBag data=null;<br>
try{<br>
synchronized (this) {<br>
color=io_in.readInt();<br>
x0=io_in.readShort();<br>
y0=io_in.readShort();<br>
x1=io_in.readShort();<br>
y1=io_in.readShort();<br>
<br>
}<br>
data=new DataBag("none","none",color,x0,y0,x1,y1);<br>
for(int i=0;i< users.length;i++) {<br>
if ((users[i].logged)&&(users[i].ID!=ID)<br>
&&(!users[i].paused)&&(users[i].roomID==roomID))<br>
users[i].commandCenter("server_ask_draw",data);<br>
}<br>
}catch(IOException e){<br>
throw new PleaseCloseSocketException();<br>
}<br>
}// method 'sendDraw' ended<br>
<br>
<br>
public void refreshToAll() throws PleaseCloseSocketException {<br>
for(int i=0;i< users.length;i++) {<br>
if (users[i].logged)<br>
users[i].commandCenter("server_ask_refresh",new<br>
DataBag("none","none",0,0,0,0,0));<br>
}<br>
}// method "refreshToAll" ended<br>
<br>
public void refreshToAllNotMe() throws PleaseCloseSocketException {<br>
for(int i=0;i< users.length;i++) {<br>
if ((users[i].logged)&&(users[i].ID!=ID))<br>
users[i].commandCenter("server_ask_refresh",<br>
new DataBag("none","none",0,0,0,0,0));<br>
}<br>
}// method "refreshToAll" ended<br>
<br>
<br>
public void commandCenter(String command,<br>
DataBag data) throws<br>
PleaseCloseSocketException {<br>
if (command.equals("server_ask_refresh")) server_ask_refresh();<br>
else if (command.equals("refresh")) server_answer_refresh();<br>
else if (command.equals("log")) server_answer_log();<br>
else if (command.equals("join")) server_answer_join();<br>
else if (command.equals("pause")) server_answer_pause();<br>
else if (command.equals("continue")) server_answer_continue();<br>
else if (command.equals("new")) server_answer_newRoom();<br>
else if (command.equals("quit")) server_answer_quit();<br>
else if (command.equals("server_ask_text")) server_ask_text(data);<br>
else if (command.equals("server_ask_draw")) server_ask_draw(data);<br>
<br>
<br>
}// method commandCenter ended<br>
<br>
private void server_ask_draw(DataBag data) throws<br>
PleaseCloseSocketException {<br>
<br>
String message=null;<br>
<br>
try{<br>
synchronized (this){<br>
io_out.writeUTF("draw");<br>
io_out.writeInt(data.color);<br>
io_out.writeShort(data.x0);<br>
io_out.writeShort(data.y0);<br>
io_out.writeShort(data.x1);<br>
io_out.writeShort(data.y1);<br>
}<br>
message_TextArea.appendText("\nChannel"+ID+"("+<br>
name+"):send:"+"draw data");<br>
<br>
}catch(IOException e){<br>
throw new PleaseCloseSocketException();<br>
}<br>
<br>
}// method 'server_ask_draw' ended<br>
<br>
private void server_ask_text(DataBag data) throws<br>
PleaseCloseSocketException {<br>
<br>
String message=null;<br>
<br>
try{<br>
synchronized (this){<br>
io_out.writeUTF("text");<br>
io_out.writeUTF(data.name);<br>
io_out.writeUTF(data.message);<br>
}<br>
message_TextArea.appendText("\nChannel"+ID+"("+<br>
name+"):send:"+"text :"+data.message);<br>
<br>
}catch(IOException e){<br>
throw new PleaseCloseSocketException();<br>
}<br>
<br>
}// method 'server_ask_text' ended<br>
<br>
private void server_ask_refresh() throws <br>
PleaseCloseSocketException {<br>
<br>
String message=null;<br>
<br>
try{<br>
synchronized (this){<br>
io_out.writeUTF("refresh");<br>
for(int i=0;i< roomGroup.roomCount();i++) {<br>
if (roomGroup.isActive(i)) {<br>
io_out.writeUTF(roomGroup.getRoomName(i));<br>
String[] names=roomGroup.getUsersName(i);<br>
if (names!=null)<br>
for(int j=0;j< names.length;j++) {<br>
io_out.writeUTF(names[j]);<br>
}<br>
io_out.writeUTF("complete");<br>
}<br>
}<br>
io_out.writeUTF("ok");<br>
io_out.writeUTF(roomGroup.getRoomName(roomID));<br>
}<br>
message_TextArea.appendText("\nChannel"+ID+"("+<br>
name+"):send:"+"refresh data");<br>
}catch(IOException e){<br>
throw new PleaseCloseSocketException();<br>
}catch(NoSuchRoomException e){}<br>
}// method 'server_ask_refresh' ended<br>
<br>
private void server_answer_refresh() throws<br>
PleaseCloseSocketException {<br>
<br>
String message=null;<br>
<br>
commandCenter("server_ask_refresh",<br>
new DataBag("none","none",0,0,0,0,0));<br>
<br>
}// method 'server_answer_refresh' ended<br>
<br>
private void server_answer_log() throws<br>
PleaseCloseSocketException {<br>
<br>
String message=null;<br>
<br>
try{<br>
name=io_in.readUTF();<br>
logged=true;<br>
belongRoom=false;<br>
message_TextArea.appendText("\nChannel"+ID+"("+<br>
name+"):logged");<br>
<br>
}catch(IOException e){<br>
throw new PleaseCloseSocketException();<br>
}<br>
}// method 'server_answer_log' ended<br>
<br>
private void server_answer_join() throws <br>
PleaseCloseSocketException {<br>
<br>
String message=null;<br>
int roomID=0;<br>
<br>
try{<br>
if (belongRoom) {<br>
try{<br>
roomGroup.quit(this.roomID,this);<br>
belongRoom=false;<br>
<br>
}catch(NoSuchRoomException e){}<br>
}<br>
roomID=roomGroup.getRoomID(io_in.readUTF());<br>
paused=false;<br>
try{<br>
roomGroup.join(roomID,this);<br>
belongRoom=true;<br>
paused=false;<br>
this.roomID=roomID;<br>
message_TextArea.appendText("\nChannel"+ID+"("+<br>
name+"):join room("+roomGroup.getRoomName(roomID)<br>
+")");<br>
<br>
}catch(NoSuchRoomException e){}<br>
<br>
}catch(IOException e){<br>
throw new PleaseCloseSocketException();<br>
}<br>
}// method 'server_answer_join' ended<br>
<br>
private void server_answer_pause() throws <br>
PleaseCloseSocketException {<br>
<br>
String message=null;<br>
<br>
paused=true;<br>
message_TextArea.appendText("\nChannel"+ID+"("+<br>
name+"):paused");<br>
}// method 'server_answer_pause' ended<br>
<br>
private void server_answer_continue() throws<br>
PleaseCloseSocketException {<br>
<br>
String message=null;<br>
<br>
paused=false;<br>
message_TextArea.appendText("\nChannel"+ID+"("+<br>
name+"):continued");<br>
}// method 'server_answer_continue' ended<br>
<br>
private void server_answer_newRoom() throws<br>
PleaseCloseSocketException {<br>
<br>
String message=null;<br>
int roomID=0;<br>
<br>
try{<br>
if (belongRoom) {<br>
roomGroup.quit(this.roomID,this);<br>
belongRoom=false;<br>
}<br>
message=io_in.readUTF();<br>
try{<br>
roomID=roomGroup.newRoom(message);<br>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -