⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 0029.htm

📁 Java语言是Internet上最热门的编程语言
💻 HTM
📖 第 1 页 / 共 5 页
字号:
usersName=new String[users.size()];<br>
for(int i=0;i&lt; 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(&quot;\nChannel &quot;+ID+&quot; socket opened&quot;);<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(&quot;\nChannel&quot;+ID+&quot;(&quot;+<br>
name+&quot;):receive:&quot;+message);<br>
chatServer.num_Line++;<br>
if (chatServer.num_Line &gt;150) {<br>
message_TextArea.setText(&quot;&quot;);<br>
chatServer.num_Line=0;<br>
}<br>
if (message.equals(&quot;text&quot;)) sendText();<br>
else if (message.equals(&quot;draw&quot;)) sendDraw();<br>
else {<br>
commandCenter(message,new DataBag(&quot;none&quot;,&quot;none&quot;,0,0,0,0,0));<br>
if<br>
((message.equals(&quot;new&quot;))|(message.equals(&quot;join&quot;))) <br>
refreshToAll();<br>
else if (message.equals(&quot;quit&quot;)) 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&lt; users.length;i++) {<br>
if ((users[i].logged)&amp;&amp;(users[i].ID!=ID)&amp;&amp;<br>
(!users[i].paused)&amp;&amp;(users[i].roomID==roomID))<br>
users[i].commandCenter(&quot;server_ask_text&quot;,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(&quot;none&quot;,&quot;none&quot;,color,x0,y0,x1,y1);<br>
for(int i=0;i&lt; users.length;i++) {<br>
if ((users[i].logged)&amp;&amp;(users[i].ID!=ID)<br>
&amp;&amp;(!users[i].paused)&amp;&amp;(users[i].roomID==roomID))<br>
users[i].commandCenter(&quot;server_ask_draw&quot;,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&lt; users.length;i++) {<br>
if (users[i].logged)<br>
users[i].commandCenter(&quot;server_ask_refresh&quot;,new<br>
DataBag(&quot;none&quot;,&quot;none&quot;,0,0,0,0,0));<br>
}<br>
}// method &quot;refreshToAll&quot; ended<br>
<br>
public void refreshToAllNotMe() throws PleaseCloseSocketException {<br>
for(int i=0;i&lt; users.length;i++) {<br>
if ((users[i].logged)&amp;&amp;(users[i].ID!=ID))<br>
users[i].commandCenter(&quot;server_ask_refresh&quot;,<br>
new DataBag(&quot;none&quot;,&quot;none&quot;,0,0,0,0,0));<br>
}<br>
}// method &quot;refreshToAll&quot; ended<br>
<br>
<br>
public void commandCenter(String command,<br>
DataBag data) throws<br>
PleaseCloseSocketException {<br>
if (command.equals(&quot;server_ask_refresh&quot;)) server_ask_refresh();<br>
else if (command.equals(&quot;refresh&quot;)) server_answer_refresh();<br>
else if (command.equals(&quot;log&quot;)) server_answer_log();<br>
else if (command.equals(&quot;join&quot;)) server_answer_join();<br>
else if (command.equals(&quot;pause&quot;)) server_answer_pause();<br>
else if (command.equals(&quot;continue&quot;)) server_answer_continue();<br>
else if (command.equals(&quot;new&quot;)) server_answer_newRoom();<br>
else if (command.equals(&quot;quit&quot;)) server_answer_quit();<br>
else if (command.equals(&quot;server_ask_text&quot;)) server_ask_text(data);<br>
else if (command.equals(&quot;server_ask_draw&quot;)) 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(&quot;draw&quot;);<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(&quot;\nChannel&quot;+ID+&quot;(&quot;+<br>
name+&quot;):send:&quot;+&quot;draw data&quot;);<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(&quot;text&quot;);<br>
io_out.writeUTF(data.name);<br>
io_out.writeUTF(data.message);<br>
}<br>
message_TextArea.appendText(&quot;\nChannel&quot;+ID+&quot;(&quot;+<br>
name+&quot;):send:&quot;+&quot;text :&quot;+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(&quot;refresh&quot;);<br>
for(int i=0;i&lt; 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&lt; names.length;j++) {<br>
io_out.writeUTF(names[j]);<br>
}<br>
io_out.writeUTF(&quot;complete&quot;);<br>
}<br>
}<br>
io_out.writeUTF(&quot;ok&quot;);<br>
io_out.writeUTF(roomGroup.getRoomName(roomID));<br>
}<br>
message_TextArea.appendText(&quot;\nChannel&quot;+ID+&quot;(&quot;+<br>
name+&quot;):send:&quot;+&quot;refresh data&quot;);<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(&quot;server_ask_refresh&quot;,<br>
new DataBag(&quot;none&quot;,&quot;none&quot;,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(&quot;\nChannel&quot;+ID+&quot;(&quot;+<br>
name+&quot;):logged&quot;);<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(&quot;\nChannel&quot;+ID+&quot;(&quot;+<br>
name+&quot;):join room(&quot;+roomGroup.getRoomName(roomID)<br>
+&quot;)&quot;);<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(&quot;\nChannel&quot;+ID+&quot;(&quot;+<br>
name+&quot;):paused&quot;);<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(&quot;\nChannel&quot;+ID+&quot;(&quot;+<br>
name+&quot;):continued&quot;);<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 + -