📄 usermanager.java
字号:
}
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 + -