@Override
public void onStateChange(AtmosphereResourceEvent event) throws IOException {
AtmosphereResponse response = event.getResource().getResponse();
AtmosphereResource resource = event.getResource();
if (event.isSuspended()) {
// Set content type before do response.getWriter()
// http://docs.oracle.com/javaee/5/api/javax/servlet/ServletResponse.html#setContentType(java.lang.String)
response.setContentType("text/plain; charset=UTF-8");
response.setCharacterEncoding("UTF-8");
if (event.getMessage().getClass().isArray()) {
LOG.fine("SEND MESSAGE ARRAY " + event.getMessage().toString());
List<Object> list = Arrays.asList(event.getMessage());
response.getOutputStream().write(MSG_SEPARATOR.getBytes(MSG_CHARSET));
for (Object object : list) {
String message = (String) object;
message += MSG_SEPARATOR;
response.getOutputStream().write(message.getBytes(MSG_CHARSET));
}
} else if (event.getMessage() instanceof List) {
LOG.fine("SEND MESSAGE LIST " + event.getMessage().toString());
@SuppressWarnings("unchecked")
List<Object> list = List.class.cast(event.getMessage());
response.getOutputStream().write(MSG_SEPARATOR.getBytes(MSG_CHARSET));
for (Object object : list) {
String message = (String) object;
message += MSG_SEPARATOR;
response.getOutputStream().write(message.getBytes(MSG_CHARSET));
}
} else if (event.getMessage() instanceof String) {
LOG.fine("SEND MESSAGE " + event.getMessage().toString());
String message = (String) event.getMessage();
response.getOutputStream().write(message.getBytes(MSG_CHARSET));
}
try {
response.flushBuffer();
switch (resource.transport()) {
case JSONP:
case LONG_POLLING:
event.getResource().resume();
break;
case WEBSOCKET: