package io.muoncore.examples;
import io.muoncore.Muon;
import io.muoncore.MuonBuilder;
import io.muoncore.api.PromiseFunction;
import io.muoncore.config.AutoConfiguration;
import io.muoncore.config.MuonConfigBuilder;
import io.muoncore.protocol.event.ClientEvent;
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.event.client.EventResult;
import io.muoncore.protocol.reactivestream.client.StreamData;
import reactor.rx.broadcast.Broadcaster;
import java.io.IOException;
import java.net.URISyntaxException;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ExecutionException;
public class EmitEvent {
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();
muon.getDiscovery().blockUntilReady();
EventClient client = new DefaultEventClient(muon);
Map data = new HashMap<>();
data.put("hello", "world");
long then = System.currentTimeMillis();
long ratePerSecond = 20;
subscribe(client);
Thread.sleep(1000);
while(true) {
for (int i = 0; i < ratePerSecond; i++) {
client.<Map>eventAsync(
ClientEvent.ofType("SomethingHappened")
.schema("17")
.causedBy(123456789L, "Fully Qualified Bigness")
.stream("hammer").payload(data).build()
).then((PromiseFunction<EventResult>) arg -> System.out.println("Restul is " + arg.getStatus() + " " + arg.getCause()));
// System.out.println("Restul is " + res.getStatus() + " " + res.getCause());
// System.out.println("Restul is " + res.getEventTime() + " " + res.getOrderId());
}
System.out.println("Sleeping .... ");
Thread.sleep(1000);
}
}
static void subscribe(EventClient cl) {
Broadcaster<Event> v = Broadcaster.create();
v.consume(o -> {
System.out.println("Got data " + o);
});
cl.replay("hammer", EventReplayMode.LIVE_ONLY, v);
}
}