-
Tom Käsler authored
move ws handler to websocket package
9cec4caa
Forked from
ARSnova / ARSnova Backend
232 commits behind the upstream repository.
FeedbackCommandHandler.java 2.68 KiB
package de.thm.arsnova.websocket.handler;
import de.thm.arsnova.websocket.message.CreateFeedback;
import de.thm.arsnova.websocket.message.FeedbackChanged;
import de.thm.arsnova.websocket.message.FeedbackChangedPayload;
import de.thm.arsnova.websocket.message.GetFeedback;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.messaging.simp.SimpMessagingTemplate;
import org.springframework.stereotype.Component;
import java.util.HashMap;
@Component
public class FeedbackCommandHandler {
HashMap<String, int[]> roomValues = new HashMap<>();
private final SimpMessagingTemplate messagingTemplate;
@Autowired
public FeedbackCommandHandler(SimpMessagingTemplate messagingTemplate) {
this.messagingTemplate = messagingTemplate;
}
synchronized private int[] updateFeedbackForRoom(String roomId, int index) {
int[] values = roomValues.getOrDefault(roomId, new int[4]);
values[index]++;
roomValues.put(roomId, values);
return values;
}
public void handle(CreateFeedbackCommand command) {
int updatedIndex = command.getPayload().getPayload().getValue();
int[] newVals = updateFeedbackForRoom(command.getRoomId(), updatedIndex);
FeedbackChanged feedbackChanged = new FeedbackChanged();
FeedbackChangedPayload feedbackChangedPayload = new FeedbackChangedPayload();
feedbackChangedPayload.setValues(newVals);
feedbackChanged.setPayload(feedbackChangedPayload);
messagingTemplate.convertAndSend(
"/room/" + command.getRoomId() + "/feedback.stream",
feedbackChanged
);
}
public void handle(GetFeedbackCommand command) {
int[] currentVals = roomValues.getOrDefault(command.getRoomId(), new int[4]);
FeedbackChanged feedbackChanged = new FeedbackChanged();
FeedbackChangedPayload feedbackChangedPayload = new FeedbackChangedPayload();
feedbackChangedPayload.setValues(currentVals);
feedbackChanged.setPayload(feedbackChangedPayload);
messagingTemplate.convertAndSend(
"/room/" + command.getRoomId() + "/feedback.stream",
feedbackChanged
);
}
public static class CreateFeedbackCommand {
private String roomId;
private CreateFeedback payload;
public CreateFeedbackCommand(String roomId, CreateFeedback payload) {
this.roomId = roomId;
this.payload = payload;
}
public CreateFeedback getPayload() {
return payload;
}
public String getRoomId() {
return roomId;
}
}
public static class GetFeedbackCommand {
private String roomId;
private GetFeedback payload;
public GetFeedbackCommand(String roomId, GetFeedback payload) {
this.roomId = roomId;
this.payload = payload;
}
public GetFeedback getPayload() {
return payload;
}
public String getRoomId() {
return roomId;
}
}
}