📄 chatserver.java
字号:
}
}catch(PleaseCloseSocketException e) {
}catch(IOException e){
}finally {
try{
roomGroup.quit(roomID,this);
refreshToAllNotMe();
}catch(Exception e){}
socketClose();
used=false;
logged=false;
}
}
}catch(IOException e){
System.out.println(e);
}
}// method 'run' ended
public void destroy() {
socketClose();
this.stop();
}// method 'destroy' ended
public void socketClose() {
try{
io_in.close();
io_in=null;
}catch(Exception e){}
try{
io_out.flush();
io_out.close();
io_out=null;
}catch(Exception e){}
try{
s.close();
s=null;
}catch(Exception e){}
}// method 'socketClose' ended
public void sendText() throws
PleaseCloseSocketException {
String message=null;
DataBag data=null;
try{
synchronized (this){
message=io_in.readUTF();
}
data=new DataBag(name,message,0,0,0,0,0);
for(int i=0;i< users.length;i++) {
if ((users[i].logged)&&(users[i].ID!=ID)&&
(!users[i].paused)&&(users[i].roomID==roomID))
users[i].commandCenter("server_ask_text",data);
}
}catch(IOException e){
throw new PleaseCloseSocketException();
}
}// method 'sendText' ended
public void sendDraw() throws PleaseCloseSocketException {
String message=null;
int color=0,x0=0,y0=0,x1=0,y1=0;
DataBag data=null;
try{
synchronized (this) {
color=io_in.readInt();
x0=io_in.readShort();
y0=io_in.readShort();
x1=io_in.readShort();
y1=io_in.readShort();
}
data=new DataBag("none","none",color,x0,y0,x1,y1);
for(int i=0;i< users.length;i++) {
if ((users[i].logged)&&(users[i].ID!=ID)
&&(!users[i].paused)&&(users[i].roomID
==roomID))
users[i].commandCenter("server_ask_draw",data);
}
}catch(IOException e){
throw new PleaseCloseSocketException();
}
}// method 'sendDraw' ended
public void refreshToAll() throws PleaseCloseSocketException {
for(int i=0;i< users.length;i++) {
if (users[i].logged)
users[i].commandCenter("server_ask_refresh",new DataBag("none","none",0,0,0,0,0));
}
}// method "refreshToAll" ended
public void refreshToAllNotMe() throws
PleaseCloseSocketException {
for(int i=0;i< users.length;i++) {
if ((users[i].logged)&&(users[i].ID!=ID))
users[i].commandCenter("server_ask_refresh",
new DataBag("none","none",0,0,0,0,0));
}
}// method "refreshToAll" ended
public void commandCenter(String
command,DataBag data) throws
PleaseCloseSocketException {
if (command.equals("server_ask_refresh")) server_ask_refresh();
else if (command.equals("refresh")) server_answer_refresh();
else if (command.equals("log")) server_answer_log();
else if (command.equals("join")) server_answer_join();
else if (command.equals("pause")) server_answer_pause();
else if (command.equals("continue")) server_answer_continue();
else if (command.equals("new")) server_answer_newRoom();
else if (command.equals("quit")) server_answer_quit();
else if (command.equals("server_ask_text")) server_ask_text(data);
else if (command.equals("server_ask_draw"))
server_ask_draw(data);
}// method commandCenter ended
private void server_ask_draw(DataBag data)
throws PleaseCloseSocketException {
String message=null;
try{
synchronized (this){
io_out.writeUTF("draw");
io_out.writeInt(data.color);
io_out.writeShort(data.x0);
io_out.writeShort(data.y0);
io_out.writeShort(data.x1);
io_out.writeShort(data.y1);
}
message_TextArea.appendText("\nChannel"+ID+"("+
name+"):send:"+"draw data");
}catch(IOException e){
throw new PleaseCloseSocketException();
}
}// method 'server_ask_draw' ended
private void server_ask_text(DataBag data)
throws PleaseCloseSocketException {
String message=null;
try{
synchronized (this){
io_out.writeUTF("text");
io_out.writeUTF(data.name);
io_out.writeUTF(data.message);
}
message_TextArea.appendText("\nChannel"+ID+"("+
name+"):send:"+"text :"+data.message);
}catch(IOException e){
throw new PleaseCloseSocketException();
}
}// method 'server_ask_text' ended
private void server_ask_refresh() throws
PleaseCloseSocketException {
String message=null;
try{
synchronized (this){
io_out.writeUTF("refresh");
for(int i=0;i< roomGroup.roomCount();i++) {
if (roomGroup.isActive(i)) {
io_out.writeUTF(roomGroup.getRoomName(i));
String[] names=roomGroup.getUsersName(i);
if (names!=null)
for(int j=0;j< names.length;j++) {
io_out.writeUTF(names[j]);
}
io_out.writeUTF("complete");
}
}
io_out.writeUTF("ok");
io_out.writeUTF(roomGroup.getRoomName(roomID));
}
message_TextArea.appendText("\nChannel"+ID+"("+
name+"):send:"+"refresh data");
}catch(IOException e){
throw new PleaseCloseSocketException();
}catch(NoSuchRoomException e){}
}// method 'server_ask_refresh' ended
private void server_answer_refresh() throws
PleaseCloseSocketException {
String message=null;
commandCenter("server_ask_refresh",
new DataBag("none","none",0,0,0,0,0));
}// method 'server_answer_refresh' ended
private void server_answer_log() throws
PleaseCloseSocketException {
String message=null;
try{
name=io_in.readUTF();
logged=true;
belongRoom=false;
message_TextArea.appendText("\nChannel"+ID+"("+
name+"):logged");
}catch(IOException e){
throw new PleaseCloseSocketException();
}
}// method 'server_answer_log' ended
private void server_answer_join() throws
PleaseCloseSocketException {
String message=null;
int roomID=0;
try{
if (belongRoom) {
try{
roomGroup.quit(this.roomID,this);
belongRoom=false;
}catch(NoSuchRoomException e){}
}
roomID=roomGroup.getRoomID(io_in.readUTF());
paused=false;
try{
roomGroup.join(roomID,this);
belongRoom=true;
paused=false;
this.roomID=roomID;
message_TextArea.appendText("\nChannel"+ID+"("+
name+"):join room("+roomGroup.getRoomName(roomID)+")");
}catch(NoSuchRoomException e){}
}catch(IOException e){
throw new PleaseCloseSocketException();
}
}// method 'server_answer_join' ended
private void server_answer_pause() throws
PleaseCloseSocketException {
String message=null;
paused=true;
message_TextArea.appendText("\nChannel"+ID+"("+
name+"):paused");
}// method 'server_answer_pause' ended
private void server_answer_continue() throws
PleaseCloseSocketException {
String message=null;
paused=false;
message_TextArea.appendText("\nChannel"+ID+"("+
name+"):continued");
}// method 'server_answer_continue' ended
private void server_answer_newRoom() throws
PleaseCloseSocketException {
String message=null;
int roomID=0;
try{
if (belongRoom) {
roomGroup.quit(this.roomID,this);
belongRoom=false;
}
message=io_in.readUTF();
try{
roomID=roomGroup.newRoom(message);
belongRoom=false;
paused=false;
roomGroup.join(roomID,this);
belongRoom=true;
this.roomID=roomID;
message_TextArea.appendText("\nChannel"+ID+"("+
name+"):new room("+message+")");
}catch(TooManyRoomsException e){
}
}catch(IOException e){
throw new PleaseCloseSocketException();
}catch(NoSuchRoomException e){}
}// method 'server_answer_new' ended
private void server_answer_quit() throws
PleaseCloseSocketException {
String message=null;
try{
try{
roomGroup.quit(roomID,this);
used=false;
logged=false;
belongRoom=false;
roomID=0;
name=null;
message_TextArea.appendText
("\nChannel"+ID+"("+
name+"):quited");
}catch(NoSuchRoomException e){
io_out.writeUTF("fail");
}
}catch(IOException e){
throw new PleaseCloseSocketException();
}
}// method 'server_answer_quit' ended
}// class 'user' ended
//class 8:RoomData,Applet引用的交谈室数据类
class RoomData {
String roomName=null;
int roomID=0;
Vector users=null;
RoomData(String name) {
roomName=name;
users=new Vector(10,5);
}
public void addUser(String name) {
users.addElement(name);
}
public void removeUser(String name) {
users.removeElement(name);
}
public String[] getUsersName() {
Enumeration e=null;
String[] s=null;
if ((users!=null)&(users.size() >0)) {
e=users.elements();
s=new String[users.size()];
for(int i=0;i< s.length;i++) {
s[i]=(String)(users.elementAt(i));
}
}
return s;
}
public int usersCount() {
return users.size();
}
}
// class 'RoomData' ended
//class 9:Rooms,Applet所用的交谈室数据类
class Rooms extends Vector {
String defaultSubject=null;
public Rooms(int a,int b) {
super(a,b);
defaultSubject=RoomGroup.DEFAULT_ROOM_SUBJECT;
}
public void setDefault(String name){
if (getRoomByName(name)!=null) {
defaultSubject=name;
}
}
public String getDefaultRoomName() {
return defaultSubject;
}
public int getRoomID(String name) {
int index=0;
for(int i=0;i< size();i++) {
if (((RoomData)elementAt(i)).roomName==name) {
index=((RoomData)elementAt(i)).roomID;
return index;
//break;
}
}
return -1;
}
public RoomData getRoomByName(String name) {
int index=0;
for(int i=0;i< size();i++) {
if ((((RoomData)elementAt(i)).roomName).equals(name)) {
index=i;
return ((RoomData)elementAt(i));
}
}
return null;
}
}
///class 10:DataBag,包装图形和文字信息类
class DataBag {
String message=null;
String name=null;
int color=0,x0=0,y0=0,x1=0,y1=0;
DataBag(String name,String message,int color,int x0,int y0,int x1,int y1) {
this.name=name;
this.message=message;
this.color=color;
this.x0=x0;
this.y0=y0;
this.x1=x1;
this.y1=y1;
}
}
//class 11:SendDraw,Applet后台数据传输类
class SendDrawData extends Thread {
volatile boolean sended=true;
DataInputStream io_in=null;
DataOutputStream io_out=null;
SendDrawData(PipedInputStream io_in,DataOutputStream io_out) {
super();
this.io_in=new DataInputStream(io_in);
this.io_out=io_out;
start();
}
public void run() {
int color,x0,y0,x1,y1;
try{
while(true) {
color=io_in.readInt();
x0=io_in.readInt();
y0=io_in.readInt();
x1=io_in.readInt();
y1=io_in.readInt();
sended=false;
synchronized(this) {
io_out.writeUTF("draw");
io_out.writeInt(color);
io_out.writeShort(x0);
io_out.writeShort(y0);
io_out.writeShort(x1);
io_out.writeShort(y1);
}
sended=true;
}
}catch(IOException e){
try{
io_in.close();
io_in=null;
io_out.flush();
io_out.close();
io_out=null;
}catch(IOException r){}
}
}
public void quit() {
try{
io_in.close();
io_out.flush();
io_in=null;
}catch(IOException e){
System.out.println(e);
}
stop();
}
}
//class12:Logo,Applet所用徽标
class Logo extends Canvas {
Image logo_Image=null;
Logo(Image logo_Image,int width,int height){
this.logo_Image=logo_Image;
resize(width,height);
}
public void paint(Graphics g){
g.drawImage(logo_Image,0,0,size().width,size().height,
Color.white,this);
}
}
//自定义的异常类
class NoSuchRoomException extends Exception {}
class NotMemberException extends Exception {}
class PleaseCloseSocketException extends Exception{}
class TooManyRoomsException extends Exception{}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -