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

📄 chatserver.java

📁 该程序用java实现了白板功能。。。。。。。。。。。。。。。。
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
     }
    }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 + -