public void connect(AtmosphereResourceImpl resource) throws IOException { AtmosphereRequest request = resource.getRequest(); AtmosphereResponse response = resource.getResponse(); request.setAttribute(SESSION_KEY, session); response.setBufferSize(bufferSize); customConnect(request, response); is_open = true; session.onConnect(resource, this); finishSend(response); if (isStreamingConnection) { resource.suspend(); } }
/** * 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); } }
private void configureTransport(AtmosphereResourceImpl r, String s, boolean hasSession) { if ("websocket".equals(s)) { r.transport(WEBSOCKET).addEventListener(new WebSocketTransport()); } else if ("xhr".equals(s) || "xdr".equals(s)) { r.transport(LONG_POLLING); if (!hasSession) { r.addEventListener(new LongPollingTransport()); } } else if ("xhr_streaming".equals(s)) { r.transport(STREAMING).addEventListener(new StreamingTransport()); } else if ("jsonp".equals(s)) { r.transport(JSONP); if (!hasSession) { r.addEventListener(new JSONPTransport()); } } else if ("eventsource".equals(s)) { r.transport(SSE).addEventListener(new SSETransport()); } else if (s.indexOf("_send") != -1) { r.transport(POLLING); } else if ("htmlfile".equals(s)) { r.transport(HTMLFILE).addEventListener(new HtmlFileTransport()); } else if (s.indexOf("_send") != -1) { } else { r.transport(UNDEFINED).addEventListener(new StreamingTransport()); } }
/** * {@inheritDoc} */ @Override public void action(AtmosphereResourceImpl actionEvent) { super.action(actionEvent); if (actionEvent.isInScope() && actionEvent.action().type() == Action.TYPE.RESUME) { try { RequestResponseKey rrk = (RequestResponseKey) actionEvent.getRequest().getSession().getAttribute(RRK); AbstractAsyncServlet.notify(rrk, null); } catch (IOException ex) { logger.debug("action failed", ex); } } }
if ("GET".equals(request.getMethod())) { synchronized (this) { if (!is_open) { response.sendError(AtmosphereResponse.SC_NOT_FOUND); } else { if (!isStreamingConnection) { if (resource != null) { resource.getRequest().setAttribute(SocketIOAtmosphereHandler.SOCKETIO_SESSION_ID, session.getSessionId()); resource.getRequest().setAttribute(SocketIOAtmosphereHandler.SOCKETIO_SESSION_OUTBOUND, session.getTransportHandler()); session.setAtmosphereResourceImpl(resource); resource.addEventListener(new AtmosphereResourceEventListenerAdapter() { @Override public void onResume(AtmosphereResourceEvent event) { if (DefaultBroadcaster.class.isAssignableFrom(resource.getBroadcaster().getClass())) { List<Object> cachedMessages = resource.getBroadcaster().getBroadcasterConfig().getBroadcasterCache() .retrieveFromCache(resource.getBroadcaster().getID(), resource.uuid()); resource.resume(); resource.disableSuspend(false); resource.suspend(session.getRequestSuspendTime()); resource.disableSuspend(true); resource.resume();
@Override public Action handle(AtmosphereResourceImpl resource, AtmosphereHandler atmosphereHandler, SocketIOSessionFactory sessionFactory) throws IOException { AtmosphereRequest request = resource.getRequest(); Object obj = request.getAttribute(SESSION_KEY); SocketIOSession session = null; String sessionId = null; if ("GET".equals(request.getMethod()) && "WebSocket".equalsIgnoreCase(request.getHeader("Upgrade"))) { session = sessionFactory.getSession(sessionId); resource.addEventListener(socketioEventListener); request.setAttribute(SocketIOAtmosphereHandler.SOCKETIO_SESSION_OUTBOUND, sessionWrapper); resource.suspend(-1, false);
@Override public Action handle(AtmosphereResourceImpl resource, AtmosphereHandler atmosphereHandler, SocketIOSessionFactory sessionFactory) throws IOException { AtmosphereRequest request = resource.getRequest(); AtmosphereResponse response = resource.getResponse(); Object obj = request.getAttribute(SESSION_KEY); SocketIOSession session = null; String sessionId = null; } else { handler.disconnect(); response.setStatus(200); response.sendError(AtmosphereResponse.SC_SERVICE_UNAVAILABLE); response.setStatus(200); response.sendError(AtmosphereResponse.SC_BAD_REQUEST); } else { if ("GET".equals(request.getMethod())) { session = connect(resource, atmosphereHandler, sessionFactory); if (session == null) {
AtmosphereRequest request = r.getRequest(false); Boolean resumeOnBroadcast = r.resumeOnBroadcast(); if (!resumeOnBroadcast) { Object o = request.getAttribute(ApplicationConfig.RESUME_ON_BROADCAST); if (o != null && Boolean.class.isAssignableFrom(o.getClass())) { resumeOnBroadcast = Boolean.class.cast(o); r.resumeOnBroadcast(false); request.setAttribute(ApplicationConfig.RESUME_ON_BROADCAST, false); RemoteEndpointImpl remoteEndpoint = (RemoteEndpointImpl) request.getAttribute(RemoteEndpointImpl.class.getName()); remoteEndpoint.status().status(event.isCancelled() ? Status.STATUS.UNEXPECTED_CLOSE : Status.STATUS.CLOSED_BY_CLIENT); request.removeAttribute(RemoteEndpointImpl.class.getName()); trackedUUID.remove(r.uuid()); if (resumeOnBroadcast && r.isSuspended()) { r.resume();
@Override public void onMessage(AtmosphereResourceImpl resource, SocketIOSessionOutbound outbound, String message) { startHeartbeatTimer(); if (atmosphereHandler != null && message != null) { try { synchronized (atmosphereHandler) { if (SocketIOAtmosphereHandler.class.isAssignableFrom(atmosphereHandler.getClass())) { SocketIOAtmosphereHandler.class.cast(atmosphereHandler).onMessage(resource, outbound, message); } else { SocketIOProtocol p = mapper.readValue(message, SocketIOProtocol.class); for (String msg : p.getArgs()) { AtmosphereRequest r = resource.getRequest(); r.setAttribute(SocketIOProtocol.class.getName(), p); r.body(msg).method("POST"); resource.disableSuspend(true); atmosphereHandler.onRequest(resource); } } } } catch (Throwable e) { logger.error("Session[" + sessionId + "]: Exception thrown by SocketIOInbound.onMessage()", e); } } }
@Override public void onRequest() { TesterBroadcaster broadcaster = (TesterBroadcaster) eventBus.getBroadcaster(); AtmosphereResource atmosphereResource = new AtmosphereResourceImpl(); AtmosphereRequest atmosphereRequest = AtmosphereRequest.wrap(wicketTester.getRequest()); AtmosphereResponse atmosphereResponse = AtmosphereResponse.wrap(wicketTester.getResponse()); TesterAsyncSupport asyncSupport = new TesterAsyncSupport(); atmosphereResource.initialize(broadcaster.getApplicationConfig(), broadcaster, atmosphereRequest, atmosphereResponse, asyncSupport, new AtmosphereHandlerAdapter()); atmosphereResource.setBroadcaster(broadcaster); broadcaster.addAtmosphereResource(atmosphereResource); String uuid = atmosphereResource.uuid(); Page page = getComponent().getPage(); page.setMetaData(ATMOSPHERE_UUID, uuid); eventBus.registerPage(uuid, page); } }
logger.trace("Session[" + session.getSessionId() + "]: " + resource.getRequest().getMethod() + "sendMessage"); writeData(resource.getResponse(), message); } catch (Exception e) { if (!resource.isCancelled()) { logger.trace("calling from " + this.getClass().getName() + " : " + "sendMessage ON FORCE UN RESUME"); try { finishSend(resource.getResponse()); } catch (IOException ex) { logger.trace("", ex); resource.resume(); finishSend(resource.getResponse()); } catch (IOException e) { logger.trace("", e); resource.resume(); } else { logger.trace("calling from " + this.getClass().getName() + " : " + "sendMessage");
@Override protected SocketIOSession connect(SocketIOSession session, AtmosphereResourceImpl resource, AtmosphereHandler atmosphereHandler, SocketIOSessionFactory sessionFactory) throws IOException { if (session == null) { session = sessionFactory.createSession(resource, atmosphereHandler); resource.getRequest().setAttribute(SocketIOAtmosphereHandler.SOCKETIO_SESSION_ID, session.getSessionId()); } XHRPollingSessionHelper handler = createHelper(session); handler.connect(resource); return session; }
framework.getAtmosphereConfig().startupHook(new AtmosphereConfig.StartupHook() { @Override public void started(AtmosphereFramework framework) { int max = framework.getAtmosphereConfig().getInitParameter(ApplicationConfig.WEBSOCKET_IDLETIME, -1); if (max != -1) { webSocketTimeout = max; proxiedRequest = new AtmosphereRequestImpl.Builder().build(); proxiedResponse = new AtmosphereResponseImpl.Builder().build(); proxiedResource = new AtmosphereResourceImpl(); } else { proxiedRequest = null;
resource.getRequest().setAttribute(SocketIOAtmosphereHandler.SOCKETIO_SESSION_ID, sessionId); resource.getRequest().setAttribute(SocketIOAtmosphereHandler.SOCKETIO_SESSION_OUTBOUND, handler); SocketIOAtmosphereHandler.class.cast(atmosphereHandler).onConnect(resource, handler); } else { resource.disableSuspend(true); atmosphereHandler.onRequest(resource);
@Override public void sendMessage(List<SocketIOPacketImpl> messages) throws SocketIOException { if (messages != null) { for (SocketIOPacketImpl msg : messages) { switch (msg.getFrameType()) { case MESSAGE: case JSON: case EVENT: case ACK: case ERROR: msg.setPadding(messages.size() > 1); try { sendMessage(msg.toString()); } catch (Exception e) { AtmosphereResourceImpl resource = session.getAtmosphereResourceImpl(); // if BroadcastCache is available, add the message to the cache if (resource != null && DefaultBroadcaster.class.isAssignableFrom(resource.getBroadcaster().getClass())) { resource.getBroadcaster().getBroadcasterConfig().getBroadcasterCache(). addToCache(resource.getBroadcaster().getID(), resource.uuid(), new BroadcastMessage(msg)); } } break; default: logger.error("Unknown SocketIOEvent msg = " + msg); } } } }
@Override public void abort() { logger.error("calling from " + this.getClass().getName() + " : " + "abort"); session.clearHeartbeatTimer(); session.clearTimeoutTimer(); is_open = false; session.onShutdown(); // force a resume session.getAtmosphereResourceImpl().resume(); }
@Override public void onStateChange(AtmosphereResourceEvent event) throws IOException { ensureInitialized(event.getResource()); AtmosphereResponse response = ((AtmosphereResourceImpl) event.getResource()).getResponse(false); if (event.getMessage() != null && List.class.isAssignableFrom(event.getMessage().getClass())) { List<String> messages = List.class.cast(event.getMessage()); for (String t : messages) { onMessage(event, response, t); } } else if (event.isClosedByApplication() || event.isClosedByClient() || event.isCancelled()) { onDisconnect(event, response); } else if (event.isSuspended()) { onMessage(event, response, (String) event.getMessage()); } else if (event.isResuming()) { onResume(event, response); } else if (event.isResumedOnTimeout()) { onTimeout(event, response); } }
@Override public void sendMessage(List<SocketIOPacketImpl> messages) throws SocketIOException { if (messages != null) { for (SocketIOPacketImpl msg : messages) { switch (msg.getFrameType()) { case MESSAGE: case JSON: case EVENT: case ACK: case ERROR: msg.setPadding(messages.size() > 1); try { sendMessage(msg.toString()); } catch (Exception e) { AtmosphereResourceImpl resource = session.getAtmosphereResourceImpl(); // if BroadcastCache is available, add the message to the cache if (resource != null && DefaultBroadcaster.class.isAssignableFrom(resource.getBroadcaster().getClass())) { DefaultBroadcaster.class.cast(resource.getBroadcaster()).getBroadcasterConfig().getBroadcasterCache() .addToCache(resource.getBroadcaster().getID(), resource, msg); } } break; default: logger.error("Unknown SocketIOEvent msg = " + msg); } } } }
if ("GET".equals(request.getMethod())) { synchronized (this) { if (!is_open) { response.sendError(AtmosphereResponse.SC_NOT_FOUND); } else { if (!isStreamingConnection) { if (resource != null) { resource.getRequest().setAttribute(SocketIOAtmosphereHandler.SOCKETIO_SESSION_ID, session.getSessionId()); resource.getRequest().setAttribute(SocketIOAtmosphereHandler.SOCKETIO_SESSION_OUTBOUND, session.getTransportHandler()); session.setAtmosphereResourceImpl(resource); resource.addEventListener(new AtmosphereResourceEventListenerAdapter() { @Override public void onResume(AtmosphereResourceEvent event) { if (DefaultBroadcaster.class.isAssignableFrom(resource.getBroadcaster().getClass())) { List<Object> cachedMessages = DefaultBroadcaster.class.cast(resource.getBroadcaster()) .getBroadcasterConfig().getBroadcasterCache() .retrieveFromCache(resource.getBroadcaster().getID(), resource); resource.resume(); resource.disableSuspend(false); resource.suspend(session.getRequestSuspendTime(), false); resource.disableSuspend(true); resource.resume();
@Override public Action handle(AtmosphereResourceImpl resource, AtmosphereHandler atmosphereHandler, SocketIOSessionFactory sessionFactory) throws IOException { AtmosphereRequest request = resource.getRequest(); Object obj = request.getAttribute(SESSION_KEY); SocketIOSession session = null; String sessionId = null; if ("GET".equals(request.getMethod()) && "WebSocket".equalsIgnoreCase(request.getHeader("Upgrade"))) { session = sessionFactory.getSession(sessionId); resource.addEventListener(socketioEventListener); request.setAttribute(SocketIOAtmosphereHandler.SOCKETIO_SESSION_OUTBOUND, sessionWrapper); resource.suspend(-1);