return Action.CANCELLED;
} else if (protocol != null && version == null) {
version = "0";
}
final Transport transport = transports.get(protocol + "-" + version);
if (transport != null) {
if (!SocketIOAtmosphereHandler.class.isAssignableFrom(atmosphereHandler.getClass())) {
response.asyncIOWriter(new AsyncIOWriterAdapter() {
@Override
public AsyncIOWriter write(AtmosphereResponse r, String data) throws IOException {
SocketIOSessionOutbound outbound = (SocketIOSessionOutbound)
request.getAttribute(SocketIOAtmosphereHandler.SOCKETIO_SESSION_OUTBOUND);
SocketIOSessionManagerImpl.SocketIOProtocol p = (SocketIOSessionManagerImpl.SocketIOProtocol)
r.request().getAttribute(SOCKETIO_PACKET);
String msg = p == null ? data : mapper.writeValueAsString(p.clearArgs().addArgs(data));
if (outbound != null) {
outbound.sendMessage(new SocketIOPacketImpl(SocketIOPacketImpl.PacketType.EVENT, msg));
} else {
r.getResponse().getOutputStream().write(msg.getBytes(r.getCharacterEncoding()));
}
return this;
}
@Override
public AsyncIOWriter write(AtmosphereResponse r, byte[] data) throws IOException {
SocketIOSessionManagerImpl.SocketIOProtocol p = (SocketIOSessionManagerImpl.SocketIOProtocol)
r.request().getAttribute(SOCKETIO_PACKET);
if (p == null) {
r.getResponse().getOutputStream().write(data);
} else {
write(r, new String(data, r.request().getCharacterEncoding()));
}
return this;
}
@Override
public AsyncIOWriter write(AtmosphereResponse r, byte[] data, int offset, int length) throws IOException {
SocketIOSessionManagerImpl.SocketIOProtocol p = (SocketIOSessionManagerImpl.SocketIOProtocol)
r.request().getAttribute(SOCKETIO_PACKET);
if (p == null) {
r.getResponse().getOutputStream().write(data, offset, length);
} else {
write(r, new String(data, offset, length, r.request().getCharacterEncoding()));
}
return this;
}
@Override
public AsyncIOWriter flush(AtmosphereResponse r) throws IOException {
try {
r.getResponse().getOutputStream().flush();
} catch (IllegalStateException ex) {
r.getResponse().getWriter().flush();
}
return this;
}
@Override
public AsyncIOWriter writeError(AtmosphereResponse r, int errorCode, String message) throws IOException {
((HttpServletResponse) r.getResponse()).sendError(errorCode, message);
return this;
}
});
}
transport.handle((AtmosphereResourceImpl) r, atmosphereHandler, getSessionManager(version));
} else {
logger.error("Protocol not supported : " + protocol);
}
} catch (Exception e) {
logger.error("", e);