01: /*
02: * Copyright 2005 Joe Walker
03: *
04: * Licensed under the Apache License, Version 2.0 (the "License");
05: * you may not use this file except in compliance with the License.
06: * You may obtain a copy of the License at
07: *
08: * http://www.apache.org/licenses/LICENSE-2.0
09: *
10: * Unless required by applicable law or agreed to in writing, software
11: * distributed under the License is distributed on an "AS IS" BASIS,
12: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13: * See the License for the specific language governing permissions and
14: * limitations under the License.
15: */
16: package org.directwebremoting.extend;
17:
18: import java.io.IOException;
19:
20: import org.directwebremoting.ScriptBuffer;
21: import org.directwebremoting.ScriptSession;
22:
23: /**
24: * RealScriptSession is the real interface that should be implemented in place
25: * of ScriptSession. It includes methods required by the guts of DWR, that are
26: * not needed by normal users.
27: * @author Joe Walker [joe at getahead dot ltd dot uk]
28: */
29: public interface RealScriptSession extends ScriptSession {
30: /**
31: * If this ScriptSession currently has a connected {@link ScriptConduit}
32: * and this conduit accepts and claims to be able to publish the script
33: * then publish and return true, otherwise return false.
34: * Add a script to the list waiting for remote execution.
35: * The version automatically wraps the string in a ClientScript object.
36: * @param script The script to execute
37: */
38: boolean addScriptImmediately(ScriptBuffer script);
39:
40: /**
41: * While a Marshaller is processing a request it can register a
42: * ScriptConduit with the ScriptSession to say - "pass scripts to me"
43: * <p>
44: * Several Marshallers may be active on the same page as a time and it
45: * doesn't really matter which gets the script. So ScriptSession should
46: * record all of the active ScriptConduits, but just pick one
47: * @param conduit The new ScriptConduit
48: * @throws IOException If the write to the output fails
49: * @see RealScriptSession#removeScriptConduit(ScriptConduit)
50: */
51: void addScriptConduit(ScriptConduit conduit) throws IOException;
52:
53: /**
54: * Remove a ScriptConduit.
55: * @param conduit The ScriptConduit to remove
56: * @see RealScriptSession#addScriptConduit(ScriptConduit)
57: */
58: void removeScriptConduit(ScriptConduit conduit);
59:
60: /**
61: * We might need to send a script directly to a conduit without adding the
62: * conduit to the "open" list and then removing it directly.
63: * @param conduit The conduit to write to
64: * @throws IOException If writing fails
65: */
66: void writeScripts(ScriptConduit conduit) throws IOException;
67:
68: /**
69: * Allows for checking to see if there is data waiting to be returned
70: * @return true if there are no waiting scripts
71: */
72: boolean hasWaitingScripts();
73:
74: /**
75: * Called whenever a browser accesses this ScriptSession to ensure that the
76: * session does not timeout before it should.
77: */
78: void updateLastAccessedTime();
79:
80: /**
81: * If the global parameter avoid2ConnectionLimitWithWindowName == true then
82: * we need to keep a track of the names of the windows that connect to us
83: * @param windowName The new name for the window that spawned this Session
84: */
85: void setWindowName(String windowName);
86:
87: /**
88: * Accessor for the name attached to this window
89: */
90: String getWindowName();
91: }
|