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

📄 usermanager.java

📁 使用工具jublider开发的一个聊天室实现基本功能,
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
				}
				long st = sa.getStartTime ();
				if (st > currTime) {
					if (st < lowestValue) {
                        lowestValue = st;
                    }
					continue;
				}
				sa.execute ();
				schedule.removeElement (sa);
			}
			long sleepTime = lowestValue - System.currentTimeMillis ();
			if (sleepTime <= 0) 
                sleepTime = 33;
			try {
				Thread.sleep(sleepTime);
			} catch (InterruptedException ie) { }
		} catch (Exception e) {
			Server.debug (this, "encountered excpetion", e, Server.MSG_ERROR, Server.LVL_MAJOR);
		}
	}


    private long checkUsers (long currTime, long lowestValue) {
        long val = Server.srv.USER_REMOVE_SCHEDULE_TIME * 10;
        User[] uarr = ustr.toArray();
        for (int i = 0; i < uarr.length; i++) {
            User cu = uarr[i];
            if (cu == null)
                continue;
            if (!cu.check(currTime)) {
                cu.removeNow();
                continue;
            }
            long nextCheck = cu.nextCheck();
            if (nextCheck < lowestValue) {
                lowestValue = nextCheck;
            }
            cu.checkReferences();
            cu.touch (currTime);
        }
        return lowestValue;
    }
    
   /**
    * interface MessageDestination
    */
    public void sendMessage (IContainer mc) {
        synchronized (ustr) {
            for (Iterator i = ustr.iterator (); i.hasNext (); ) {
                User cu = (User) i.next ();
                cu.sendMessage (mc);
            }
        }
    }

    public Vector onlineVipList () {
        return onlineVips;
    }
    
    public Enumeration onlineVips () {
		return onlineVips.elements();
	}
	
	public Enumeration notListedAsOnlineVips () {
		return notListedAsOnlineVips.elements();
	}

   public Iterator users () {
      return ustr.iterator ();
   }

	public void scheduleAction (short action, long startTime, User usr, User sender) {
		ScheduledAction sa = new ScheduledAction (action, startTime, usr, sender);
		if (schedule.contains (sa)) 
			return;
		schedule.addElement (sa);
	}
   
	public int getHighWaterMark () {
   		return highWaterMark;
	}
	
	public void updateVips (Vector nVips) {
		Vector removed = (Vector) vips.clone();
		removed.removeAll(nVips);
		Vector added = (Vector) nVips.clone();
		added.removeAll(vips);
		UserManager umgr = UserManager.mgr;
		for (Enumeration e = added.elements(); e.hasMoreElements(); ) {
			String uname = (String) e.nextElement();
			User cu = umgr.getUserByName(uname);
			if (cu != null)
				cu.setPermission(IUserStates.ROLE_VIP);
			vips.addElement(uname);
		}
		for (Enumeration e = removed.elements(); e.hasMoreElements();) {
			String uname = (String) e.nextElement();
			User cu = umgr.getUserByName(uname);
			if (cu != null)
				cu.setPermission(IUserStates.ROLE_USER);
			while (vips.contains(uname))
				vips.removeElement(uname);
		}
	}

    public void updateAdmins (Vector nAdmins) {
        Vector removed = (Vector) admins.clone();
        removed.removeAll(nAdmins);
        Vector added = (Vector) nAdmins.clone();
        added.removeAll(admins);
        UserManager umgr = UserManager.mgr;
        for (Enumeration e = added.elements(); e.hasMoreElements(); ) {
            String uname = (String) e.nextElement();
            User cu = umgr.getUserByName(uname);
            if (cu != null)
                cu.setPermission(IUserStates.ROLE_GOD);
            admins.addElement(uname);
        }
        for (Enumeration e = removed.elements(); e.hasMoreElements();) {
            String uname = (String) e.nextElement();
            User cu = umgr.getUserByName(uname);
            if (cu != null)
                cu.setPermission(IUserStates.ROLE_USER);
            while (admins.contains(uname))
                admins.removeElement(uname);
        }
    }

	public void updateModerators (Vector nMod) {
		Vector removed = (Vector) moderators.clone();
		removed.removeAll(nMod);
		Vector added = (Vector) nMod.clone();
		added.removeAll(moderators);
		UserManager umgr = UserManager.mgr;
		for (Enumeration e = added.elements(); e.hasMoreElements(); ) {
			String uname = (String) e.nextElement();
			User cu = umgr.getUserByName(uname);
			if (cu != null)
				cu.setPermission(IUserStates.ROLE_VIP);
			moderators.addElement(uname);
		}
		for (Enumeration e = removed.elements(); e.hasMoreElements();) {
			String uname = (String) e.nextElement();
			User cu = umgr.getUserByName(uname);
			if (cu != null)
				cu.setPermission(IUserStates.ROLE_USER);
			while (moderators.contains(uname))
				moderators.removeElement(uname);
		}
	}
	
	public void updateGuests (Vector nGuest) {
		Vector removed = (Vector) guests.clone();
		removed.removeAll(nGuest);
		Vector added = (Vector) nGuest.clone();
		added.removeAll(guests);
		UserManager umgr = UserManager.mgr;
		for (Enumeration e = added.elements(); e.hasMoreElements(); ) {
			String uname = (String) e.nextElement();
			User cu = umgr.getUserByName(uname);
			if (cu != null)
				cu.givePermission(IUserStates.IS_GUEST);
			guests.addElement(uname);
		}
		for (Enumeration e = removed.elements(); e.hasMoreElements();) {
			String uname = (String) e.nextElement();
			User cu = umgr.getUserByName(uname);
			if (cu != null)
				cu.setPermission(IUserStates.ROLE_USER);
			while (guests.contains(uname))
				guests.removeElement(uname);
		}
	}

    public void sendFriendNotification (User forUser, Group inGroup, List to) {
        if (to==null)
            return;
        MessageParser mpr = new MessageParser();
        mpr.setUsercontext (forUser);
        mpr.setTargetGroup (inGroup);
        mpr.setMessageTemplate ("message.f.joined");
        for (Iterator e = to.iterator (); e.hasNext (); ) {
            User cu = (User) e.next ();
            if (!forUser.getGroup().equals(cu.getGroup()))
                cu.sendMessage (mpr);
        }
    }
	public Enumeration vips () {
		return vips.elements();
	}
	public Enumeration moderators () {
		return moderators.elements();
	}
    public Enumeration guests () {
        return guests.elements();
    }

    /**
     * method to resolve string-right-declarations to int-bitmask-values
     * @param name the name of the IUserStates-constant
     * @return the int-value of the IUserStates-constant
     */
    public static int resolveState (String name) {
        String lowerName = name.toLowerCase();
        if (lowerName.equals("may_open_group")) { 
            return IUserStates.MAY_OPEN_GROUP;
        } else if (lowerName.equals("may_open_moderated_group")) { 
            return IUserStates.MAY_OPEN_MODERATED_GROUP;
        } else if (lowerName.equals("may_lock_group")) { 
            return IUserStates.MAY_LOCK_GROUP;
        } else if (lowerName.equals("may_lock_moderated_group")) { 
            return IUserStates.MAY_LOCK_MODERATED_GROUP;
        } else if (lowerName.equals("may_lock_starting_group")) { 
            return IUserStates.MAY_LOCK_STARTING_GROUP;
        } else if (lowerName.equals("may_join_group")) { 
            return IUserStates.MAY_JOIN_GROUP;
        } else if (lowerName.equals("may_join_locked_group")) { 
            return IUserStates.MAY_JOIN_LOCKED_GROUP;
        } else if (lowerName.equals("may_set_theme")) { 
            return IUserStates.MAY_SET_THEME;
        } else if (lowerName.equals("may_change_right")) { 
            return IUserStates.MAY_CHANGE_RIGHT;
        } else if (lowerName.equals("may_punish")) { 
            return IUserStates.MAY_PUNISH;
        } else if (lowerName.equals("may_kick")) { 
            return IUserStates.MAY_KICK;
        } else if (lowerName.equals("may_kick_hard")) { 
            return IUserStates.MAY_KICK_HARD;
        } else if (lowerName.equals("may_ban")) { 
            return IUserStates.MAY_BAN;
        } else if (lowerName.equals("protected_from_punish")) { 
            return IUserStates.PROTECTED_FROM_PUNISH;
        } else if (lowerName.equals("protected_from_kick")) { 
            return IUserStates.PROTECTED_FROM_KICK;
        } else if (lowerName.equals("protected_from_ban")) { 
            return IUserStates.PROTECTED_FROM_BAN;
        } else if (lowerName.equals("protected_from_rightchange")) { 
            return IUserStates.PROTECTED_FROM_RIGHTCHANGE;
        } else if (lowerName.equals("freely_punishable")) { 
            return IUserStates.FREELY_PUNISHABLE;
        } else if (lowerName.equals("freely_kickable")) { 
            return IUserStates.FREELY_KICKABLE;
        } else if (lowerName.equals("freely_banable")) { 
            return IUserStates.FREELY_BANABLE;
        } else if (lowerName.equals("is_moderator")) { 
            return IUserStates.IS_MODERATOR;
        } else if (lowerName.equals("may_release_serverban")) { 
            return IUserStates.MAY_RELEASE_SERVERBAN;
        } else if (lowerName.equals("is_guest")) { 
            return IUserStates.IS_GUEST;
        } else if (lowerName.equals("role_asshole")) { 
            return IUserStates.ROLE_ASSHOLE;
        } else if (lowerName.equals("role_user")) { 
            return IUserStates.ROLE_USER;
        } else if (lowerName.equals("role_vip")) { 
            return IUserStates.ROLE_VIP;
        } else if (lowerName.equals("role_god")) { 
            return IUserStates.ROLE_GOD;
        } else if (lowerName.equals("guest")) {
            return IUserStates.IS_GUEST;
        } else if (lowerName.equals("moderator")) {
            return IUserStates.IS_MODERATOR;
		} else if (lowerName.equals("vip")) {
            return IUserStates.ROLE_VIP;
		} else if (lowerName.equals("user")) {
            return IUserStates.ROLE_USER;
		} else if (lowerName.equals("asshole")) {
            return IUserStates.ROLE_ASSHOLE;
		}
        return 0;
    }
    
    public String toString() {
        return ("[UserManager]");
    }
    
    public class UserStore {
        private Map usrName = new HashMap();
        private Map usrCookie = new HashMap();
        private User[] uarr = new User[0];
        
        private UserStore () { }
        
 
        public synchronized String state() {
            StringBuffer sb = new StringBuffer();
            sb.append ("<table border=1><tr><td>");
            for (Iterator i = usrName.entrySet().iterator(); i.hasNext(); )
                sb.append (i.next()).append("<br>");
            sb.append ("</td><td>");
            for (Iterator i = usrCookie.entrySet().iterator(); i.hasNext(); )
                sb.append (i.next()).append("<br>");
            sb.append ("</td></tr></table>");
            return sb.toString();
        }
 
        /**
         * @return the number of users currently logged in
         */
        public synchronized int size() {
            return usrName.size();
        }

        public void addUser (User u) throws Exception {
            String name = u.getName();
            String cookie = u.getCookie();
            if (name==null || name.length() < 1
                || cookie==null || cookie.length() < 1)
                    throw new Exception ("Tryed to add invalid user (cookie: " + cookie + " / name: " + name);
            name = name.trim().toLowerCase();
            if (usrName.containsKey(name)
                || usrCookie.containsKey(cookie))
                throw new Exception ("Tryed to add duplicate user: " + name);
            synchronized (this) {
                usrName.put(name, u);
                usrCookie.put(cookie, u);
                uarr=null;
            }
        }
        
        public synchronized User[] toArray() {
            if (uarr==null) {
                uarr = (User[]) usrName.values().toArray(new User[0]);
            }
            return uarr;
        }
        
        public void removeUser (User u) {
            String name = u.getName();
            String cookie = u.getCookie();
            synchronized (this) {
                if (name!=null) {
                    usrName.remove(name.trim().toLowerCase());
                    uarr=null;
                }
                if (cookie!=null)
                    usrCookie.remove(cookie);
            }
        }

        public synchronized User getUserCookie(String cookie) {
            return (User) usrCookie.get(cookie);
        }

        public User getUserName(String name) {
            if (name==null)
                return null;
            String key = name.trim().toLowerCase();
            synchronized (this) {
                return (User) usrName.get(key);
            }
        }
        
        public synchronized boolean contains (User u) {
            String cookie = u.getCookie();
            String name = u.getName();
            User c, n;
            synchronized (this) {
                c = getUserCookie(cookie);
                n = getUserName(name);
            }
            return (c!=null && n!=null); 
        }
        
        public Iterator iterator() {
            return new UserStoreIterator(this);
        }
        
        class UserStoreIterator implements Iterator {
            private Iterator ci;
            private User cu;
            private UserStore ustr;
            UserStoreIterator (UserStore ustr) {
                ci = usrName.values().iterator();
                this.ustr = ustr;
            }

            public void remove() {
                synchronized (ustr) {
                    if (cu==null)
                        throw new IllegalStateException();
                    usrCookie.remove(cu.getCookie());
                    ci.remove();
                    uarr=null;
                }
            }

            public boolean hasNext() {
                return ci.hasNext();
            }

            public Object next() {
                cu = (User) ci.next();
                return cu;
            }
        }
   }

    /**
     * @return
     */
    public long lastModified() {
        return lastModified;
    }
}

⌨️ 快捷键说明

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