From 4d32de7c19a35bc1498810c0063dfec90662a525 Mon Sep 17 00:00:00 2001 From: pabloFuente Date: Thu, 13 Jun 2019 12:18:13 +0200 Subject: [PATCH] openvidu-server: move KurentoConnectionListener creation to KmsManager --- .../kurento/kms/FixedOneKmsManager.java | 55 +------------------ .../server/kurento/kms/KmsManager.java | 53 +++++++++++++++++- 2 files changed, 53 insertions(+), 55 deletions(-) diff --git a/openvidu-server/src/main/java/io/openvidu/server/kurento/kms/FixedOneKmsManager.java b/openvidu-server/src/main/java/io/openvidu/server/kurento/kms/FixedOneKmsManager.java index 7f456914..764f4fc2 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/kurento/kms/FixedOneKmsManager.java +++ b/openvidu-server/src/main/java/io/openvidu/server/kurento/kms/FixedOneKmsManager.java @@ -18,65 +18,12 @@ package io.openvidu.server.kurento.kms; import org.kurento.client.KurentoClient; -import org.kurento.client.KurentoConnectionListener; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import io.openvidu.server.kurento.core.KurentoSession; -import io.openvidu.server.kurento.core.KurentoSessionManager; public class FixedOneKmsManager extends KmsManager { - private static final Logger log = LoggerFactory.getLogger(FixedOneKmsManager.class); - public FixedOneKmsManager(String kmsWsUri, LoadManager loadManager) { super(loadManager); - - KurentoClient kClient = KurentoClient.create(kmsWsUri, new KurentoConnectionListener() { - - @Override - public void reconnected(boolean isReconnected) { - ((KurentoSessionManager) sessionManager).getKmsManager().setKurentoClientConnectedToKms(kmsWsUri, true); - if (!isReconnected) { - // Different KMS. Reset sessions status (no Publisher or SUbscriber endpoints) - log.warn("Kurento Client reconnected to a different KMS instance, with uri {}", kmsWsUri); - log.warn("Updating all webrtc endpoints for active sessions"); - final Kms kms = ((KurentoSessionManager) sessionManager).getKmsManager().kmss.get(kmsWsUri); - final long timeOfKurentoDisconnection = kms.getTimeOfKurentoClientDisconnection(); - sessionManager.getSessions().forEach(s -> { - ((KurentoSession) s).restartStatusInKurento(timeOfKurentoDisconnection); - }); - kms.setTimeOfKurentoClientDisconnection(0); - } else { - // Same KMS. We may infer that openvidu-server/KMS connection has been lost, but - // not the clients/KMS connections - log.warn("Kurento Client reconnected to same KMS with uri {}", kmsWsUri); - } - } - - @Override - public void disconnected() { - ((KurentoSessionManager) sessionManager).getKmsManager().setKurentoClientConnectedToKms(kmsWsUri, - false); - ((KurentoSessionManager) sessionManager).getKmsManager().setTimeOfKurentoClientDisconnection(kmsWsUri, - System.currentTimeMillis()); - log.warn("Kurento Client disconnected from KMS with uri {}", kmsWsUri); - } - - @Override - public void connectionFailed() { - ((KurentoSessionManager) sessionManager).getKmsManager().setKurentoClientConnectedToKms(kmsWsUri, - false); - log.warn("Kurento Client failed connecting to KMS with uri {}", kmsWsUri); - } - - @Override - public void connected() { - ((KurentoSessionManager) sessionManager).getKmsManager().setKurentoClientConnectedToKms(kmsWsUri, true); - log.warn("Kurento Client is now connected to KMS with uri {}", kmsWsUri); - } - }); - + KurentoClient kClient = KurentoClient.create(kmsWsUri, this.generateKurentoConnectionListener(kmsWsUri)); this.addKms(new Kms(kmsWsUri, kClient, loadManager)); } diff --git a/openvidu-server/src/main/java/io/openvidu/server/kurento/kms/KmsManager.java b/openvidu-server/src/main/java/io/openvidu/server/kurento/kms/KmsManager.java index 121c613b..b18acce9 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/kurento/kms/KmsManager.java +++ b/openvidu-server/src/main/java/io/openvidu/server/kurento/kms/KmsManager.java @@ -24,12 +24,15 @@ import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; +import org.kurento.client.KurentoConnectionListener; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import io.openvidu.server.core.SessionManager; +import io.openvidu.server.kurento.core.KurentoSession; +import io.openvidu.server.kurento.core.KurentoSessionManager; @Service public abstract class KmsManager { @@ -63,7 +66,7 @@ public abstract class KmsManager { protected LoadManager loadManager; - private final Logger log = LoggerFactory.getLogger(KmsManager.class); + private static final Logger log = LoggerFactory.getLogger(KmsManager.class); // Using KMS websocket uris as unique identifiers protected Map kmss = new ConcurrentHashMap<>(); @@ -138,4 +141,52 @@ public abstract class KmsManager { public boolean destroyWhenUnused() { return false; } + + protected KurentoConnectionListener generateKurentoConnectionListener(String kmsWsUri) { + return new KurentoConnectionListener() { + + @Override + public void reconnected(boolean isReconnected) { + ((KurentoSessionManager) sessionManager).getKmsManager().setKurentoClientConnectedToKms(kmsWsUri, true); + if (!isReconnected) { + // Different KMS. Reset sessions status (no Publisher or SUbscriber endpoints) + log.warn("Kurento Client reconnected to a different KMS instance, with uri {}", kmsWsUri); + log.warn("Updating all webrtc endpoints for active sessions"); + final Kms kms = ((KurentoSessionManager) sessionManager).getKmsManager().kmss.get(kmsWsUri); + final long timeOfKurentoDisconnection = kms.getTimeOfKurentoClientDisconnection(); + sessionManager.getSessions().forEach(s -> { + ((KurentoSession) s).restartStatusInKurento(timeOfKurentoDisconnection); + }); + kms.setTimeOfKurentoClientDisconnection(0); + } else { + // Same KMS. We may infer that openvidu-server/KMS connection has been lost, but + // not the clients/KMS connections + log.warn("Kurento Client reconnected to same KMS with uri {}", kmsWsUri); + } + } + + @Override + public void disconnected() { + ((KurentoSessionManager) sessionManager).getKmsManager().setKurentoClientConnectedToKms(kmsWsUri, + false); + ((KurentoSessionManager) sessionManager).getKmsManager().setTimeOfKurentoClientDisconnection(kmsWsUri, + System.currentTimeMillis()); + log.warn("Kurento Client disconnected from KMS with uri {}", kmsWsUri); + } + + @Override + public void connectionFailed() { + ((KurentoSessionManager) sessionManager).getKmsManager().setKurentoClientConnectedToKms(kmsWsUri, + false); + log.warn("Kurento Client failed connecting to KMS with uri {}", kmsWsUri); + } + + @Override + public void connected() { + ((KurentoSessionManager) sessionManager).getKmsManager().setKurentoClientConnectedToKms(kmsWsUri, true); + log.warn("Kurento Client is now connected to KMS with uri {}", kmsWsUri); + } + }; + } + }