RemoteCall.Caller caller = new CallerImpl(bayeuxServer, localSession, from, message.getId(), message.getChannel()); args[0] = caller; args[1] = message.getData();
@Override public void deQueue(ServerSession session, Queue<ServerMessage> queue, List<Mutable> replies) { Mutable reply = null; for (Mutable r : replies) { String channel = r.getChannel(); if (Channel.META_HANDSHAKE.equals(channel) || Channel.META_CONNECT.equals(channel)) { reply = r; break; } } if (reply != null) { long batch = _batches.remove(reply.getId()); synchronized (_session.getLock()) { if (_logger.isDebugEnabled()) { _logger.debug("Dequeuing {}/{} messages until batch {} for {} on {}", queue.size(), _queue.size(), batch, reply, _session); } queue.clear(); _queue.exportMessagesToBatch(queue, batch); } } }
private long closeBatch(Mutable message) { synchronized (_session.getLock()) { long batch = _queue.getBatch(); _batches.put(message.getId(), batch); _queue.nextBatch(); return batch; } }
private void doSend(ServerSessionImpl session, ServerMessage.Mutable message, Promise<ServerMessage.Mutable> promise) { String messageId = message.getId(); message.setClientId(session.getId()); extendOutgoing(message, Promise.from(result -> { // Extensions may have changed the messageId. message.setId(messageId); if (result) { _bayeux.handle(session, message, Promise.from(r -> _bayeux.extendReply(session, _session, r, Promise.from(reply -> { if (reply != null) { receive(reply, Promise.from(y -> promise.succeed(reply), promise::fail)); } else { promise.succeed(null); } }, promise::fail)), promise::fail)); } else { ServerMessage.Mutable reply = _bayeux.createReply(message); _bayeux.error(reply, "404::message_deleted"); receive(reply, Promise.from(y -> promise.succeed(reply), promise::fail)); } }, promise::fail)); }
protected ServerMessage.Mutable createReply(ServerMessage.Mutable message) { ServerMessageImpl reply = (ServerMessageImpl)newMessage(); message.setAssociated(reply); reply.setAssociated(message); reply.setServerTransport(message.getServerTransport()); reply.setBayeuxContext(message.getBayeuxContext()); reply.setChannel(message.getChannel()); String id = message.getId(); if (id != null) { reply.setId(id); } return reply; }
protected String validateMessage(Mutable message) { String channel = message.getChannel(); if (!validate(channel)) { return "405::invalid_channel"; } String id = message.getId(); if (id != null && !validate(id)) { return "405::invalid_id"; } return null; }