client.responded();
}
}
}
Message metaConnectReply = null;
// Do we need to wait for messages
if (transport != null) {
metaConnectReply = transport.getMetaConnectReply();
if (metaConnectReply != null) {
long timeout = client.getTimeout();
if (timeout == 0)
timeout = _bayeux.getTimeout();
//Continuation continuation=ContinuationSupport.getContinuation(request);
AtmosphereResource<HttpServletRequest, HttpServletResponse> continuation
= (AtmosphereResource) request.getAttribute(
AtmosphereServlet.ATMOSPHERE_RESOURCE);
// Get messages or wait
synchronized (client) {
if (!client.hasNonLazyMessages() && initial && received <= 1) {
// save state and suspend
request.setAttribute(CLIENT_ATTR, client);
request.setAttribute(TRANSPORT_ATTR, transport);
continuation.suspend(timeout, false);
client.setContinuation(continuation);
return;
}
}
client.setContinuation(null);
transport.setMetaConnectReply(null);
} else if (client != null) {
client.access();
}
}
if (client != null) {
if (metaConnectDeliveryOnly && !metaConnect) {
// wake up any long poll
client.resume();
} else {
List<Message> messages;
synchronized (client) {
client.doDeliverListeners();
ArrayQueue<Message> clientMessages = (ArrayQueue<Message>) client.getQueue();
// Copy the messages to avoid synchronization
messages = new ArrayList<Message>(clientMessages);
// Empty client's queue
clientMessages.clear();
}
final int size = messages.size();
for (int i = 0; i < size; i++) {
final Message message = messages.get(i);
final MessageImpl mesgImpl = (message instanceof MessageImpl) ? (MessageImpl) message : null;
// Can we short cut the message?
if (i == 0 && size == 1 && mesgImpl != null && _refsThreshold > 0 && metaConnectReply != null && transport instanceof JSONTransport) {
// is there a response already prepared