From f841886b52137f85dcdade5be00905171410fd33 Mon Sep 17 00:00:00 2001 From: pabloFuente Date: Wed, 8 Feb 2023 12:29:53 +0100 Subject: [PATCH] Add broadcasting property to Session entity --- .../main/java/io/openvidu/java/client/Session.java | 14 ++++++++++++++ openvidu-node-client/src/Session.ts | 7 +++++++ .../java/io/openvidu/server/OpenViduServer.java | 8 ++++++++ .../server/broadcast/BroadcastManager.java | 7 +++++++ .../server/broadcast/BroadcastManagerDummy.java | 10 ++++++++++ .../main/java/io/openvidu/server/core/Session.java | 7 ++++++- .../io/openvidu/server/core/SessionManager.java | 8 ++++++-- .../server/kurento/core/KurentoSessionManager.java | 3 ++- .../SessionGarbageCollectorIntegrationTest.java | 2 +- .../java/io/openvidu/test/e2e/OpenViduTestE2e.java | 2 +- 10 files changed, 62 insertions(+), 6 deletions(-) create mode 100644 openvidu-server/src/main/java/io/openvidu/server/broadcast/BroadcastManager.java create mode 100644 openvidu-server/src/main/java/io/openvidu/server/broadcast/BroadcastManagerDummy.java diff --git a/openvidu-java-client/src/main/java/io/openvidu/java/client/Session.java b/openvidu-java-client/src/main/java/io/openvidu/java/client/Session.java index 7d53c655..683391f2 100644 --- a/openvidu-java-client/src/main/java/io/openvidu/java/client/Session.java +++ b/openvidu-java-client/src/main/java/io/openvidu/java/client/Session.java @@ -54,6 +54,7 @@ public class Session { private SessionProperties properties; private Map connections = new ConcurrentHashMap<>(); private boolean recording = false; + private boolean broadcasting = false; protected Session(OpenVidu openVidu) throws OpenViduJavaClientException, OpenViduHttpException { this.openVidu = openVidu; @@ -633,6 +634,13 @@ public class Session { return this.recording; } + /** + * Returns whether the session is being broadcasted or not. + */ + public boolean isBeingBroadcasted() { + return this.broadcasting; + } + /** * Returns the properties defining the session. */ @@ -705,10 +713,15 @@ public class Session { this.recording = recording; } + protected void setIsBeingBroadcasted(boolean broadcasting) { + this.broadcasting = broadcasting; + } + protected Session resetWithJson(JsonObject json) { this.sessionId = json.get("sessionId").getAsString(); this.createdAt = json.get("createdAt").getAsLong(); this.recording = json.get("recording").getAsBoolean(); + this.broadcasting = json.get("broadcasting").getAsBoolean(); SessionProperties.Builder builder = new SessionProperties.Builder() .mediaMode(MediaMode.valueOf(json.get("mediaMode").getAsString())) .recordingMode(RecordingMode.valueOf(json.get("recordingMode").getAsString())); @@ -764,6 +777,7 @@ public class Session { json.addProperty("sessionId", this.sessionId); json.addProperty("createdAt", this.createdAt); json.addProperty("recording", this.recording); + json.addProperty("broadcasting", this.broadcasting); // Add keys from SessionProperties JsonObject sessionPropertiesJson = this.properties.toJson(); diff --git a/openvidu-node-client/src/Session.ts b/openvidu-node-client/src/Session.ts index 800114a5..4a8b247c 100644 --- a/openvidu-node-client/src/Session.ts +++ b/openvidu-node-client/src/Session.ts @@ -75,6 +75,11 @@ export class Session { */ recording = false; + /** + * Whether the session is being broadcasted or not + */ + broadcasting = false; + /** * @hidden */ @@ -526,6 +531,7 @@ export class Session { this.sessionId = json.sessionId; this.createdAt = json.createdAt; this.recording = json.recording; + this.broadcasting = json.broadcasting; this.properties = { customSessionId: json.customSessionId, mediaMode: json.mediaMode, @@ -599,6 +605,7 @@ export class Session { this.sessionId === other.sessionId && this.createdAt === other.createdAt && this.recording === other.recording && + this.broadcasting === other.broadcasting && this.connections.length === other.connections.length && JSON.stringify(this.properties) === JSON.stringify(other.properties) ); diff --git a/openvidu-server/src/main/java/io/openvidu/server/OpenViduServer.java b/openvidu-server/src/main/java/io/openvidu/server/OpenViduServer.java index aa6f0151..4a545674 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/OpenViduServer.java +++ b/openvidu-server/src/main/java/io/openvidu/server/OpenViduServer.java @@ -42,6 +42,8 @@ import org.springframework.context.annotation.DependsOn; import org.springframework.context.annotation.Import; import org.springframework.context.event.EventListener; +import io.openvidu.server.broadcast.BroadcastManager; +import io.openvidu.server.broadcast.BroadcastManagerDummy; import io.openvidu.server.cdr.CDRLogger; import io.openvidu.server.cdr.CDRLoggerFile; import io.openvidu.server.cdr.CallDetailRecord; @@ -237,6 +239,12 @@ public class OpenViduServer implements JsonRpcConfigurer { return new MediaNodeManagerDummy(); } + @Bean + @ConditionalOnMissingBean + public BroadcastManager broadcastManager() { + return new BroadcastManagerDummy(); + } + @Bean @ConditionalOnMissingBean @ConditionalOnProperty(name = "SUPPORT_DEPRECATED_API", havingValue = "true") diff --git a/openvidu-server/src/main/java/io/openvidu/server/broadcast/BroadcastManager.java b/openvidu-server/src/main/java/io/openvidu/server/broadcast/BroadcastManager.java new file mode 100644 index 00000000..742aad6e --- /dev/null +++ b/openvidu-server/src/main/java/io/openvidu/server/broadcast/BroadcastManager.java @@ -0,0 +1,7 @@ +package io.openvidu.server.broadcast; + +public interface BroadcastManager { + + boolean sessionIsBeingBroadcasted(String sessionId); + +} diff --git a/openvidu-server/src/main/java/io/openvidu/server/broadcast/BroadcastManagerDummy.java b/openvidu-server/src/main/java/io/openvidu/server/broadcast/BroadcastManagerDummy.java new file mode 100644 index 00000000..d8b6f112 --- /dev/null +++ b/openvidu-server/src/main/java/io/openvidu/server/broadcast/BroadcastManagerDummy.java @@ -0,0 +1,10 @@ +package io.openvidu.server.broadcast; + +public class BroadcastManagerDummy implements BroadcastManager { + + @Override + public boolean sessionIsBeingBroadcasted(String sessionId) { + return false; + } + +} diff --git a/openvidu-server/src/main/java/io/openvidu/server/core/Session.java b/openvidu-server/src/main/java/io/openvidu/server/core/Session.java index 24100d3e..8832c29f 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/core/Session.java +++ b/openvidu-server/src/main/java/io/openvidu/server/core/Session.java @@ -39,6 +39,7 @@ import com.google.gson.JsonObject; import io.openvidu.client.OpenViduException; import io.openvidu.client.OpenViduException.Code; import io.openvidu.java.client.SessionProperties; +import io.openvidu.server.broadcast.BroadcastManager; import io.openvidu.server.config.OpenviduConfig; import io.openvidu.server.recording.service.RecordingManager; @@ -46,6 +47,7 @@ public class Session implements SessionInterface { protected OpenviduConfig openviduConfig; protected RecordingManager recordingManager; + protected BroadcastManager broadcastManager; protected ConcurrentMap tokens = new ConcurrentHashMap<>(); protected final ConcurrentMap participants = new ConcurrentHashMap<>(); @@ -90,17 +92,19 @@ public class Session implements SessionInterface { this.sessionProperties = previousSession.getSessionProperties(); this.openviduConfig = previousSession.openviduConfig; this.recordingManager = previousSession.recordingManager; + this.broadcastManager = previousSession.broadcastManager; this.tokens = previousSession.tokens; } public Session(String sessionId, SessionProperties sessionProperties, OpenviduConfig openviduConfig, - RecordingManager recordingManager) { + RecordingManager recordingManager, BroadcastManager broadcastManager) { this.sessionId = sessionId; this.startTime = System.currentTimeMillis(); this.uniqueSessionId = sessionId + "_" + this.startTime; this.sessionProperties = sessionProperties; this.openviduConfig = openviduConfig; this.recordingManager = recordingManager; + this.broadcastManager = broadcastManager; } public String getSessionId() { @@ -243,6 +247,7 @@ public class Session implements SessionInterface { json.addProperty("sessionId", this.sessionId); // TODO: deprecated. Better use only "id" json.addProperty("createdAt", this.startTime); json.addProperty("recording", this.recordingManager.sessionIsBeingRecorded(this.sessionId)); + json.addProperty("broadcasting", this.broadcastManager.sessionIsBeingBroadcasted(this.sessionId)); // Add keys from SessionProperties JsonObject sessionPropertiesJson = sessionProperties.toJson(); diff --git a/openvidu-server/src/main/java/io/openvidu/server/core/SessionManager.java b/openvidu-server/src/main/java/io/openvidu/server/core/SessionManager.java index d7152a52..ad59347c 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/core/SessionManager.java +++ b/openvidu-server/src/main/java/io/openvidu/server/core/SessionManager.java @@ -53,6 +53,7 @@ import io.openvidu.java.client.KurentoOptions; import io.openvidu.java.client.OpenViduRole; import io.openvidu.java.client.Recording; import io.openvidu.java.client.SessionProperties; +import io.openvidu.server.broadcast.BroadcastManager; import io.openvidu.server.cdr.CDREventRecordingStatusChanged; import io.openvidu.server.config.OpenviduConfig; import io.openvidu.server.coturn.CoturnCredentialsService; @@ -74,6 +75,9 @@ public abstract class SessionManager { @Autowired protected RecordingManager recordingManager; + @Autowired + protected BroadcastManager broadcastManager; + @Autowired protected OpenviduConfig openviduConfig; @@ -315,8 +319,8 @@ public abstract class SessionManager { * @return null if concurrent storing of session */ public Session storeSessionNotActive(String sessionId, SessionProperties sessionProperties) { - Session sessionNotActive = this - .storeSessionNotActive(new Session(sessionId, sessionProperties, openviduConfig, recordingManager)); + Session sessionNotActive = this.storeSessionNotActive( + new Session(sessionId, sessionProperties, openviduConfig, recordingManager, broadcastManager)); if (sessionNotActive == null) { return null; } else { diff --git a/openvidu-server/src/main/java/io/openvidu/server/kurento/core/KurentoSessionManager.java b/openvidu-server/src/main/java/io/openvidu/server/kurento/core/KurentoSessionManager.java index ce1945c2..27a7f516 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/kurento/core/KurentoSessionManager.java +++ b/openvidu-server/src/main/java/io/openvidu/server/kurento/core/KurentoSessionManager.java @@ -114,7 +114,8 @@ public class KurentoSessionManager extends SessionManager { // Insecure user directly call joinRoom RPC method, without REST API use SessionProperties.Builder builder = new SessionProperties.Builder().mediaMode(MediaMode.ROUTED) .recordingMode(RecordingMode.ALWAYS); - sessionNotActive = new Session(sessionId, builder.build(), openviduConfig, recordingManager); + sessionNotActive = new Session(sessionId, builder.build(), openviduConfig, recordingManager, + broadcastManager); } try { diff --git a/openvidu-server/src/test/java/io/openvidu/server/test/integration/SessionGarbageCollectorIntegrationTest.java b/openvidu-server/src/test/java/io/openvidu/server/test/integration/SessionGarbageCollectorIntegrationTest.java index c69782cc..0c0598a8 100644 --- a/openvidu-server/src/test/java/io/openvidu/server/test/integration/SessionGarbageCollectorIntegrationTest.java +++ b/openvidu-server/src/test/java/io/openvidu/server/test/integration/SessionGarbageCollectorIntegrationTest.java @@ -101,7 +101,7 @@ public class SessionGarbageCollectorIntegrationTest { String stringResponse = (String) sessionRestController.initializeSession(new HashMap<>()).getBody(); JsonObject json = new Gson().fromJson(stringResponse, JsonObject.class); String sessionId = json.get("id").getAsString(); - return new Session(sessionId, null, null, null); + return new Session(sessionId, null, null, null, null); } private String getToken(Session session) { diff --git a/openvidu-test-e2e/src/main/java/io/openvidu/test/e2e/OpenViduTestE2e.java b/openvidu-test-e2e/src/main/java/io/openvidu/test/e2e/OpenViduTestE2e.java index a89fd639..3b7c9b89 100644 --- a/openvidu-test-e2e/src/main/java/io/openvidu/test/e2e/OpenViduTestE2e.java +++ b/openvidu-test-e2e/src/main/java/io/openvidu/test/e2e/OpenViduTestE2e.java @@ -844,7 +844,7 @@ public class OpenViduTestE2e { } } catch (Exception e) { try { - log.error("Waiting for OpenVidu Server..."); + log.warn("Waiting for OpenVidu Server..."); Thread.sleep(msInterval); } catch (InterruptedException e1) { log.error("Sleep interrupted");