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

📄 abstractcommand.java

📁 使用工具jublider开发的一个聊天室实现基本功能,
💻 JAVA
字号:
/**
 * Copyright (C) 2003  Manfred Andres
 * 
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 * 
 * Created on 28.09.2003
 */

package freecs.commands;
import java.util.Vector;

import freecs.Server;
import freecs.interfaces.ICommand;
import freecs.interfaces.IUserStates;
import freecs.layout.TemplateManager;
import freecs.layout.TemplateSet;
import freecs.content.MessageState;
import freecs.core.Group;
import freecs.core.MessageRenderer;
import freecs.core.User;
import freecs.core.UserManager;

/**
 * @author Manfred Andres
 *
 * freecs.commands
 */
public abstract class AbstractCommand implements ICommand {
    private final String cmd = "Abstract";
    private final String toStringValue = createToStringValue();
    
    public boolean execute (MessageState msgState, String param) {
        Server.log (this, "not implemented", Server.MSG_ERROR, Server.LVL_MINOR);
        return false;
    }
    
    
    boolean isPunished (MessageState msgState) {
        if (!msgState.sender.isPunished ()) 
            return false;
        msgState.msgTemplate = "error.user.punished";
        msgState.sender.sendMessage(msgState.mp);
        return true;
    }
    
    /**
     * Utility method for retrieving an User. If the user
     * hasn't been found the apropriate Message will be sent
     * to the sender.
     * @param msgState
     * @param uname
     * @return
     */
    User getUser (MessageState msgState, String uname) {
        User ru = UserManager.mgr.getUserByName (uname);
        if (ru == null) {
           msgState.msgTemplate = "error.user.notOnServer.singular";
           msgState.param = uname;
           msgState.sender.sendMessage (msgState.mp);
        }
        return ru;
    }

    /**
     * Utility method setting the invitation-state for one specific user
     * @param msgState The message-state to operate on
     * @param cu The user to set the invitation for
     * @return boolean true if invitation was successful, false if not
     */
    boolean setInvited (MessageState msgState, User cu) {
        User tusr = msgState.usercontext;
        msgState.usercontext = cu;
        if (msgState.sender.equals(cu.invitedBy())
            && msgState.targetGroup.equals(cu.invitedTo())) {
            msgState.msgTemplate = "error.i.alreadyInvited";
            msgState.sender.sendMessage (msgState.mp);
            msgState.usercontext = tusr;
            return false;
        }                
        if (msgState.targetGroup.equals (cu.getGroup())) {
            msgState.msgTemplate = "error.i.alreadyHere";
            msgState.sender.sendMessage (msgState.mp);
            msgState.usercontext = tusr;
            return false;
        }
        if (!cu.invitedFrom (msgState.sender)) {
            msgState.usercontext = tusr;
            return false;
        }
        if (msgState.msgTemplate==null)
            return true;
        cu.sendMessage(msgState.mp);
        return true;
    }
    
    boolean isVip (User u, Group g, MessageState msgState) {
        if (u.hasRight(IUserStates.ROLE_GOD))
            return true;
        if (!u.hasRight(IUserStates.ROLE_VIP))
            return false;
        if (g.usrIsMember(u))
            return true;
        msgState.usrList = g.getMemberships();
        return false;
    }

    String getUserList (MessageState msgState, boolean shorten) {
        TemplateSet ts = msgState.sender.getTemplateSet ();
        String s = generateUserList (msgState, shorten, ts);
        if (s.length () == 0) 
            return null;
        msgState.msgTemplate = "list.users";
        msgState.message = s;
        String tpl = msgState.sender.getTemplateSet().getMessageTemplate("list.users");
        return MessageRenderer.renderTemplate (msgState, tpl);
    }

    public String generateUserList (MessageState msgState, boolean shorten, TemplateSet ts) {
        if (ts == null) {
            ts = TemplateManager.mgr.getTemplateSet();
        }
        Group g = msgState.sourceGroup;
        StringBuffer sb = new StringBuffer ();
        String tplcnt = ts.getMessageTemplate (shorten ? "message.user.short" : "message.user.overview");
        String seperator = ts.getMessageTemplate ("message.user.short.seperator");
        if (!shorten) 
            sb.append ("<br>");
		if (seperator != null) 
            seperator = MessageRenderer.renderTemplate (msgState, seperator, false);
        int cnt = 0;
        boolean success = false;
        User[] usrs = g.getUserArray();
        if (usrs==null)
            return "";
        for (int i = 0; i < usrs.length; i++) {
            msgState.usercontext = usrs[i];
            String snippet = MessageRenderer.renderTemplate (msgState, tplcnt, false);
            sb.append (snippet == null ? msgState.usercontext.getName () : snippet);
            if (i<(usrs.length-1) && (shorten || snippet == null)) {
                if (seperator != null) 
                    sb.append (seperator);
                else 
                    sb.append (", ");
            }
        }
        return sb.toString();
    }

