📄 chatservlet.java
字号:
pout.println("<P align=left><TEXTAREA cols=19 name=S1 rows=18 style=\"COLOR: rgb(0,0,255); FONT-SIZE: 9pt\">");
/*pout.println("****************");
pout.println("房间[main]");
pout.println("状态[开]");
while(userlist.hasMoreElements()){
pout.println("["+(String)userlist.nextElement()+"]");
i++;
//pout.print("\r\n");
}*/
while(roomlist.hasMoreElements()){
room = (Room)(roomlist.nextElement());
roommates = room.getUsers();
pout.println("****************");
pout.println("房间["+room.getName()+"]");
pout.println("状态[开]");
i = 0;
while(roommates.hasMoreElements()){
pout.println("["+(String)roommates.nextElement()+"]");
i++;
//pout.print("\r\n");
}
pout.println("");
}
pout.print("\r\n");
pout.print("</TEXTAREA><BR><FONT color=#ff0000>聊天室在线</FONT><FONT color=#0066ff size=3>"+i+"</FONT><FONT color=#ff0000>人 ");
pout.print("</FONT></P></FORM></TD></TR></TBODY></TABLE></BODY></HTML>");
pout.flush();
pout.close();
}catch(IOException e){
}
}
private synchronized boolean addRoomMessage(String room,Message message){
Enumeration roommates=rooms.getRoomUsers(room);
while(roommates.hasMoreElements()){
users.addUserMessage((String)roommates.nextElement(),message);
}
return true;
}
}
class UserList{
private Hashtable list = new Hashtable();
private Hashtable active = new Hashtable();
UserList(){
}
protected synchronized boolean add(String user){
if(exists(user)) return false;
list.put(user,new MessageQueue());
touch(user);
return true;
}
protected synchronized Enumeration list(){
return list.keys();
}
protected synchronized boolean drop(String user){
if(!exists(user)) return false;
list.remove(user);
active.remove(user);
return true;
}
protected boolean exists(String user){
return list.containsKey(user);
}
protected void addMessage(Message message){
Enumeration allUsers = list.keys();
while(allUsers.hasMoreElements())
addUserMessage((String)allUsers.nextElement(),message);
}
protected void addUserMessage(String user,Message message){
((MessageQueue)list.get(user)).add(message);
}
protected void resetUser(String user){
((MessageQueue)list.get(user)).reset();
}
protected void truncUserMsgs(String user){
((MessageQueue)list.get(user)).trunc();
}
protected Enumeration getMessages(String user){
touch(user);
return ((MessageQueue)list.get(user)).listMessages();
}
protected synchronized void touch(String user){
if(exists(user)) active.put(user,new Long(System.currentTimeMillis()));
}
protected synchronized Enumeration inactive(int timeout){
Vector inactive = new Vector();
long now = System.currentTimeMillis();
long when = now - timeout;
Enumeration users = list.keys();
while(users.hasMoreElements()){
String user = (String)users.nextElement();
if(((Long)active.get(user)).longValue()<when) inactive.addElement(user);
}
return inactive.elements();
}
}
class MessageQueue{
private Vector messageq = new Vector();
MessageQueue(){}
protected synchronized void add(Message message){
messageq.insertElementAt((Object)message,0);
notifyAll();
}
protected synchronized Enumeration listMessages(){
/*try{
if(messageq.isEmpty()){
wait(30*1000);
}
}catch(InterruptedException ie){}*/
return messageq.elements();
}
protected synchronized void reset(){
//if(messageq.size()>20) messageq.setSize(20);
messageq.removeAllElements();
}
protected synchronized void trunc(){
if(messageq.size()>30) messageq.setSize(30);
//messageq.removeAllElements();
}
}
class Message{
private String user;
private String message;
Message(String user,String message){
this.user = user;
this.message = message;
}
public String toString(){
return user+":"+message;
}
protected String getUser(){
return user;
}
protected String getMessage(){
return message;
}
}
class Room{
private String name;
private String owner;
private UserList users;
private boolean status; // true: door open
// false: door close
Room(String name,String owner){
this.name = name;
this.owner = owner;
status = true;
users = new UserList();
}
protected Enumeration getUsers(){
return users.list();
}
public String getName(){
return name;
}
public String getOwner(){
return owner;
}
public boolean equals(Object anObject){
//if(anObject.getClass().getName()!="Room") return false;
if(((Room)anObject).getName().equals(name)) return true;
return false;
}
protected boolean addUser(String user){
return users.add(user);
}
protected boolean dropUser(String user){
return users.drop(user);
}
protected boolean isDoorOpen(){
return status;
}
protected void openDoor(){
status = true;
}
protected void closeDoor(){
status = false;
}
}
class RoomList{
private Hashtable list = new Hashtable();
private Hashtable active = new Hashtable();
RoomList(){
}
protected synchronized boolean add(Room room){
if(exists(room)) return false;
list.put(room.getName(),room);
touch(room.getName());
return true;
}
protected synchronized boolean addUser(String room,String user){
if(!exists(room)) return false;
//touch(room);
return ((Room)list.get(room)).addUser(user);
}
protected synchronized Enumeration list(){
return list.elements();
}
protected synchronized boolean drop(Room room){
if(!exists(room)) return false;
list.remove(room.getName());
return true;
}
protected synchronized boolean drop(String room){
if(!exists(room)) return false;
list.remove(room);
return true;
}
protected boolean exists(Room room){
return list.containsKey(room.getName());
}
protected boolean exists(String room){
return list.containsKey(room);
}
/*protected void resetUser(String user){
((MessageQueue)list.get(user)).reset();
}*/
protected synchronized void touch(String room){
if(exists(room)) active.put(room,new Long(System.currentTimeMillis()));
}
protected synchronized Enumeration inactive(int timeout){
Vector inactive = new Vector();
long now = System.currentTimeMillis();
long when = now - timeout;
Enumeration rooms = list.keys();
while(rooms.hasMoreElements()){
String room = (String)rooms.nextElement();
if(((Long)active.get(room)).longValue()<when) inactive.addElement(room);
}
return inactive.elements();
}
public int size(){
return list.size();
}
public Enumeration getRoomUsers(String room){
return ((Room)list.get(room)).getUsers();
}
protected synchronized boolean dropRoomUser(String room,String user){
if(!exists(room)) return false;
return ((Room)list.get(room)).dropUser(user);
}
protected Room get(String room){
return (Room)list.get(room);
}
}
class CommandParser{
public static int parse(String message,StringBuffer str1,StringBuffer str2){
String commStr="";
int commNo=0;
message = message.trim();
if(message.length()<2) return -1;
int i=0;
if(message.charAt(0)!='/') return -1;
while(i<message.length()&&message.charAt(i)!=' '){
commStr = commStr + message.charAt(i);
i++;
}
System.out.println("commStr:"+commStr);
if(i<message.length()){
message = message.substring(i);
message = message.trim();
}
else message = "";
System.out.println("message2:"+message);
if(commStr.equals("/r")) commNo = 0;
else if(commStr.equals("/i")) commNo = 1; //进入房间
else if(commStr.equals("/o")) commNo = 2; //开门
else if(commStr.equals("/c")) commNo = 3; //关门
else if(commStr.equals("/p")) commNo = 4; //私聊
else if(commStr.equals("/q")) commNo = 5; //清屏
else return -1;
System.out.println("commNo:"+commNo);
i = 0;
//str1 = "";
while(i<message.length()&&message.charAt(i)!=' '){
str1.append(message.charAt(i));
i++;
}
if(i<message.length()){
message = message.substring(i);
message = message.trim();
}
else message = "";
System.out.println("Str1:"+str1);
i = 0;
//str2 = "";
while(i<message.length()&&message.charAt(i)!=' '){
str2.append(message.charAt(i));
i++;
}
System.out.println("Str2:"+str2);
return commNo;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -