/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.core.communication.rpc.api;
import de.rcenvironment.core.communication.common.CommunicationException;
import de.rcenvironment.core.communication.rpc.ServiceCallRequest;
import de.rcenvironment.core.communication.rpc.ServiceCallResult;
/**
* Service for performing remote {@link ServiceCallRequest}s, and returning the received {@link ServiceCallResult}s.
*
* Note that despite its name, this is not a "remote service" in the usual RCE terminology, but part of the infrastructure that performs
* remote service calls.
*
* @author Robert Mischke
*/
public interface RemoteServiceCallSenderService {
/**
* Performs a remote service call and returns the received {@link ServiceCallResult}. The destination node is read from the provided
* {@link ServiceCallRequest}.
*
* @param serviceCallRequest the call request
* @return the call result
* @throws CommunicationException on failure
*/
ServiceCallResult performRemoteServiceCall(ServiceCallRequest serviceCallRequest) throws CommunicationException;
/**
* Performs a remote service call, parses the received {@link ServiceCallResult} and acts in place of the invoked method. If the method
* completed normally, the (null or non-null) return value is returned, if there was an error, the respective Exception is thrown. The
* destination node is read from the provided {@link ServiceCallRequest}.
*
* @param serviceCallRequest the call request
* @return the method return value on success (may be null)
* @throws Throwable a {@link RemoteOperationException} or a checked method exception on failure
*/
Object performRemoteServiceCallAsProxy(ServiceCallRequest serviceCallRequest) throws Throwable;
}