У меня есть небольшое приложение, в котором определена @ServerEndpoint (для веб-сокетов).
Теперь я хотел бы внедрить бизнес-объект, который выполняет некоторую логику, чтобы я мог с ним работать.
Здесь я создаю сервер причала и говорю ему использовать мой EventSocket.class, который содержит @ServerEndpoint("/").
Код: Выделить всё
public JettyServer(Application application) {
this.application = application;
this.server = new Server(8080);
EventSocket.application = application; //so nasty, need to figure out how to inject correctly in constructor
ServletContextHandler servletContextHandler = new ServletContextHandler(ServletContextHandler.SESSIONS);
servletContextHandler.setContextPath("/");
server.setHandler(servletContextHandler);
// Add jakarta.websocket support
JakartaWebSocketServletContainerInitializer.configure(servletContextHandler, (context, container) ->
{
container.addEndpoint(EventSocket.class);
});
// Add default servlet (to serve the html/css/js)
// Figure out where the static files are stored.
URL urlStatics = Thread.currentThread().getContextClassLoader().getResource("index.html");
Objects.requireNonNull(urlStatics, "Unable to find index.html in classpath");
String urlBase = urlStatics.toExternalForm().replaceFirst("/[^/]*$", "/");
ServletHolder defHolder = new ServletHolder("default", new DefaultServlet());
defHolder.setInitParameter("resourceBase", urlBase);
defHolder.setInitParameter("dirAllowed", "true");
servletContextHandler.addServlet(defHolder, "/");
}
The part where i need this listener in EventSocket:
Код: Выделить всё
@OnMessage
public void onMessage(String message) {
System.out.println(message);
String command = message.split(":")[0];
switch (command) {
case "x": listener.gotCalledWith(message); break;
}
Источник: https://stackoverflow.com/questions/781 ... nnotations