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;
}
}
}