diff options
Diffstat (limited to 'src/main/java/org/openslx/imagemaster/serversession/ServerSessionManager.java')
| -rw-r--r-- | src/main/java/org/openslx/imagemaster/serversession/ServerSessionManager.java | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/src/main/java/org/openslx/imagemaster/serversession/ServerSessionManager.java b/src/main/java/org/openslx/imagemaster/serversession/ServerSessionManager.java new file mode 100644 index 0000000..1fd4322 --- /dev/null +++ b/src/main/java/org/openslx/imagemaster/serversession/ServerSessionManager.java @@ -0,0 +1,69 @@ +package org.openslx.imagemaster.serversession; + +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.UUID; + +import org.apache.log4j.Logger; +import org.openslx.imagemaster.session.SessionManager; +import org.openslx.imagemaster.thrift.iface.ServerSessionData; +import org.openslx.imagemaster.util.Hash; + +public class ServerSessionManager { + + private static Logger log = Logger.getLogger( SessionManager.class ); + + // Map of currently known sessions + private static final Map<String, ServerSession> serverSessions = new LinkedHashMap<String, ServerSession>(); + private static final Thread gcThread; + + public static ServerSessionData addSession( ServerSession serverSession ) + { + final String sessionId = Hash.sha256( UUID.randomUUID().toString() ); + + synchronized ( serverSessions ) { + serverSessions.put( sessionId, serverSession ); + } + return new ServerSessionData( sessionId ); + } + + public static ServerSession getSession( String sessionId ) + { + final ServerSession serverSession; + synchronized ( serverSessions ) { + serverSession = serverSessions.get( sessionId ); + } + if ( serverSession == null || serverSession.timedOut() ) { + return null; + } + return serverSession; + } + + static { + gcThread = new Thread( new Runnable() { + @Override + public void run() + { + for ( ;; ) { + try { + Thread.sleep( 1800L * 1000L ); + } catch ( InterruptedException e ) { + } + synchronized ( serverSessions ) { + Iterator<ServerSession> it = serverSessions.values().iterator(); + while ( it.hasNext() ) { + final ServerSession s = it.next(); + if ( s.timedOut() ) { + log.debug( "Removing old session of " + s.getOrganization() ); + it.remove(); + } + } + } + } + } + } ); + gcThread.start(); + } + +} |
