@Override public byte[] transformPayload(AtmosphereResponse response, byte[] responseDraft, byte[] data) throws IOException { String charEncoding = response.getCharacterEncoding() == null ? "UTF-8" : response.getCharacterEncoding(); String s = new String(responseDraft, charEncoding); // Ugly. if (s.equalsIgnoreCase("h") || s.equals("c") || (s.equals("o\n") && r.transport().equals(AtmosphereResource.TRANSPORT.WEBSOCKET))) { return s.getBytes(); } if (!s.isEmpty()) { try { if (transport.equals(JSONP)) { return ("a" + s).getBytes(charEncoding); } else if (transport.equals(HTMLFILE)) { StringBuilder sb = new StringBuilder(); sb.append("<script>\np(") .append("\"") .append(StringEscapeUtils.escapeJavaScript("a[\"" + StringEscapeUtils.escapeJavaScript(s) + "\"]\n")) .append("\")</script>\n"); return (sb.toString()).getBytes(charEncoding); } else { return ("a[\"" + StringEscapeUtils.escapeJavaScript(s) + "\"]\n").getBytes(charEncoding); } } catch (Exception e) { logger.error("", e); return "".getBytes(); } } return s.getBytes(); } });
if (request.getMethod() == "GET" && r.transport().equals(AtmosphereResource.TRANSPORT.LONG_POLLING)) { r.resumeOnBroadcast(true).suspend();
if (ar.transport().equals(AtmosphereResource.TRANSPORT.LONG_POLLING)) {
if (r.transport().equals(AtmosphereResource.TRANSPORT.WEBSOCKET)) { r.getRequest().setAttribute(X_WEBSOCKET_GWT, Boolean.TRUE);
@Override public AsyncIOWriter write(final AtmosphereResponse r, byte[] data, int offset, int length) throws IOException { logger.trace("Writing {} with transport {}", r.resource().uuid(), r.resource().transport()); boolean transform = filters.size() > 0 && r.getStatus() < 400; if (transform) { data = transform(r, data, offset, length); offset = 0; length = data.length; } pendingWrite.incrementAndGet(); if (!headerWritten) { out.setChunked(true); constructStatusAndHeaders(r, out); headerWritten = true; } String sdata = new String(data, offset, length, r.getCharacterEncoding()); out.write(sdata); lastWrite = System.currentTimeMillis(); AtmosphereResourceImpl impl = AtmosphereResourceImpl.class.cast(r.resource()); if (sdata.trim().length() > 0 && impl.transport().equals(AtmosphereResource.TRANSPORT.LONG_POLLING)) { close(r); } return this; }
private void initialize(final WicketTester wicketTester, Page page) { // remove any already installed AtmosphereBehaviors on the page List<AtmosphereBehavior> behaviors = page.getBehaviors(AtmosphereBehavior.class); page.remove(behaviors.toArray(new AtmosphereBehavior[behaviors.size()])); // install AtmosphereBehavior that doesn't use Meteor AtmosphereBehavior atmosphereBehavior = new TesterAtmosphereBehavior(wicketTester, eventBus); page.add(atmosphereBehavior); // start the page to collect all @Subscribe methods in the component hierarchy wicketTester.startPage(page); // pretend it is a websocket connection wicketTester.getRequest().setHeader(HeaderConfig.X_ATMOSPHERE_TRANSPORT, AtmosphereResource.TRANSPORT.WEBSOCKET.name()); // start the "upgrade" connection suspendedResponse = wicketTester.getResponse(); wicketTester.executeBehavior(atmosphereBehavior); }
@Override public Action inspect(final AtmosphereResource r) { AtmosphereRequest request = r.getRequest(); if (r.transport().equals(AtmosphereResource.TRANSPORT.WEBSOCKET)) { if (r.getRequest().getAttribute(FrameworkConfig.INJECTED_ATMOSPHERE_RESOURCE) != null) { return Action.CANCELLED; } } request.setAttribute(Continuation.ATTRIBUTE, new AtmosphereContinuation(r)); return Action.CONTINUE; }
private final Object getContextValue(AtmosphereRequest request, String name) { if (request.resource().transport().equals(AtmosphereResource.TRANSPORT.WEBSOCKET)) { return request.getAttribute(name); } else { return request.getSession().getAttribute(name); } }
private final void addContextValue(AtmosphereRequest request, String name, Object value) { if (request.resource().transport().equals(AtmosphereResource.TRANSPORT.WEBSOCKET)) { request.setAttribute(name, value); } else { request.getSession().setAttribute(name, value); } }
@Override public BroadcastAction filter(AtmosphereResource r, Object originalMessage, Object message) { String m = message.toString(); if (r.transport().equals(AtmosphereResource.TRANSPORT.LONG_POLLING)) { m += END_MESSAGE; } return new BroadcastAction(BroadcastAction.ACTION.CONTINUE, m); }