@Override public WebSocketProcessor registerWebSocketHandler(String path, WebSocketHandlerProxy webSockethandler) { handlers.put(path, webSockethandler.path(path)); return this; }
private static final Object injectWith(AtmosphereResource r) { // Check for null when disconnect happens. This happens when websocket are closed by both the client and the server // concurrently. if (r == null) { return null; } AtmosphereHandler h = r.getAtmosphereHandler(); if (r.getAtmosphereHandler() == null) { return null; } if (AtmosphereFramework.REFLECTOR_ATMOSPHEREHANDLER.getClass().isAssignableFrom(h.getClass())) { if (AtmosphereResourceImpl.class.cast(r).webSocket() == null || AtmosphereResourceImpl.class.cast(r).webSocket().webSocketHandler() == null) { return null; } return WebSocketProcessor.WebSocketHandlerProxy.class.cast(AtmosphereResourceImpl.class.cast(r).webSocket().webSocketHandler()).proxied(); } else { return injectWith(h); } }
try { if (String.class.isAssignableFrom(webSocketMessageAsBody.getClass())) { webSocketHandler.onTextMessage(webSocket, String.class.cast(webSocketMessageAsBody)); } else if (Reader.class.isAssignableFrom(webSocketMessageAsBody.getClass())) { WebSocketStreamingHandler.class.cast(webSocketHandler.proxied).onTextStream(webSocket, Reader.class.cast(webSocketMessageAsBody)); } else if (InputStream.class.isAssignableFrom(webSocketMessageAsBody.getClass())) { WebSocketStreamingHandler.class.cast(webSocketHandler.proxied()).onBinaryStream(webSocket, InputStream.class.cast(webSocketMessageAsBody)); } else { webSocketHandler.onByteMessage(webSocket, (byte[]) webSocketMessageAsBody, offset, length);
protected WebSocketHandler postProcessMapping(WebSocket webSocket, AtmosphereRequest request, WebSocketHandlerProxy w) { WebSocketHandlerProxy p = null; String path = w.path(); if (wildcardMapping()) { String pathInfo = null; w = new WebSocketHandlerProxy(a.broadcaster(), framework.newClassInstance(WebSocketHandler.class, w.proxied.getClass())); registerWebSocketHandler(path, new WebSocketHandlerProxy(a.broadcaster(), w)); request.localAttributes().put(Named.class.getName(), path.substring(targetPath.indexOf("{")));
if (!WebSocketStreamingHandler.class.isAssignableFrom(webSocketHandler.proxied().getClass())) { try { if (invokeInterceptors) { invokeInterceptors(webSocketHandler, webSocket, webSocketMessage); } else { webSocketHandler.onTextMessage(webSocket, webSocketMessage);
@Override public void invokeWebSocketProtocol(WebSocket webSocket, Reader reader) { WebSocketHandlerProxy webSocketHandler = webSocketHandlerForMessage(webSocket); try { if (webSocketHandler == null) { if (WebSocketProtocolStream.class.isAssignableFrom(webSocketProtocol.getClass())) { List<AtmosphereRequest> list = WebSocketProtocolStream.class.cast(webSocketProtocol).onTextStream(webSocket, reader); dispatch(webSocket, list); } else { dispatchReader(webSocket, reader); return; } } else { if (WebSocketStreamingHandler.class.isAssignableFrom(webSocketHandler.proxied().getClass())) { if (invokeInterceptors) { invokeInterceptors(webSocketHandler, webSocket, reader); } else { WebSocketStreamingHandler.class.cast(webSocketHandler.proxied()).onTextStream(webSocket, reader); } } else { dispatchReader(webSocket, reader); return; } } } catch (Exception ex) { handleException(ex, webSocket, webSocketHandler); } notifyListener(webSocket, new WebSocketEventListener.WebSocketEvent<Reader>(reader, MESSAGE, webSocket)); }
if (!WebSocketStreamingHandler.class.isAssignableFrom(webSocketHandler.proxied().getClass())) { try { if (invokeInterceptors) { invokeInterceptors(webSocketHandler, webSocket, data, offset, length); } else { webSocketHandler.onByteMessage(webSocket, data, offset, length);
@Override public void invokeWebSocketProtocol(WebSocket webSocket, InputStream stream) { WebSocketHandlerProxy webSocketHandler = webSocketHandlerForMessage(webSocket); try { if (webSocketHandler == null) { if (WebSocketProtocolStream.class.isAssignableFrom(webSocketProtocol.getClass())) { List<AtmosphereRequest> list = WebSocketProtocolStream.class.cast(webSocketProtocol).onBinaryStream(webSocket, stream); dispatch(webSocket, list); } else { dispatchStream(webSocket, stream); return; } } else { if (WebSocketStreamingHandler.class.isAssignableFrom(webSocketHandler.proxied.getClass())) { if (invokeInterceptors) { invokeInterceptors(webSocketHandler, webSocket, stream); } else { WebSocketStreamingHandler.class.cast(webSocketHandler.proxied()).onBinaryStream(webSocket, stream); } } else { dispatchStream(webSocket, stream); return; } } } catch (Exception ex) { handleException(ex, webSocket, webSocketHandler); } notifyListener(webSocket, new WebSocketEventListener.WebSocketEvent<InputStream>(stream, MESSAGE, webSocket)); }
@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); } }
/** * 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 onPing(WebSocket webSocket, byte[] payload, int offset, int length) { WebSocketHandlerProxy webSocketHandler = webSocketHandlerForMessage(webSocket); if (webSocketHandler != null && WebSocketPingPongListener.class.isAssignableFrom(webSocketHandler.proxied().getClass())) { WebSocketPingPongListener.class.cast(webSocketHandler.proxied()).onPing(webSocket, payload, offset, length); } } }
@Override public void onPong(WebSocket webSocket, byte[] payload, int offset, int length) { WebSocketHandlerProxy webSocketHandler = webSocketHandlerForMessage(webSocket); if (webSocketHandler != null && WebSocketPingPongListener.class.isAssignableFrom(webSocketHandler.proxied().getClass())) { WebSocketPingPongListener.class.cast(webSocketHandler.proxied()).onPong(webSocket, payload, offset, length); } }