/** * Add an {@link WebSocketHandler} mapped to the path and the {@link AtmosphereHandler} in case {@link Broadcaster} are * used. * * @param path a path * @param handler a {@link WebSocketHandler} * @param h an {@link AtmosphereHandler} * @param l {@link AtmosphereInterceptor} * @return this */ public AtmosphereFramework addWebSocketHandler(String path, WebSocketHandler handler, AtmosphereHandler h, List<AtmosphereInterceptor> l) { WebSocketProcessorFactory.getDefault().getWebSocketProcessor(this) .registerWebSocketHandler(path, new WebSocketProcessor.WebSocketHandlerProxy(broadcasterFactory.lookup(path, true).getClass(), handler)); addAtmosphereHandler(path, h, l); return this; }
@Override public void handle(AtmosphereFramework framework, Class<WebSocketHandler> annotatedClass) { try { WebSocketHandlerService m = annotatedClass.getAnnotation(WebSocketHandlerService.class); atmosphereConfig(m.atmosphereConfig(), framework); framework.addAtmosphereHandler(m.path(), AtmosphereFramework.REFLECTOR_ATMOSPHEREHANDLER).initWebSocket(); framework.setDefaultBroadcasterClassName(m.broadcaster().getName()); filters(m.broadcastFilters(), framework); final LinkedList<AtmosphereInterceptor> l = new LinkedList<AtmosphereInterceptor>(); AtmosphereInterceptor aa = listeners(m.listeners(), framework); if (aa != null) { l.add(aa); } AnnotationUtil.interceptorsForHandler(framework, Arrays.asList(m.interceptors()), l); framework.setBroadcasterCacheClassName(m.broadcasterCache().getName()); WebSocketProcessor p = WebSocketProcessorFactory.getDefault().getWebSocketProcessor(framework); framework.addAtmosphereHandler(m.path(), REFLECTOR_ATMOSPHEREHANDLER, l); p.registerWebSocketHandler(m.path(), new WebSocketProcessor.WebSocketHandlerProxy(broadcasterClass(framework, m.broadcaster()), framework.newClassInstance(WebSocketHandler.class, annotatedClass))); } catch (Throwable e) { logger.warn("", e); } }