All pastes #19329 Raw Edit

Untitled

public text v1 · immutable
#19329 ·published 2005-08-04 20:41 UTC
rendered paste body
package 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;
        }
    }
}