@@ -37,7 +37,9 @@ static SimpleHttpServer createSimpleHttpServer(final Integer port, final Integer
37
37
38
38
private final HttpServer server = HttpServer .create ();
39
39
40
- private final HashMap <HttpContext ,HttpHandler > contexts = new HashMap <>();
40
+ private HttpSessionHandler sessionHandler ;
41
+
42
+ private final Map <HttpContext ,HttpHandler > contexts = new HashMap <>();
41
43
42
44
private boolean running = false ;
43
45
@@ -46,6 +48,11 @@ static SimpleHttpServer createSimpleHttpServer(final Integer port, final Integer
46
48
server .bind (new InetSocketAddress (port ),backlog != null ? backlog : 0 );
47
49
}
48
50
51
+ private void handle (final HttpExchange exchange ){
52
+ if (sessionHandler != null )
53
+ sessionHandler .assignSession (exchange );
54
+ }
55
+
49
56
//
50
57
51
58
@ Override
@@ -98,30 +105,54 @@ public final Executor getExecutor(){
98
105
return server .getExecutor ();
99
106
}
100
107
108
+ @ Override
109
+ public synchronized final void setHttpSessionHandler (final HttpSessionHandler sessionHandler ){
110
+ this .sessionHandler = sessionHandler ;
111
+ }
112
+
113
+ @ Override
114
+ public final HttpSessionHandler getHttpSessionHandler (){
115
+ return sessionHandler ;
116
+ }
117
+
118
+ //
119
+
101
120
//
102
121
103
122
@ Override
104
123
public synchronized final HttpContext createContext (final String path ){
105
- final HttpContext context = server .createContext (getContext (path ));
106
- contexts .put (context ,context .getHandler ());
107
- return context ;
124
+ return createContext (path ,(HttpExchange exchange ) -> {});
108
125
}
109
126
110
127
@ Override
111
128
public synchronized final HttpContext createContext (final String path , final HttpHandler handler ){
112
129
if (!getContext (path ).equals ("/" ) && handler instanceof RootHandler )
113
130
throw new IllegalArgumentException ("RootHandler can only be used at the root '/' context" );
114
- final HttpContext context = server .createContext (getContext (path ),handler );
131
+
132
+ final HttpHandler wrapper = exchange -> {
133
+ handle (exchange );
134
+ handler .handle (exchange );
135
+ };
136
+ final HttpContext context = server .createContext (getContext (path ),wrapper );
137
+
115
138
contexts .put (context ,handler );
139
+
116
140
return context ;
117
141
}
118
142
119
143
@ Override
120
144
public synchronized final HttpContext createContext (final String path , final SimpleHttpHandler handler ){
121
145
if (!getContext (path ).equals ("/" ) && handler instanceof RootHandler )
122
146
throw new IllegalArgumentException ("RootHandler can only be used at the root '/' context" );
123
- final HttpContext context = server .createContext (getContext (path ),(exchange ) -> handler .handle (SimpleHttpExchange .create (exchange )));
147
+
148
+ final HttpHandler wrapper = exchange -> {
149
+ handle (exchange );
150
+ handler .handle (SimpleHttpExchange .create (exchange ));
151
+ };
152
+ final HttpContext context = server .createContext (getContext (path ),wrapper );
153
+
124
154
contexts .put (context ,context .getHandler ());
155
+
125
156
return context ;
126
157
}
127
158
@@ -249,11 +280,9 @@ public synchronized final void removeContext(final HttpContext context){
249
280
250
281
@ Override
251
282
public final HttpHandler getContextHandler (final String path ){
252
- for (final HttpContext context : contexts .keySet ()){
253
- if (context .getPath ().equals (getContext (path ))){
283
+ for (final HttpContext context : contexts .keySet ())
284
+ if (context .getPath ().equals (getContext (path )))
254
285
return context .getHandler ();
255
- }
256
- }
257
286
return null ;
258
287
}
259
288
0 commit comments