    boolean sendUserList (MessageState msgState, boolean shorten) {
        TemplateSet ts = msgState.sender.getTemplateSet ();
        String s = generateUserList (msgState, shorten, ts);
        if (s.length () == 0) 
            return false;
        msgState.msgTemplate = "list.users";
        msgState.message = s;
        msgState.sender.sendMessage (msgState.mp);
        return true;
	}

    /**
     * Splits up a " " (space)- seperated userlist and returns a vector containing the
     * found user-objects. Not-found-users will be collected and an "error.user.notOnServer.plural"
     * will be sent to the sender.
     * @param msgState the message-state to operate on
     * @param param the string containing the users
     * @return a vector containing all found user-objects
     */
    public Vector getMultibleUsers (MessageState msgState, String param) {
        String usrs[] = param.split(" ");
        Vector found = new Vector();
        Vector notfound = new Vector();
        for (int i = 0; i < usrs.length; i++) {
            User cu = UserManager.mgr.getUserByName(usrs[i]);
            if (cu == null) {
                notfound.add(usrs[i]);
                continue;
            }
            found.add(cu);
        }

        if (notfound.size() > 1) {
            msgState.usrList = notfound.toArray();
            msgState.msgTemplate = "error.user.notOnServer.plural";
            msgState.sender.sendMessage(msgState.mp);
        } else if (notfound.size() == 1) {
            msgState.param = (String) notfound.get(0);
            msgState.msgTemplate = "error.user.notOnServer.singular";
            msgState.sender.sendMessage(msgState.mp);
        }
        return found;
    }

	public void sendPrivateMessage (MessageState msgState, User cu, String message) {
		msgState.sender.setPrivateUser (cu);
		cu.setForeignPrivateUser (msgState.sender);
		msgState.usercontext = cu;
		msgState.msgTemplate = "message.m";
		cu.sendMessage (msgState.mp);
		if (cu.isAway ()) msgState.msgTemplate = "message.m.away";
		else msgState.msgTemplate = "message.m.confirm";
		msgState.sender.sendMessage (msgState.mp);
	}

	/**
     * .) check the permissions of sender for the right to change su-state for this user
     * .) set the su-state wanted
     * @param msgState the message-state-object containing all infos 
     * @param cu the user which will be changed
     * @param give give or take su
     * @return true on success, false otherwise
     */
	boolean setSuRight (MessageState msgState, User cu, boolean give) {
        if (cu.hasRight (IUserStates.PROTECTED_FROM_RIGHTCHANGE))
            return false;
		Group cug = cu.getGroup ();
        if (!cug.usrMaySetSu (msgState.sender))
            return false;
		if (give)
		   return cug.addToSusers (cu);
		else
		   cug.removeFromSusers (cu);
	   return true;
	}
    
	public String toString () {
        return toStringValue;
    }

    public static short _isColorCodeValid (String col) {
        if (col.length() != 6)
            return 1;
        for (int i = 0; i < col.length (); i++) {
            char c = col.charAt (i);
            if (c != '0' && c != '1' && c != '2' && c != '3' && c != '4' && c != '5' && c != '6' && c != '7' && c != '8' && c != '9' && c != 'a' && c != 'b' && c != 'c' && c != 'd' && c != 'e' && c != 'f') {
               return 1;
            }
        }
        int r = Integer.parseInt (col.substring (0,2), 16);
        int g = Integer.parseInt (col.substring (2,4), 16);
        int b = Integer.parseInt (col.substring (4,6), 16);
        int sum = r + g + b;
        if ((765 - sum) < 64)
           return 2;
        return 0;
    }

    public boolean isColorCodeValid (MessageState msgState) {
        String colcode = msgState.param.trim().toLowerCase();
        short result = _isColorCodeValid(colcode);
        if (result==0)
            return true;
        if (result==1)
            msgState.msgTemplate = "error.col.wrongCode";
        else if (result==2)
            msgState.msgTemplate = "error.col.lockedColor";
        return false;
    }

    private String createToStringValue() {
        String fullName = getClass().getName();
        return "[Command " + cmd + "]";
    }
}

⌨️ 快捷键说明

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