rendered paste bodypackage org.pravus.frameworks.network.lobby.server.mobile.http;import java.util.Collection;import java.util.Date;import java.util.HashMap;import java.util.Iterator;import org.pravus.frameworks.network.lobby.server.Member;public class LoginTracker implements Runnable { private HashMap<String, MobileSession> sessions = new HashMap<String, MobileSession>(); private boolean end = false; private long milliSecondsTillTimeOut; static long nextId = 0; public LoginTracker(int timeOut) { milliSecondsTillTimeOut = timeOut; } public synchronized void setTimeOut(long timeOut) { milliSecondsTillTimeOut = timeOut; } public long getTimeOut() { return milliSecondsTillTimeOut; } public static String generateNextId() { return String.valueOf(nextId++); } public void run() { while(end == false) { checkForTimeOuts(); try { Thread.currentThread().sleep(500); } catch (Exception e) { } } } public synchronized void terminate() { end = true; } public synchronized void checkForTimeOuts() { Date currentTime = new Date(); for (Iterator<MobileSession> i = sessions.values().iterator(); i.hasNext();) { MobileSession m = i.next(); long differenceInMinutes = currentTime.getTime() - m.getLastAccessed().getTime() / 1000; if (differenceInMinutes >= 1) i.remove(); } } public synchronized String newSession(Member m) { String id = generateNextId(); MobileSession session = new MobileSession(m, id); sessions.put(id, session); return id; } public synchronized Member findSession(String sessionId) { return sessions.get(sessionId).getMember(); } public synchronized void removeSession(String sessionId) { sessions.remove(sessionId); } public synchronized Collection getMemberList() { return sessions.values(); } private class MobileSession { private Member member; private Date lastAccessTime = new Date(); public MobileSession(Member m, String sessionId) { member = m; } public Date getLastAccessed() { return lastAccessTime; } public void updateAccessTime() { lastAccessTime = new Date(); } public Member getMember() { return member; } }}