diff --git a/src/main/java/ortus/boxlang/runtime/application/Session.java b/src/main/java/ortus/boxlang/runtime/application/Session.java index 84abb037d..bd0ee5417 100644 --- a/src/main/java/ortus/boxlang/runtime/application/Session.java +++ b/src/main/java/ortus/boxlang/runtime/application/Session.java @@ -108,6 +108,10 @@ public SessionScope getSessionScope() { return sessionScope; } + public Application getApplication() { + return this.application; + } + public void shutdown() { // Any buffer output in this context will be discarded if ( startingListener != null ) { diff --git a/src/main/java/ortus/boxlang/runtime/types/listeners/SessionListener.java b/src/main/java/ortus/boxlang/runtime/types/listeners/SessionListener.java new file mode 100644 index 000000000..2f0b4a046 --- /dev/null +++ b/src/main/java/ortus/boxlang/runtime/types/listeners/SessionListener.java @@ -0,0 +1,28 @@ +package ortus.boxlang.runtime.types.listeners; + +import ortus.boxlang.runtime.application.Session; +import ortus.boxlang.runtime.scopes.Key; + +public class SessionListener { + + private final Session session; + + public SessionListener( Session session ) { + this.session = session; + } + + /** + * Call when a value is being changed in an IListenable + * + * @param key The key of the value being changed. For arrays, the key will be 1-based + * @param newValue The new value (null if being removed) + * @param oldValue The old value (null if being added) + * + * @return The new value to be set (you can override) + */ + public Object notify( Key key, Object newValue, Object oldValue ) { + this.session.getApplication().getSessionsCache().set( this.session.getID().getName(), this.session ); + return null; + } + +}