|
23 | 23 | import io.jooby.StatusCode; |
24 | 24 | import io.jooby.Value; |
25 | 25 | import io.jooby.ValueNode; |
| 26 | +import io.jooby.WebSocket; |
| 27 | +import io.undertow.Handlers; |
26 | 28 | import io.undertow.io.IoCallback; |
27 | 29 | import io.undertow.io.Sender; |
28 | 30 | import io.undertow.server.HttpServerExchange; |
|
32 | 34 | import io.undertow.util.Headers; |
33 | 35 | import io.undertow.util.HttpString; |
34 | 36 | import io.undertow.util.SameThreadExecutor; |
| 37 | +import io.undertow.websockets.WebSocketConnectionCallback; |
| 38 | +import io.undertow.websockets.core.WebSocketChannel; |
| 39 | +import io.undertow.websockets.spi.WebSocketHttpExchange; |
35 | 40 | import org.slf4j.Logger; |
36 | 41 |
|
37 | 42 | import javax.annotation.Nonnull; |
@@ -222,6 +227,19 @@ public UtowContext(HttpServerExchange exchange, Router router) { |
222 | 227 | return this; |
223 | 228 | } |
224 | 229 |
|
| 230 | + @Nonnull @Override public Context upgrade(@Nonnull WebSocket.Initializer handler) { |
| 231 | + try { |
| 232 | + Handlers.websocket((exchange, channel) -> { |
| 233 | + UtowWebSocket ws = new UtowWebSocket(this, channel); |
| 234 | + handler.init(Context.readOnly(this), ws); |
| 235 | + ws.fireConnect(); |
| 236 | + }).handleRequest(exchange); |
| 237 | + return this; |
| 238 | + } catch (Exception x) { |
| 239 | + throw SneakyThrows.propagate(x); |
| 240 | + } |
| 241 | + } |
| 242 | + |
225 | 243 | @Nonnull @Override public StatusCode getResponseCode() { |
226 | 244 | return StatusCode.valueOf(exchange.getStatusCode()); |
227 | 245 | } |
|
0 commit comments