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

📄 userlistrequesthandler.java

📁 使用工具jublider开发的一个聊天室实现基本功能,
💻 JAVA
字号:
package freecs.external;

import freecs.content.ContentContainer;
import freecs.core.Group;
import freecs.core.GroupManager;
import freecs.core.User;
import freecs.core.UserManager;
import freecs.interfaces.IUserStates;
import freecs.interfaces.IGroupState;
import freecs.interfaces.IRequest;
import freecs.util.HtmlEncoder;

public class UserlistRequestHandler extends AbstractRequestHandler {
	
	public UserlistRequestHandler(String handlerName) {
		super(handlerName);
	}


	/**
	 * class rendering who's online lists
	 */
	
	public void handle(IRequest req, ContentContainer c) throws AccessForbiddenException {
		checkAccessIp(req, c);
		
		StringBuffer sb = new StringBuffer();
		String show = req.getValue("show");
		String as   = req.getValue("as");
		boolean xml = ("xml".equalsIgnoreCase(as)) ? true : false;
		
		if (xml) {
			c.setContentType("text/xml");
			sb.append (xmlHeader);
		} else {
			c.setContentType("text/plain");
		}

		if ("allusers".equalsIgnoreCase(show)) {
			Group[] groups = GroupManager.mgr.currentGroupList();
			for (int i=0; i<groups.length; i++) {
				if (xml) {
					renderGroupAsXml(sb, groups[i]);
					renderGroupUsersAsXml(sb, groups[i]);
					sb.append ("</room>\n");
				} else {
					renderGroupAsText(sb, groups[i]);
					renderGroupUsersAsText(sb, groups[i]);
					sb.append ("\n");
				}
			}
		} else if ("allgroups".equalsIgnoreCase(show)) {
			Group[] groups = GroupManager.mgr.currentGroupList();
			for (int i=0; i<groups.length; i++) {
				if (xml) {
					renderGroupAsXml(sb, groups[i]);
					sb.append ("</room>\n");
				} else {
					renderGroupAsText(sb, groups[i]);
					sb.append("\n");
				}
			}
		} else if (req.getValue("group") != null) {
			Group g = GroupManager.mgr.getGroup(req.getValue("group"));
			if (g != null && xml) {
				renderGroupAsXml(sb, g);
				renderGroupUsersAsXml(sb, g);
				sb.append ("</room>");
			} else if (g != null) {
				renderGroupAsText(sb, g);
				renderGroupUsersAsText(sb, g);
			}
		} else if (req.getValue("user") != null) {
			User u = UserManager.mgr.getUserByName(req.getValue("user"));
			if (u != null && xml) {
				renderUserAsXml(sb, u);
			} else if (u != null) {
				renderUserAsText(sb, u);
			}
		} else {
			int activeUsers = UserManager.mgr.getActiveUserCount();
			int openGroups  = GroupManager.mgr.openGroupsCount();
			if (xml) {
				sb.append ("<users>");
				sb.append (activeUsers);
				sb.append ("</users>\n");
				sb.append ("<rooms>");
				sb.append (openGroups);
				sb.append ("</rooms>\n");
			} else {
				sb.append (activeUsers);
				sb.append ("\n");
				sb.append (openGroups);
				sb.append ("\n");
			}
		}
		if (xml) {
			sb.append (xmlFooter);
		}
		c.wrap(sb.toString());
	}
	
	
	private void renderGroupAsText(StringBuffer sb, Group g) {
		if (g.hasState(IGroupState.OPEN)) {
			sb.append("open: ");
		} else {
			sb.append("closed: ");
		}
		sb.append (g.getRawName());
		sb.append ("\n");
		String theme = g.getTheme();
		if (theme != null && !"".equals(theme.trim())) {
			sb.append ("theme: " + theme);
			sb.append ("\n");
		}
		
	}
	
	private void renderGroupAsXml(StringBuffer sb, Group g) {
		sb.append ("<room name=\"");
		HtmlEncoder.encodeXml(g.getRawName(), sb);
		sb.append ("\"");
		sb.append (" theme=\"");
		if (g.getTheme() != null) {
			HtmlEncoder.encodeXml(g.getTheme(), sb);
		}
		sb.append ("\"");
		sb.append(" open=\"");
		sb.append (g.hasState(IGroupState.OPEN));
		sb.append ("\">");
	}

	private void renderUserAsText(StringBuffer sb, User u) {
		sb.append (u.getName());
        if (u.hasRole(IUserStates.ROLE_VIP)) {
            sb.append (" (vip) ");
        } else if (u.hasRole(IUserStates.ROLE_GOD)) {
            sb.append (" (admin) ");
        } else if (u.getGroup().usrIsSu(u)) {
            sb.append (" (su) ");
        } else {
            sb.append (" (user) ");
        }
        sb.append (u.getChattime());
        sb.append (" ");
        sb.append (u.getGroup().getRawName());
        sb.append (" ");
        if (u.isAway()) {
        	sb.append ("away(");
        	sb.append (u.getAwayMessage());
            sb.append (")");
        }
        sb.append ("\n");
	}
	
	private void renderUserAsXml(StringBuffer sb, User u) {
		sb.append ("<user name=\"");
		HtmlEncoder.encodeXml(u.getName(), sb);
		sb.append ("\" id=\"");
		sb.append (u.getID());
		sb.append ("\" roomname=\"");
		HtmlEncoder.encodeXml(u.getGroup().getRawName(), sb);
		sb.append ("\" lastActive=\"");
		sb.append (u.lastActive());
		sb.append ("\" away=\"");
		sb.append (u.isAway());
		if (u.isAway()) {
			sb.append ("\" awaymessage=\"");
			HtmlEncoder.encodeXml(u.getAwayMessage(), sb);
		}
		sb.append ("\" chattime=\"");
        sb.append (u.getChattime());
		sb.append ("\" punished=\"");
		sb.append (u.isPunished());
		if (u.hasRole(IUserStates.ROLE_VIP)) {
            sb.append ("\" vip=\"true");
		} else if (u.hasRole(IUserStates.ROLE_GOD)) {
            sb.append ("\" admin=\"true");
		} else if (u.getGroup().usrIsSu(u)) {
            sb.append ("\" superuser=\"true");
		}
        if (u.getGroup() != null && u.getGroup().hasState(IGroupState.MODERATED)) {
            if (u.hasRight(IUserStates.IS_GUEST)) {
                sb.append ("\" guest=\"true");
            }
            if (u.hasRight(IUserStates.IS_MODERATOR)) {
                sb.append ("\" moderator=\"true");
            }
        }
		sb.append ("\" color=\"");
		sb.append (u.getColCode());
		sb.append ("\" />\n");
	}
	
	private void renderGroupUsersAsText(StringBuffer sb, Group g) {
		User[] users = g.getUserArray();
		for (int i=0; i<users.length; i++) {
			renderUserAsText(sb, users[i]);
		}
	}
	
	
	private void renderGroupUsersAsXml(StringBuffer sb, Group g) {
		User[] users = g.getUserArray();
		for (int i=0; i<users.length; i++) {
			renderUserAsXml(sb, users[i]);
		}
	}
	
	public static String xmlHeader = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>\n<lxml>\n";
	public static String xmlFooter = "\n</lxml>\n\n";
	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -