LOG.debug("This reverse connection is used permanently. Store it!");
storePeerConnection(message, peerConnection);
responder.response(createResponseMessage(message, Type.OK).keepAlive(true));
} else {
ConcurrentHashMap<Integer, FutureResponse> cachedRequests = peer.connectionBean().sender().cachedRequests();
final FutureResponse cachedRequest = cachedRequests.remove(message.intAt(0));
final Message cachedMessage = cachedRequest.request();
LOG.debug("This reverse connection is only used for sending a direct message {}", cachedMessage);
// send the message to the unreachable peer through the open channel
FutureResponse futureResponse = RelayUtils.send(peerConnection, peer.peerBean(), peer.connectionBean(), config,
cachedMessage);
futureResponse.addListener(new BaseFutureAdapter<FutureResponse>() {
@Override
public void operationComplete(final FutureResponse future) throws Exception {
if (future.isSuccess()) {
LOG.debug("Successfully transmitted request message {} to unreachablePeer {}", cachedMessage,
peerConnection.remotePeer());