package io.muoncore.example.event;
import io.muoncore.Muon;
import io.muoncore.MuonBuilder;
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 reactor.rx.broadcast.Broadcaster;
import java.util.HashSet;
import java.util.Set;
public class EventClientExample {
public static void main(String[] args) {
AutoConfiguration config = MuonConfigBuilder.withServiceIdentifier("client").build();
Muon muon = MuonBuilder.withConfig(config).build();
muon.getDiscovery().blockUntilReady();
// tag::createclient[]
EventClient evclient = new DefaultEventClient(muon);
// end::createclient[]
// tag::replay[]
Broadcaster<Event> sub = Broadcaster.create();
sub.consume( msg -> {
// println "EVENT = ${it}"
});
evclient.replay("users", EventReplayMode.REPLAY_THEN_LIVE, sub);
// end::replay[]
// tag::emitevent[]
evclient.event(
ClientEvent.ofType("UserRegistered")
.payload(new UserRegistered("Roger", "Rabbit"))
.stream("users")
.build());
// end::emitevent[]
// tag::eventsource[]
Set<String> userList = new HashSet<>();
Broadcaster<Event> eventsourceSubscriber = Broadcaster.create();
eventsourceSubscriber.consume( event -> {
System.out.printf("User was registered %s %s", event.getPayload(UserRegistered.class).getFirstname(), event.getPayload(UserRegistered.class).getLastname());
userList.add(event.getPayload(UserRegistered.class).getFirstname() + " " + event.getPayload(UserRegistered.class).getLastname());
});
evclient.replay("users", EventReplayMode.REPLAY_THEN_LIVE, eventsourceSubscriber);
// end::eventsource[]
}
static class UserRegistered {
private String firstname;
private String lastname;
public UserRegistered(String firstname, String lastname) {
this.firstname = firstname;
this.lastname = lastname;
}
public String getFirstname() {
return firstname;
}
public String getLastname() {
return lastname;
}
}
}