package io.robe.websocket; import com.google.inject.Injector; import io.dropwizard.setup.Environment; import io.robe.guice.scanner.Scanner; import org.reflections.Reflections; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.Set; public class WebSocketScanner implements Scanner { private static final Logger LOGGER = LoggerFactory.getLogger(WebSocketScanner.class); @Override public void scanAndAdd(Environment environment, Injector injector, Reflections reflections) { Set<Class<?>> wsClasses = reflections.getTypesAnnotatedWith(RobeWebSocket.class); for (Class<?> ws : wsClasses) { RobeWebSocket ann = ws.getAnnotation(RobeWebSocket.class); String path = ann.path() + (ann.subPaths() ? "/*" : ""); path = path.charAt(0) != '/' ? path = "/" + path : path; environment.servlets().addServlet(ann.path(), new WebSocketServlet((Class<WebSocket>) ws)).addMapping(path); LOGGER.info("Added websocket: " + ws); } } }