openvidu-2/openvidu-demo/src/main/java/io/openvidu/demo/DemoNotificationRoomHandler.java

123 lines
3.4 KiB
Java

package io.openvidu.demo;
import java.util.SortedMap;
import org.kurento.client.Continuation;
import org.kurento.client.Filter;
import org.kurento.module.markerdetector.ArMarkerdetector;
import io.openvidu.client.internal.ProtocolElements;
import io.openvidu.server.core.api.UserNotificationService;
import io.openvidu.server.core.internal.DefaultNotificationRoomHandler;
import io.openvidu.server.core.internal.Participant;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.google.gson.JsonObject;
public class DemoNotificationRoomHandler extends DefaultNotificationRoomHandler {
private static final Logger log = LoggerFactory.getLogger(DemoNotificationRoomHandler.class);
private SortedMap<Integer, String> markerUrls;
private UserNotificationService notifService;
public DemoNotificationRoomHandler(UserNotificationService notifService) {
super(notifService);
this.notifService = notifService;
}
@Override
public void updateFilter(String roomName, Participant participant, String filterId,
String state) {
Integer newState = -1;
if (state != null) {
newState = Integer.parseInt(state);
}
String url = markerUrls.get(newState);
JsonObject notificationParams = new JsonObject();
notificationParams.addProperty("MarkerFilterState", newState);
notifService.sendNotification(participant.getId(), ProtocolElements.CUSTOM_NOTIFICATION,
notificationParams);
ArMarkerdetector newFilter;
Filter filter = participant.getFilterElement(filterId);
if (filter == null) {
newFilter = new ArMarkerdetector.Builder(participant.getPipeline()).build();
log.info("New {} filter for participant {}", filterId, participant.getId());
participant.addFilterElement(filterId, newFilter);
} else {
log.info("Reusing {} filter in participant {}", filterId, participant.getId());
newFilter = (ArMarkerdetector) filter;
}
if (url != null) {
newFilter.setOverlayImage(url, new Continuation<Void>() {
@Override
public void onSuccess(Void result) throws Exception {
}
@Override
public void onError(Throwable cause) throws Exception {
}
});
newFilter.setOverlayScale(1.0F, new Continuation<Void>() {
@Override
public void onSuccess(Void result) throws Exception {
}
@Override
public void onError(Throwable cause) throws Exception {
}
});
} else {
newFilter.setOverlayScale(0.0001F, new Continuation<Void>() {
@Override
public void onSuccess(Void result) throws Exception {
}
@Override
public void onError(Throwable cause) throws Exception {
}
});
}
}
@Override
public String getNextFilterState(String filterId, String oldState) {
Integer currentUrlIndex;
if (oldState == null) {
currentUrlIndex = -1;
} else {
currentUrlIndex = Integer.parseInt(oldState);
}
Integer nextIndex = -1; // disable filter
if (currentUrlIndex < markerUrls.firstKey()) {
nextIndex = markerUrls.firstKey(); // enable filter using first URL
} else if (currentUrlIndex < markerUrls.lastKey()) {
nextIndex = markerUrls.tailMap(currentUrlIndex + 1).firstKey();
}
return nextIndex.toString();
}
public void setMarkerUrls(SortedMap<Integer, String> markerUrls) {
this.markerUrls = markerUrls;
}
}