BBS水木清华站∶精华区

发信人: loveangel (琴儿), 信区: Java        
标  题: 程序2:chatservlet.java 
发信站: BBS 水木清华站 (Sun Aug 13 20:25:32 2000) 
 
 
import java.io.PrintStream; 
import java.io.OutputStream; 
import java.io.IOException; 
import java.util.Hashtable; 
import java.util.Enumeration; 
import java.util.Vector; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import javax.servlet.ServletConfig; 
import javax.servlet.ServletException; 
/** 
 * Insert the type's description here. 
 * Creation date: (00-8-3 16:00:40) 
 * @author: Administrator 
 */ 
class chatservlet extends HttpServlet implements Runnable 

 private UserList users=new UserList(); 
 private Message message; 
 private final static String defaultStartpage="/gochat.html"; 
 private Thread reaper; 
 protected static final int TIMEOUT=5*60*1000; 
/** 
 * chatservlet constructor comment. 
 */ 
public chatservlet() { 
 super(); 

 public void destroy() 
 { 
  super.destroy(); 
  if(reaper!=null&&reaper.isAlive()) 
  { 
   reaper.stop(); 
  } 
  return; 
 } 
/** 
 * Insert the method's description here. 
 * Creation date: (00-8-3 16:01:37) 
 */ 
public void init(ServletConfig config) throws ServletException 

 super.init(config); 
 int currPriority=Thread.currentThread().getPriority(); 
 int newPriority=currPriority==Thread.MIN_PRIORITY?Thread.MIN_PRIORITY:currP 
riority-1; 
 reaper=new Thread(this,"ChatReaper"); 
 reaper.setDaemon(true); 
 reaper.setPriority(newPriority); 
 reaper.start(); 
 return; 

 protected void returnMessages(HttpServletResponse res,Enumeration messageli 
st) 
 { 
  try 
  { 
   res.setDateHeader("Expires",System.currentTimeMillis()); 
   PrintStream pout=new PrintStream(res.getOutputStream()); 
   pout.print("+OK\r\n"); 
   while(messagelist.hasMoreElements()) 
   { 
    Message message=(Message)messagelist.nextElement(); 
    pout.print(message+"\r\n"); 
   } 
   pout.print(".\r\n"); 
   pout.flush(); 
   pout.close(); 
  } 
  catch(IOException e) 
  { 
  } 
 } 
 protected void returnUserList(HttpServletResponse res) 
 { 
  try 
  { 
   res.setDateHeader("Expires",System.currentTimeMillis()); 
   PrintStream pout=new PrintStream(res.getOutputStream()); 
   pout.print("+OK\r\n"); 
   Enumeration userlist=users.list(); 
   while(userlist.hasMoreElements()) 
   { 
    pout.print((String)userlist.nextElement()); 
    pout.print("\r\n"); 
   } 
   pout.print(".\r\n"); 
   pout.flush(); 
  } 
  catch(IOException e) 
  { 
  } 
 } 
/** 
 * run method comment. 
 */ 
public void run() 

 while(!Thread.interrupted()) 
 { 
  Enumeration inactive=users.inactive(TIMEOUT); 
  while(inactive.hasMoreElements()) 
  { 
   String user=(String)inactive.nextElement(); 
   users.drop(user); 
   users.addMessage(new Message("Chat",user+"has timed out.")); 
   users.addMessage(new Message("Caht","Dropping"+user+"frome the chat.")); 
   log("User"+user+"timed out.Dropped from chat."); 
  } 
  try 
  { 
   Thread.sleep(TIMEOUT); 
  } 
  catch(InterruptedException e) 
  { 
  } 
 } 

 protected void sendError(HttpServletResponse res,String error) 
 { 
  try 
  { 
   PrintStream pout=new PrintStream(res.getOutputStream()); 
   pout.print("-ERR"+error+"\r\n"); 
   pout.flush(); 
   pout.close(); 
  } 
  catch(IOException e) 
  { 
  } 
 } 
 protected void sendResp(HttpServletResponse res,String resp) 
 { 
  try 
  { 
   res.setDateHeader("Expires",System.currentTimeMillis()); 
   PrintStream pout=new PrintStream(res.getOutputStream()); 
   pout.print("+OK"+resp+"\r\n"); 
   pout.flush(); 
   pout.close(); 
  } 
  catch(IOException e) 
  { 
  } 
 } 
 public void service(HttpServletRequest req,HttpServletResponse res) 
    throws IOException,ServletException 
    { 
     String user,mode,usermsg; 
     if(req.getQueryString()==null) 
     { 
      if(getInitParameter("startpage")==null) 
      res.sendRedirect(defaultStartpage); 
      res.sendRedirect(getInitParameter("startpage")); 
      return; 
   } 
      mode=req.getParameter("mode"); 
      user=req.getParameter("user"); 
      if(mode==null) 
      { 
       sendError(res,"Mode not set"); 
       return; 
      } 
      if(user==null&&!mode.equals("list")) 
      { 
       sendError(res,"User not set"); 
       return; 
      } 
      if(mode.equals("login")) 
      { 
       if(users.exists(user)) 
       { 
        sendError(res,"User exists"); 
        return; 
       } 
       if(!users.add(user)) 
       { 
        sendError(res,"Problem adding user"); 
        return; 
       } 
       users.addMessage(new Message("Chat",user+"has joined the chat.")); 
       log("The user"+user+"logged in."); 
       sendResp(res,"User logged in."); 
       return; 
      } 
      else if(mode.equals("logout")) 
      { 
       if(!users.exists(user)) 
       { 
        sendError(res,"User does not exist"); 
        return; 
       } 
       if(!users.drop(user)) 
       { 
        sendError(res,"Problem deleting user"); 
        return; 
       } 
       users.addMessage(new Message("Chat",user+"has left the chat.")); 
       log("The user"+user+"logged out."); 
       sendResp(res,"User logged out."); 
       return; 
      } 
      else if(mode.equals("poll")) 
      { 
       if(!users.exists(user)) 
       { 
        sendError(res,"Invalid user"); 
        return; 
       } 
       returnMessages(res,users.getMessages(user)); 
       users.resetUser(user); 
       return; 
      } 
      else if(mode.equals("send")) 
      { 
       usermsg=req.getParameter("message"); 
       if(usermsg==null) 
       { 
        sendError(res,"Message not set for send"); 
        return; 
       } 
       users.addMessage(new Message(user,usermsg)); 
       sendResp(res,"Message Added."); 
       return; 
      } 
      else if(mode.equals("list")) 
      { 
       returnUserList(res); 
       return; 
      } 
      else 
      { 
       sendError(res,"Invalid Mode."); 
       return; 
      } 
     } 

 
-- 
 
※ 来源:·BBS 水木清华站 smth.org·[FROM: 202.120.5.34] 

BBS水木清华站∶精华区