Subversion Repository Public Repository

litesoft

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
// This Source Code is in the Public Domain per: http://unlicense.org
package org.litesoft.GWT.eventbus.server.nonpublic;

import javax.servlet.http.*;

import org.litesoft.GWT.eventbus.server.*;
import org.litesoft.logger.*;

public class ServerEventBusSessionMapper
{
    private static final Logger LOGGER = LoggerFactory.getLogger( ServerEventBusSessionMapper.class );

    private static void addServletBrowserData( HttpServletRequest pRequest, ServerEventBus pServerEventBus )
    {
        if ( pServerEventBus instanceof NonTemporaryServerEventBus )
        {
            pServerEventBus.setClientWindowInstanceData( ServerEventBus.TRANSLATED_PATH,
                                                         pRequest.getPathTranslated() );
            pServerEventBus.setClientWindowInstanceData( ServerEventBus.REMOTE_ADDR,
                                                         pRequest.getRemoteAddr() );
        }
    }

    public static ServerEventBus getServerEventBus( HttpServletRequest pRequest,
                                                    ThreadLocalContextFactory pThreadLocalContextFactory,
                                                    int pClientIdNumber )
            throws InvalidSessionException
    {
        ServerEventBus zServerEventBus = ServerEventBusManager.INSTANCE.getServerEventBus( pClientIdNumber );
        if ( null != zServerEventBus )
        {
            if ( !verifyRelatedBusCommonObject( pRequest, pThreadLocalContextFactory, zServerEventBus ) )
            {
                String zProblem = "Cross Session Request for ClientID '" + pClientIdNumber + "' from '" +
                                  pRequest.getRemoteUser() + "' at: " + pRequest.getRemoteAddr();
                LOGGER.warn.log( zProblem );
                throw new InvalidSessionException( zProblem );
            }
            // getRelatedBusCommonObject() == null passes
        }
        return zServerEventBus;
    }

    private static synchronized boolean verifyRelatedBusCommonObject( HttpServletRequest pRequest,
                                                                      ThreadLocalContextFactory pThreadLocalContextFactory,
                                                                      ServerEventBus pServerEventBus )
    {
        Object zRelatedBusCommonObject = pServerEventBus.getRelatedBusCommonObject();
        return (zRelatedBusCommonObject == null) ||
               (zRelatedBusCommonObject == getSessionTracker( pRequest, pThreadLocalContextFactory ));
    }

    private static final String SERVER_EVENT_BUSES = "ServerEventBuses";

    public static synchronized Integer[] getSessionServerEventBusClientIdNumbers( HttpServletRequest pRequest,
                                                                                  ThreadLocalContextFactory pThreadLocalContextFactory )
    {
        return getSessionTracker( pRequest, pThreadLocalContextFactory ).getClientIdNumbers();
    }

    private static synchronized SEBSessionTracker getSessionTracker( HttpServletRequest pRequest,
                                                                     ThreadLocalContextFactory pThreadLocalContextFactory )
    {
        HttpSession session = pRequest.getSession();
        SEBSessionTracker tracker = (SEBSessionTracker) session.getAttribute( SERVER_EVENT_BUSES );
        if ( tracker == null )
        {
            session.setAttribute( SERVER_EVENT_BUSES,
                                  tracker = new SEBSessionTracker( pThreadLocalContextFactory ) );
        }
        return tracker;
    }

    public static void addServerEventBus( ServerEventBus pParent, ServerEventBus pServerEventBus )
    {
        // Force use of same stuff
        SEBSessionTracker tracker = (SEBSessionTracker) pParent.getRelatedBusCommonObject();

        pServerEventBus.setRelatedBusCommonObject( tracker );
        tracker.addServerEventBus( pServerEventBus );
    }

    public static void addServerEventBus( HttpServletRequest pRequest,
                                          ThreadLocalContextFactory pThreadLocalContextFactory,
                                          ServerEventBus pServerEventBus )
    {
        SEBSessionTracker tracker = getSessionTracker( pRequest, pThreadLocalContextFactory );
        addServletBrowserData( pRequest, pServerEventBus );

        pServerEventBus.setRelatedBusCommonObject( tracker );
        tracker.addServerEventBus( pServerEventBus );
    }

    public static SEBSessionTracker addTrackerToServerEventBus( HttpServletRequest pRequest,
                                                                ThreadLocalContextFactory pThreadLocalContextFactory,
                                                                ServerEventBus pServerEventBus )
    {
        SEBSessionTracker tracker = getSessionTracker( pRequest, pThreadLocalContextFactory );
        addServletBrowserData( pRequest, pServerEventBus );
        pServerEventBus.setRelatedBusCommonObject( tracker );
        return tracker;
    }

    public static String getLogoutMessage( HttpServletRequest pRequest,
                                           ThreadLocalContextFactory pThreadLocalContextFactory )
    {
        return getSessionTracker( pRequest, pThreadLocalContextFactory ).getLogoutMessage();
    }

    public static void setLogoutMessage( HttpServletRequest pRequest,
                                         ThreadLocalContextFactory pThreadLocalContextFactory,
                                         String pLogoutMessage )
    {
        getSessionTracker( pRequest, pThreadLocalContextFactory ).setLogoutMessage( pLogoutMessage );
    }

    public static boolean anyServerEventBusesFor( HttpServletRequest pRequest,
                                                  ThreadLocalContextFactory pThreadLocalContextFactory )
    {
        return getSessionTracker( pRequest, pThreadLocalContextFactory ).anyServerEventBuses();
    }

    public static void dropAllServerEventBusesFor( HttpServletRequest pRequest,
                                                   ThreadLocalContextFactory pThreadLocalContextFactory,
                                                   String pWhy )
    {
        getSessionTracker( pRequest, pThreadLocalContextFactory ).dropAllServerEventBuses( pWhy );
    }
}

Commits for litesoft/trunk/Java/GWT/OldServer/src/org/litesoft/GWT/eventbus/server/nonpublic/ServerEventBusSessionMapper.java

Diff revisions: vs.
Revision Author Commited Message
947 Diff Diff GeorgeS picture GeorgeS Fri 06 Jun, 2014 23:36:56 +0000

Correct Spelling of package!

49 Diff Diff GeorgeS picture GeorgeS Mon 12 Apr, 2010 02:59:10 +0000

License Text

2 GeorgeS picture GeorgeS Sun 07 Feb, 2010 12:50:58 +0000