package oculusPrime; import java.util.Date; import java.util.Vector; public class LoginRecords { public static final String PASSENGER = "passenger"; public static final String DRIVER = "driver"; private static Application app = null; public static Vector<Record> list = new Vector<Record>(); public static Settings settings = Settings.getReference(); public static State state = State.getReference(); public LoginRecords(Application a) { app = a; } public void beDriver() { list.add(new Record(state.get(State.values.driver), DRIVER)); state.set(State.values.logintime, System.currentTimeMillis()); Util.debug("beDriver(): " + state.get(State.values.driver), this); } public void bePassenger(String user) { list.add(new Record(user, PASSENGER)); Util.debug("bePassenger(): " + user, this); } /** is the driver the admin user? */ public boolean isAdmin() { String user = state.get(State.values.driver); if (user == null) return false; if (user.equals("")) return false; Settings settings = Settings.getReference(); String admin = settings.readSetting("user0").toLowerCase(); return admin.equals(user.toLowerCase()); } public void signoutDriver() { // try all instances for (int i = 0; i < list.size(); i++){ Record rec = list.get(i); if (rec.isActive() && rec.getRole().equals(DRIVER)){ list.get(i).logout(); } } state.delete(State.values.driver); } /** @return the number of users */ public int getActive() { int active = 0; for (int i = 0; i < list.size(); i++){ Record rec = list.get(i); if(rec.isActive()) active++; } return active; } public String toString() { String str = "RTMP users login records:<br>"; if (list.isEmpty()) return null; for (int i = 0; i < list.size(); i++) str += i + " " + list.get(i).toString() + "<br>"; return str; } /** @return list of connected users */ public String who() { String result = ""; result += "active RTMP users: " + getActive()+"<br>" ; if (!list.isEmpty()) { for (int i = 0; i < list.size(); i++) { if (list.get(i).toString().matches(".*ACTIVE$")) { result += list.get(i).toString() + "<br>"; } } } if (app.commandServer!=null) { result+="telnet connections: "+state.get(State.values.telnetusers); // +app.commandServer.printers.size(); } return result; } /** store each record in an object */ class Record { private long timein = System.currentTimeMillis(); private long timeout = 0; private String user = null; private String role = null; Record(String usr, String role){ this.user = usr; this.role = role; } public String getRole() { return role; } public boolean isActive(){ if (!getRole().equals(PASSENGER)) { return (timeout==0); } else { return false; } } @Override public String toString() { String str = user + " " + role.toUpperCase(); str += " login: " + new Date(timein).toString(); if(isActive() && getRole().equals(DRIVER)) str += " is ACTIVE"; else str += " logout: " + new Date(timeout).toString(); return str; } public void logout() { if(timeout==0){ timeout = System.currentTimeMillis(); Util.debug(toString(), this); } // else Util.log("error: trying to logout twice", this); } } }