73 lines
1.9 KiB
Java
73 lines
1.9 KiB
Java
package dev.peerat.backend.routes;
|
|
|
|
import dev.peerat.backend.Configuration;
|
|
import dev.peerat.backend.model.Group;
|
|
import dev.peerat.backend.model.PeerAtUser;
|
|
import dev.peerat.backend.repository.DatabaseGroupRepository;
|
|
import dev.peerat.backend.repository.DatabaseRepository;
|
|
import dev.peerat.framework.Context;
|
|
import dev.peerat.framework.HttpWriter;
|
|
import dev.peerat.framework.Injection;
|
|
import dev.peerat.framework.Locker;
|
|
import dev.peerat.framework.Locker.Key;
|
|
import dev.peerat.framework.Route;
|
|
|
|
public class EventSSE{
|
|
|
|
private Locker<GroupMessage> locker;
|
|
private DatabaseGroupRepository repo;
|
|
private int eventChapter;
|
|
|
|
public EventSSE(@Injection("groupMessages") Locker<GroupMessage> locker, DatabaseRepository repo, Configuration config){
|
|
this.locker = locker;
|
|
this.repo = repo.getGroupRepository();
|
|
this.eventChapter = config.getEventChapter();
|
|
}
|
|
|
|
@Route(path = "^/group/event/$", needLogin = true)
|
|
public void connect(Context context, HttpWriter writer) throws Exception {
|
|
Group group = repo.getPlayerGroup(context.<PeerAtUser>getUser().getId(), this.eventChapter);
|
|
if(group == null){
|
|
context.response(401);
|
|
return;
|
|
}
|
|
context.response(200, "Content-Type: text/event-stream");
|
|
|
|
Key key = new Key();
|
|
|
|
locker.init(key);
|
|
try {
|
|
while(true){
|
|
GroupMessage message = locker.getValue(key);
|
|
if(message.getGroup() == null || message.getGroup().equals(group.getName())){
|
|
writer.write("data: "+message.getMessage()+"\n\n");
|
|
writer.flush();
|
|
}
|
|
locker.lock(key);
|
|
}
|
|
}catch(Exception e){
|
|
e.printStackTrace();
|
|
}
|
|
locker.remove(key);
|
|
}
|
|
|
|
public static class GroupMessage{
|
|
|
|
private String group;
|
|
private String message;
|
|
|
|
public GroupMessage(String group, String message){
|
|
this.group = group;
|
|
this.message = message;
|
|
}
|
|
|
|
public String getGroup(){
|
|
return this.group;
|
|
}
|
|
|
|
public String getMessage(){
|
|
return this.message;
|
|
}
|
|
|
|
}
|
|
}
|