/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.core.communication.messaging.direct.api;
import de.rcenvironment.core.communication.model.NetworkRequest;
import de.rcenvironment.core.communication.model.NetworkResponse;
import de.rcenvironment.core.communication.model.NetworkResponseHandler;
import de.rcenvironment.core.communication.transport.spi.MessageChannel;
/**
* A service for sending single messages and receiving responses to/from a direct network neighbor.
*
* @author Robert Mischke
*/
public interface DirectMessagingSender {
/**
* Sends the given request into the given {@link MessageChannel}, using the default timeout. The response is returned via the provided
* {@link NetworkResponseHandler}.
*
* @param request the {@link NetworkRequest} to send
* @param channel the {@link MessageChannel} to send into
* @param responseHandler the response handler
*/
void sendDirectMessageAsync(NetworkRequest request, MessageChannel channel, NetworkResponseHandler responseHandler);
/**
* Sends the given request into the {@link MessageChannel} identified by the given id, using a custom timeout. The response is returned
* via the provided {@link NetworkResponseHandler}.
*
* @param request the {@link NetworkRequest} to send
* @param channel the {@link MessageChannel} to send into
* @param responseHandler the response handler
* @param timeoutMsec the timeout in msec
*/
void sendDirectMessageAsync(NetworkRequest request, MessageChannel channel, NetworkResponseHandler responseHandler, int timeoutMsec);
/**
* Sends the given request into the {@link MessageChannel} identified by the given id, using the default timeout. The response is
* returned via the provided {@link NetworkResponseHandler}.
*
* @param request the {@link NetworkRequest} to send
* @param channelId the id of the {@link MessageChannel} to send into
* @param responseHandler the response handler
*/
void sendDirectMessageAsync(NetworkRequest request, String channelId, NetworkResponseHandler responseHandler);
/**
* Convenience method that sends a request containing the given payload and metadata into the given {@link MessageChannel}, and returns
* the received response.
*
* @param request the {@link NetworkRequest} to send
* @param channel the connection to send to
* @param timeoutMsec the timeout in msec
* @return the associated {@link NetworkResponse}
*/
NetworkResponse sendDirectMessageBlocking(NetworkRequest request, MessageChannel channel, int timeoutMsec);
}