@Override public void onRequest(AtmosphereResource resource) { if (pushHandler == null) { getLogger().warning( "AtmosphereHandler.onRequest called before PushHandler has been set. This should really not happen"); return; } AtmosphereRequest req = resource.getRequest(); if (req.getMethod().equalsIgnoreCase("GET")) { onConnect(resource); } else if (req.getMethod().equalsIgnoreCase("POST")) { onMessage(resource); } }
/** * Tries to send a critical notification to the client and close the * connection. Does nothing if the connection is already closed. */ private static void sendNotificationAndDisconnect( AtmosphereResource resource, String notificationJson) { // TODO Implemented differently from sendRefreshAndDisconnect try { if (resource instanceof AtmosphereResourceImpl && !((AtmosphereResourceImpl) resource).isInScope()) { // The resource is no longer valid so we should not write // anything to it getLogger().fine( "sendNotificationAndDisconnect called for resource no longer in scope"); return; } resource.getResponse() .setContentType(JsonConstants.JSON_CONTENT_TYPE); resource.getResponse().getWriter().write(notificationJson); resource.resume(); } catch (Exception e) { getLogger().log(Level.FINEST, "Failed to send critical notification to client", e); } }
/** * Called when the client sends the first request (to establish a push * connection) * * @param resource */ private void onConnect(AtmosphereResource resource) { resource.addEventListener(new AtmosphereResourceListener()); pushHandler.onConnect(resource); }
@Override public Action inspect(final AtmosphereResource r) { LOG.log(Level.FINE, "inspect"); if (AtmosphereResource.TRANSPORT.WEBSOCKET != r.transport() && AtmosphereResource.TRANSPORT.SSE != r.transport() && AtmosphereResource.TRANSPORT.POLLING != r.transport()) { LOG.fine("Skipping ignorable request"); return Action.CONTINUE; if (AtmosphereResource.TRANSPORT.POLLING == r.transport()) { final String saruuid = (String)r.getRequest() .getAttribute(ApplicationConfig.SUSPENDED_ATMOSPHERE_RESOURCE_UUID); final AtmosphereResponse suspendedResponse = suspendedResponses.get(saruuid); LOG.fine("Attaching a proxy writer to suspended response"); r.getResponse().asyncIOWriter(new AtmosphereInterceptorWriter() { @Override public AsyncIOWriter write(AtmosphereResponse r, String data) throws IOException { r.getResponse().destroyable(false); return Action.CONTINUE; r.addEventListener(new AtmosphereResourceEventListenerAdapter() { @Override public void onSuspend(AtmosphereResourceEvent event) { AtmosphereRequest request = r.getRequest(); AtmosphereFramework framework = r.getAtmosphereConfig().framework(); try { byte[] data = WebSocketUtils.readBody(request.getInputStream());
@Override public Action inspect(final AtmosphereResource r) { final AtmosphereRequest request = r.getRequest(); r.addEventListener(new AtmosphereResourceEventListenerAdapter() { if (request.getHeader("SwaggerSocket") != null) { ok = true; if (ok && request.attributes().get(SWAGGER_SOCKET_DISPATCHED) == null) { AtmosphereResponse response = new WrappedAtmosphereResponse(r.getResponse(), request); logger.debug("Method {} Transport {}", request.getMethod(), r.transport()); if (request.getMethod() == "GET" && r.transport().equals(AtmosphereResource.TRANSPORT.LONG_POLLING)) { r.resumeOnBroadcast(true).suspend(); AtmosphereFramework framework = r.getAtmosphereConfig().framework(); StringBuilder d = new StringBuilder(); try { response.setContentType("application/json"); response.getOutputStream().write(mapper.writeValueAsBytes(statusMessage)); if (r.transport() == AtmosphereResource.TRANSPORT.WEBSOCKET) { schedule(r, identity); request.setAttribute("swaggerSocketRequest", req);
@Override public Action inspect(AtmosphereResource r) { final AtmosphereRequest request = r.getRequest(); if (request.getHeader("SwaggerSocket") != null && request.getAttribute(SWAGGER_SOCKET_DISPATCHED) == null && r.transport() != AtmosphereResource.TRANSPORT.WEBSOCKET) { AtmosphereResponse response = r.getResponse(); response.setContentType("application/json"); if (request.getMethod() == "GET") { BlockingQueue<AtmosphereResource> queue = (BlockingQueue<AtmosphereResource>) request.getSession().getAttribute("PendingResource"); if (queue == null) { r.suspend(); return Action.SUSPEND; AtmosphereFramework framework = r.getAtmosphereConfig().framework(); response.asyncIOWriter(new AsyncIOWriterAdapter() { response.getOutputStream().write(mapper.writeValueAsBytes(statusMessage)); ar.setAttribute(SWAGGER_SOCKET_DISPATCHED, "true"); framework.doCometSupport(ar, response.request(ar).destroyable(false)); } catch (ServletException e) { logger.warn("", e);
public final static void broadcast(final AtmosphereResource r, final AtmosphereResourceEvent e, final Broadcaster broadcaster) { AtmosphereRequest request = r.getRequest(); ContainerResponse cr = null; cr = (ContainerResponse) request.getAttribute(FrameworkConfig.CONTAINER_RESPONSE); if (cr == null || !r.isSuspended() && !r.getAtmosphereResourceEvent().isResumedOnTimeout()) { if (cr == null) { logger.warn("Unexpected state. ContainerResponse has been resumed. Caching message {} for {}", e.getMessage(), r.uuid()); } else { logger.warn("The AtmosphereResource {} hasn't been suspended yet.", r.uuid(), e); DefaultBroadcaster.class.cast(broadcaster).cacheLostMessage(r, true); AtmosphereResourceImpl.class.cast(r)._destroy(); return; m = r.getAtmosphereConfig().getInitParameter(ApplicationConfig.SSE_CONTENT_TYPE); if (m == null) { m = "text/plain"; logger.trace("Unexpected exception for AtmosphereResource {} and Broadcaster {}", r.uuid(), broadcaster.getID()); if (isJetty(r)) { for (StackTraceElement element : t.getStackTrace()) { r.getRequest().setAttribute(FrameworkConfig.CONTAINER_RESPONSE, null); r.resume();
public void onSuspend(final AtmosphereResourceEvent event) { logger.info("onSuspend(): {}:{}", event.getResource().getRequest().getRemoteAddr(), event.getResource().getRequest().getRemotePort()); }
static void writeResponse(AtmosphereResource resource, Object message) throws IOException { try { RPCRequest rpcRequest = (RPCRequest) resource.getRequest().getAttribute(AtmospherePollService.GWT_REQUEST); String response = encodeResponse(rpcRequest, message); writeResponse(resource.getRequest(), resource.getResponse(), resource.getAtmosphereConfig().getServletContext(), response); } catch (IncompatibleRemoteServiceException ex) { try { String error = RPC.encodeResponseForFailure(null, ex); writeResponse(resource.getRequest(), resource.getResponse(), resource.getAtmosphereConfig().getServletContext(), error); } catch (SerializationException ex2) { throw new IOException(ex2); } } catch (SerializationException ex) { throw new IOException(ex); } }
@Override public void onStateChange(AtmosphereResourceEvent event) throws IOException { if (event.getMessage() == null || event.isCancelled() || event.isResuming() || event.isResumedOnTimeout()) { return; } AtmosphereResource resource = event.getResource(); AtmosphereRequest req = resource.getRequest(); AtmosphereResponse res = resource.getResponse(); PrintWriter writer = res.getWriter(); writer.print((String) event.getMessage()); writer.flush(); if (req.getParameter("transport").startsWith("longpoll")) { req.setAttribute("used", true); resource.resume(); } }
@Override public void onSuspend(AtmosphereResourceEvent event) { final String srid = (String)event.getResource().getRequest() .getAttribute(ApplicationConfig.SUSPENDED_ATMOSPHERE_RESOURCE_UUID); LOG.log(Level.FINE, "Registrering suspended resource: {}", srid); suspendedResponses.put(srid, event.getResource().getResponse()); AsyncIOWriter writer = event.getResource().getResponse().getAsyncIOWriter(); if (writer instanceof AtmosphereInterceptorWriter) { ((AtmosphereInterceptorWriter)writer).interceptor(interceptor); } }
getLogger().log(Level.FINER, "New push connection for resource {0} with transport {1}", new Object[] { resource.uuid(), resource.transport() }); resource.getResponse().setContentType("text/plain; charset=UTF-8"); if (resource.transport() == TRANSPORT.STREAMING) { resource.getResponse().addHeader("Connection", "close"); String requestToken = resource.getRequest() .getParameter(ApplicationConstants.CSRF_TOKEN_PARAMETER); if (!VaadinService.isCsrfTokenValid(session, requestToken)) { getLogger().log(Level.WARNING, "Invalid CSRF token in new connection received from {0}", resource.getRequest().getRemoteHost());
@Override public void onRequest(AtmosphereResource resource) throws IOException { AtmosphereRequest req = resource.getRequest(); AtmosphereResponse res = resource.getResponse(); req.setCharacterEncoding("utf-8"); res.setCharacterEncoding("utf-8"); for (Entry<String, String> entry : AbstractSocketFactory.noCacheHeader().entrySet()) { res.setHeader(entry.getKey(), entry.getValue()); } for (Entry<String, String> entry : AbstractSocketFactory.corsHeader(req.getHeader("Origin")).entrySet()) { res.setHeader(entry.getKey(), entry.getValue()); } if (req.getMethod().equalsIgnoreCase("GET")) { String when = req.getParameter("when"); if (when.equals("open") || when.equals("poll")) { socketFactory.open(resource); } else if (when.equals("abort")) { socketFactory.abort(req.getParameter("id")); } } else if (req.getMethod().equalsIgnoreCase("POST")) { String raw = read(req.getReader()); socketFactory.fire(raw.startsWith("data=") ? raw.substring("data=".length()) : raw); } }
@Override public void resume() { try { r.getAtmosphereConfig().framework().doCometSupport(r.getRequest(), r.getResponse()); } catch (IOException e) { logger.warn("",e); } catch (ServletException e) { logger.warn("", e); } r.resume(); }
@Override public void onPreSuspend(AtmosphereResourceEvent event) { AtmosphereResponse response = event.getResource().getResponse(); AtmosphereRequest request = event.getResource().getRequest(); String callback = request.getParameter("c"); // TODO: Configurable response.setContentType("text/html; charset=UTF-8"); response.write(IFrameUtils.generateHtmlFile(callback)).write(padding); try { response.write(("<script>\n" + "p(\"o\")" + "\n</script>\n").getBytes()).flushBuffer(); } catch (IOException e) { logger.trace("", e); } }
@Override public void onDisconnect(AtmosphereResourceEvent event) { super.onDisconnect(event); final String srid = (String)event.getResource().getRequest() .getAttribute(ApplicationConfig.SUSPENDED_ATMOSPHERE_RESOURCE_UUID); LOG.log(Level.FINE, "Unregistrering suspended resource: {}", srid); suspendedResponses.remove(srid); }
@Override public void onResume(AtmosphereResourceEvent event) { if (event.isResuming()) { listener.onComplete(AtmosphereContinuation.this); } else { try { r.getAtmosphereConfig().framework().doCometSupport(r.getRequest(), r.getResponse()); } catch (IOException e) { logger.warn("", e); } catch (ServletException e) { logger.warn("", e); } listener.onTimeout(AtmosphereContinuation.this); } } });
@Override public void onRequest(final AtmosphereResource resource) throws IOException { LOG.fine("onRequest"); try { invokeInternal(null, resource.getRequest().getServletContext(), resource.getRequest(), resource.getResponse()); } catch (Exception e) { LOG.log(Level.WARNING, "Failed to invoke service", e); } } }
AtmosphereResource resource = event.getResource(); resource.getRequest(), service); VaadinSession session = null; AtmospherePushConnection pushConnection = getConnectionForUI(ui); String id = resource.uuid(); new Object[] { id, resource.transport() }); } else { if (!pushMode.isEnabled()) { new Object[] { id, resource.transport() });