package io.muoncore.protocol.requestresponse.client;
import io.muoncore.api.ChannelFutureAdapter;
import io.muoncore.api.MuonFuture;
import io.muoncore.channel.Channel;
import io.muoncore.channel.ChannelConnection;
import io.muoncore.channel.Channels;
import io.muoncore.channel.support.SchedulerSource;
import io.muoncore.codec.CodecsSource;
import io.muoncore.exception.MuonException;
import io.muoncore.message.MuonInboundMessage;
import io.muoncore.message.MuonOutboundMessage;
import io.muoncore.protocol.ServiceConfigurationSource;
import io.muoncore.protocol.requestresponse.RRPTransformers;
import io.muoncore.protocol.requestresponse.Request;
import io.muoncore.protocol.requestresponse.Response;
import io.muoncore.transport.TransportClientSource;
import java.net.URI;
import java.net.URISyntaxException;
/**
* @deprecated in favour of {@link RpcClient}
*/
@Deprecated
public interface RequestResponseClientProtocolStack extends
TransportClientSource, CodecsSource, ServiceConfigurationSource, SchedulerSource {
@Deprecated
default MuonFuture<Response> request(String uri) {
return request(uri, new Object());
}
@Deprecated
default MuonFuture<Response> request(String uri, Object payload) {
try {
return request(new URI(uri), payload);
} catch (URISyntaxException e) {
throw new MuonException("URI Scheme is incorrect, must be scheme request:// for RPC requests");
}
}
@Deprecated
default MuonFuture<Response> request(URI uri, Object payload) {
if (!uri.getScheme().equals(RRPTransformers.REQUEST_RESPONSE_PROTOCOL) && !uri.getScheme().equals("request")) {
throw new MuonException("Scheme is invalid: " + uri.getScheme() + ", requires scheme: " + RRPTransformers.REQUEST_RESPONSE_PROTOCOL);
}
return request(new Request(uri, payload));
}
@Deprecated
default MuonFuture<Response> request(Request event) {
Channel<Request, Response> api2rrp = Channels.channel("rrpclientapi", "rrpclientproto");
ChannelFutureAdapter<Response, Request> adapter =
new ChannelFutureAdapter<>(api2rrp.left());
Channel<MuonOutboundMessage, MuonInboundMessage> timeoutChannel = Channels.timeout(getScheduler(), 10000);
ChannelConnection<MuonOutboundMessage, MuonInboundMessage> connection = getTransportClient().openClientChannel();
Channels.connect(timeoutChannel.right(), connection);
new RequestResponseClientProtocol(
getConfiguration().getServiceName(),
api2rrp.right(),
timeoutChannel.left(),
getCodecs(),
getScheduler());
return adapter.request(event);
}
}