2 using System.Collections.Generic;
\r
5 using System.Web.J2EE;
\r
6 using System.Web.SessionState;
\r
8 namespace Mainsoft.Web.Hosting
\r
10 public static class SessionWrapper
\r
12 static readonly Type IRequiresSessionStateType = typeof (IRequiresSessionState);
\r
13 static readonly Type IReadOnlySessionStateType = typeof (IReadOnlySessionState);
\r
15 public static IHttpHandler WrapHandler (IHttpHandler handler) {
\r
16 Type type = (Type) ((IServiceProvider) handler).GetService (typeof (Type));
\r
18 if (IRequiresSessionStateType.IsAssignableFrom (type))
\r
19 return IReadOnlySessionStateType.IsAssignableFrom (type) ?
\r
20 (handler is IHttpExtendedHandler ? (IHttpHandler) new ReadOnlySessionWrapperExtendedHandler ((IHttpExtendedHandler) handler) : new ReadOnlySessionWrapperHandler (handler)) :
\r
21 (handler is IHttpExtendedHandler ? new SessionWrapperExtendedHandler ((IHttpExtendedHandler) handler) : new SessionWrapperHandler (handler));
\r
25 #region SessionWrappers
\r
27 class SessionWrapperHandler : IHttpHandler, IRequiresSessionState, IServiceProvider
\r
29 protected readonly IHttpHandler _handler;
\r
31 public SessionWrapperHandler (IHttpHandler handler) {
\r
35 public bool IsReusable {
\r
36 get { return _handler.IsReusable; }
\r
39 public void ProcessRequest (HttpContext context) {
\r
40 _handler.ProcessRequest (context);
\r
43 public object GetService (Type serviceType) {
\r
44 return ((IServiceProvider) _handler).GetService (serviceType);
\r
48 sealed class ReadOnlySessionWrapperHandler : SessionWrapperHandler, IReadOnlySessionState
\r
50 public ReadOnlySessionWrapperHandler (IHttpHandler handler) : base (handler) { }
\r
55 #region ExtendedSessionWrappers
\r
57 class SessionWrapperExtendedHandler : SessionWrapperHandler, IHttpExtendedHandler
\r
59 public SessionWrapperExtendedHandler (IHttpExtendedHandler handler)
\r
63 public bool IsCompleted {
\r
64 get { return ((IHttpExtendedHandler) _handler).IsCompleted; }
\r
68 sealed class ReadOnlySessionWrapperExtendedHandler : SessionWrapperExtendedHandler, IReadOnlySessionState
\r
70 public ReadOnlySessionWrapperExtendedHandler (IHttpExtendedHandler handler) : base (handler) { }
\r