package io.muoncore.examples;
import io.muoncore.Muon;
import io.muoncore.MuonBuilder;
import io.muoncore.config.AutoConfiguration;
import io.muoncore.config.MuonConfigBuilder;
import io.muoncore.protocol.event.Event;
import io.muoncore.protocol.event.client.DefaultEventClient;
import io.muoncore.protocol.event.client.EventClient;
import io.muoncore.protocol.event.client.EventReplayMode;
import io.muoncore.protocol.reactivestream.server.PublisherLookup;
import io.muoncore.protocol.requestresponse.server.HandlerPredicates;
import reactor.rx.broadcast.Broadcaster;
import java.io.IOException;
import java.net.URISyntaxException;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.util.Collections;
import java.util.Map;
import java.util.concurrent.ExecutionException;
public class ReplayEvent {
static int eventCount = 0;
public static void main(String[] args) throws URISyntaxException, InterruptedException, NoSuchAlgorithmException, KeyManagementException, IOException, ExecutionException {
AutoConfiguration config = MuonConfigBuilder
.withServiceIdentifier("awesomeservice")
.withTags("node", "awesome")
.build();
Muon muon = MuonBuilder.withConfig(config).build();
EventClient client = new DefaultEventClient(muon);
muon.getDiscovery().blockUntilReady();
long then = System.currentTimeMillis();
Broadcaster<Event> b = Broadcaster.create();
Broadcaster<Event> output = Broadcaster.create();
muon.publishSource("events", PublisherLookup.PublisherType.HOT, output);
muon.handleRequest(HandlerPredicates.all(), wrapper -> wrapper.ok(Collections.singletonMap("Event Count", eventCount)));
b.consume(mapEvent -> {
System.out.println(mapEvent);
eventCount++;
try {
output.accept(mapEvent);
} catch (Exception ex) {}
});
client.replay("hammer",
EventReplayMode.REPLAY_THEN_LIVE,
Collections.singletonMap("from", 1234),
b);
long now = System.currentTimeMillis();
System.out.println("Took " + (now - then) + "ms");
}
}