private void extendIncoming(ServerSessionImpl session, ServerMessage.Mutable message, Promise<Boolean> promise) { AsyncFoldLeft.run(_extensions, true, (result, extension, loop) -> { if (result) { try { extension.incoming(session, message, Promise.from(r -> { if (_logger.isDebugEnabled()) { _logger.debug("Extension {}: result {} for incoming message {}", extension, r, message); } loop.proceed(r == null ? true : r); }, failure -> { _logger.info("Exception reported by extension " + extension, failure); loop.proceed(true); })); } catch (Throwable x) { _logger.info("Exception thrown by extension " + extension, x); loop.proceed(true); } } else { loop.leave(false); } }, promise); }
protected void extendOutgoing(ServerSession sender, ServerSession session, Mutable message, Promise<Boolean> promise) { List<Extension> extensions = new ArrayList<>(_extensions); Collections.reverse(extensions); AsyncFoldLeft.run(extensions, true, (result, extension, loop) -> { if (result) { try { extension.outgoing(sender, session, message, Promise.from(r -> loop.proceed(r == null ? true : r), failure -> { _logger.info("Exception reported by extension " + extension, failure); loop.proceed(true); })); } catch (Exception x) { _logger.info("Exception thrown by extension " + extension, x); loop.proceed(true); } } else { loop.leave(false); } }, promise); }
/** * <p>Callback method invoked every time a message is outgoing.</p> * * @param from the session that sent the message or null * @param to the session the message is sent to, or null for a publish. * @param message the outgoing message * @param promise the promise to notify whether message processing should continue */ default void outgoing(ServerSession from, ServerSession to, ServerMessage.Mutable message, Promise<Boolean> promise) { promise.succeed(message.isMeta() ? sendMeta(to, message) : send(from, to, message)); }
/** * <p>Callback method invoked every time a message is incoming.</p> * * @param from the session that sent the message * @param message the incoming message * @param promise the promise to notify whether message processing should continue */ default void incoming(ServerSession from, ServerMessage.Mutable message, Promise<Boolean> promise) { promise.succeed(message.isMeta() ? rcvMeta(from, message) : rcv(from, message)); }