package io.muoncore.example;
import io.muoncore.Muon;
import io.muoncore.message.MuonMessage;
import io.muoncore.protocol.requestresponse.RRPEvents;
import reactor.rx.broadcast.Broadcaster;
import java.io.UnsupportedEncodingException;
import java.net.URISyntaxException;
import java.util.HashSet;
import java.util.Set;
import java.util.concurrent.ExecutionException;
import static io.muoncore.protocol.requestresponse.server.HandlerPredicates.all;
public class Wiretap {
public void exec(Muon muon) throws ExecutionException, InterruptedException, URISyntaxException, UnsupportedEncodingException {
// tag::setupRPC[]
Broadcaster<String> publisher = Broadcaster.create();
muon.handleRequest(all(), request -> {
request.ok(42);
});
// end::setupRPC[]
// tag::wiretap[]
Set<String> remoteServices = new HashSet<>(); // <1>
Broadcaster<MuonMessage> requests = Broadcaster.create();
requests.consume(msg -> {
remoteServices.add(msg.getSourceServiceName()); //<2>
});
muon.getTransportControl().tap( //<3>
msg -> msg.getStep().equals(RRPEvents.REQUEST)).subscribe(requests); //<4>
// end::wiretap[]
// tag::wiretap2[]
Broadcaster<MuonMessage> responses = Broadcaster.create();
responses.consume(msg -> {
System.out.println("Sent a response to " + msg.getTargetServiceName());
});
muon.getTransportControl().tap(
msg -> msg.getStep().equals(RRPEvents.RESPONSE)).subscribe(responses);
// end::wiretap2[]
// tag::fireRPC[]
int value = muon.request("request://myservice/").get().getPayload(Integer.class);
// end::fireRPC[]
}
}