package com.simplicity.services.example.user;
import io.muoncore.Muon;
import io.muoncore.protocol.requestresponse.server.RequestWrapper;
import io.muoncore.spring.annotations.EnableMuon;
import io.muoncore.spring.annotations.MuonRequestListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import reactor.Environment;
import reactor.rx.broadcast.Broadcaster;
import javax.annotation.PostConstruct;
import static io.muoncore.protocol.reactivestream.server.PublisherLookup.PublisherType.HOT;
@SpringBootApplication
@EnableMuon(serviceName = "UserService")
@Configuration
@EnableScheduling
public class UserService {
@Autowired
private Muon muon;
private Broadcaster<String> tickTock = Broadcaster.create(Environment.initializeIfEmpty());
@PostConstruct
public void setupStreams() {
muon.publishSource("tickTock", HOT, tickTock);
}
@Scheduled(fixedRate = 5000l)
public void emitData() {
System.out.println("Sending data");
tickTock.accept("Hello " + System.currentTimeMillis());
}
@MuonRequestListener(path = "/")
public void doSomething(RequestWrapper wrapper) {
wrapper.ok("Hello there");
}
public static void main(String[] args) {
SpringApplication.run(UserService.class);
}
}