/*
* Copyright 2005 Joe Walker
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.directwebremoting.extend;
import java.util.Collection;
import org.directwebremoting.ScriptSession;
import org.directwebremoting.event.ScriptSessionListener;
/**
* A ScriptSessionManager looks after a number of sessions (keyed using a
* Javascript variable)
* @author Joe Walker [joe at getahead dot ltd dot uk]
*/
public interface ScriptSessionManager
{
/**
* Get a list of all the currently known ScriptSessions by id.
* Note that the list of known sessions is continually changing so it is
* possible that the list will be out of date by the time it is used. For
* this reason you should check that getScriptSession(String id) returns
* something non null.
* @return An iterator over the currently known sessions, by id
*/
Collection<ScriptSession> getAllScriptSessions();
/**
* Lookup all the windows associated with a given browser
* @param httpSessionId The browser id to lookup
* @return A list of script sessions for each open window
*/
Collection<RealScriptSession> getScriptSessionsByHttpSessionId(String httpSessionId);
/**
* For a given script session id, return the related ScriptSession object
* or null if the id is not known.
* @param id The id to get a ScriptSession object for
* @param url The URL including 'http://', up to (but not including) '?' or '#' (or null if not known)
* @param httpSessionId The session ID (or null if not known)
* @return A ScriptSession to match the ID, or null if a match is not found.
*/
RealScriptSession getScriptSession(String id, String url, String httpSessionId);
/**
* Accessor for the time (in milliseconds) when unused ScriptSessions will expire
* @return the scriptSessionTimeout
*/
long getScriptSessionTimeout();
/**
* Maintain the list of {@link ScriptSessionListener}s
* @param li the ScriptSessionListener to add
*/
void addScriptSessionListener(ScriptSessionListener li);
/**
* Maintain the list of {@link ScriptSessionListener}s
* @param li the ScriptSessionListener to remove
*/
void removeScriptSessionListener(ScriptSessionListener li);
/**
* Some implementations of ScriptSessionManager need to add custom code into
* engine.js to register ScriptSessions with the server.
*/
String getInitCode();
/**
* The default length of time a session can go unused before it
* automatically becomes invalid and is recycled.
* The default is 5mins
*/
static final long DEFAULT_TIMEOUT_MILLIS = 5L * 60L * 1000L;
}