import java.util.Objects;
import java.util.Set;
+import javax.servlet.ServletContext;
+import javax.websocket.DeploymentException;
+import javax.websocket.server.ServerContainer;
+
import org.argeo.cms.servlet.httpserver.HttpContextServlet;
-import org.eclipse.jetty.server.Handler;
-import org.eclipse.jetty.server.handler.ContextHandler;
+import org.argeo.cms.websocket.server.WebsocketEndpoints;
+import org.eclipse.jetty.server.session.SessionHandler;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;
+import org.eclipse.jetty.websocket.javax.server.config.JavaxWebSocketServletContainerInitializer;
+import org.eclipse.jetty.websocket.javax.server.config.JavaxWebSocketServletContainerInitializer.Configurator;
import com.sun.net.httpserver.Authenticator;
import com.sun.net.httpserver.Filter;
class JettyHttpContext extends HttpContext {
private final JettyHttpServer httpServer;
private final String path;
- private final ContextHandler contextHandler;
+ private final ServletContextHandler contextHandler;
private final ContextAttributes attributes;
private final List<Filter> filters = new ArrayList<>();
this.httpServer = httpServer;
this.path = path;
+ // Jetty context handler
ServletContextHandler servletContextHandler = new ServletContextHandler();
servletContextHandler.setContextPath(path);
HttpContextServlet servlet = new HttpContextServlet(this);
servletContextHandler.addServlet(new ServletHolder(servlet), "/*");
+ SessionHandler sessionHandler = new SessionHandler();
+ // FIXME find a better default
+ sessionHandler.setMaxInactiveInterval(-1);
+ servletContextHandler.setSessionHandler(sessionHandler);
contextHandler = servletContextHandler;
attributes = new ContextAttributes();
Objects.requireNonNull(handler);
this.handler = handler;
+ // web socket
+ if (handler instanceof WebsocketEndpoints) {
+ JavaxWebSocketServletContainerInitializer.configure(contextHandler, new Configurator() {
+
+ @Override
+ public void accept(ServletContext servletContext, ServerContainer serverContainer)
+ throws DeploymentException {
+// CmsWebSocketConfigurator wsEndpointConfigurator = new CmsWebSocketConfigurator();
+
+ for (Class<?> clss : ((WebsocketEndpoints) handler).getEndPoints()) {
+// Class<?> clss = websocketEndpoints.get(path);
+// ServerEndpointConfig config = ServerEndpointConfig.Builder.create(clss, path)
+// .configurator(wsEndpointConfigurator).build();
+ serverContainer.addEndpoint(clss);
+ }
+ }
+ });
+ }
+
if (httpServer.isStarted())
try {
contextHandler.start();
return authenticator;
}
- public Handler getContextHandler() {
+ ServletContextHandler getContextHandler() {
return contextHandler;
}