diff --git a/openvidu-server/src/main/java/io/openvidu/server/core/FinalUser.java b/openvidu-server/src/main/java/io/openvidu/server/core/FinalUser.java index 7c6deef4..87b1cdb3 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/core/FinalUser.java +++ b/openvidu-server/src/main/java/io/openvidu/server/core/FinalUser.java @@ -64,14 +64,14 @@ public class FinalUser { return connections; } - public void addConnection(Participant participant) { - this.connections.put(participant.getParticipantPublicId(), new ParticipantSummary(this.sessionId, participant)); + public void addConnectionIfAbsent(Participant participant) { + this.connections.putIfAbsent(participant.getParticipantPublicId(), new ParticipantSummary(this.sessionId, participant)); } public void setConnection(CDREventParticipant event) { - ParticipantSummary oldSummary = this.connections.remove(event.getParticipant().getParticipantPublicId()); - this.connections.put(event.getParticipant().getParticipantPublicId(), - new ParticipantSummary(event, oldSummary)); + final String participantPublicId = event.getParticipant().getParticipantPublicId(); + ParticipantSummary oldSummary = this.connections.remove(participantPublicId); + this.connections.put(participantPublicId, new ParticipantSummary(event, oldSummary)); } public JsonObject 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 4a7273d3..41b16af2 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 @@ -368,18 +368,11 @@ public abstract class SessionManager { p.setParticipantPublicId(participantPublicId); } - FinalUser finalUser = this.sessionidFinalUsers.get(sessionId).get(finalUserId); - if (finalUser == null) { - // First connection for new final user - log.info("Participant {} of session {} belongs to a new final user", p.getParticipantPublicId(), - sessionId); - this.sessionidFinalUsers.get(sessionId).put(finalUserId, new FinalUser(finalUserId, sessionId, p)); - } else { - // New connection for previously existing final user - log.info("Participant {} of session {} belongs to a previously existing user", + this.sessionidFinalUsers.get(sessionId).computeIfAbsent(finalUserId, k -> { + log.info("Participant {} of session {} is a final user connecting to this session for the first time", p.getParticipantPublicId(), sessionId); - finalUser.addConnection(p); - } + return new FinalUser(finalUserId, sessionId, p); + }).addConnectionIfAbsent(p); return p; } else { diff --git a/openvidu-server/src/main/java/io/openvidu/server/summary/ParticipantSummary.java b/openvidu-server/src/main/java/io/openvidu/server/summary/ParticipantSummary.java index 20f94596..27432af2 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/summary/ParticipantSummary.java +++ b/openvidu-server/src/main/java/io/openvidu/server/summary/ParticipantSummary.java @@ -33,8 +33,8 @@ public class ParticipantSummary { private Map publishers = new ConcurrentHashMap<>(); private Map subscribers = new ConcurrentHashMap<>(); - public ParticipantSummary(CDREventParticipant event) { - this.eventParticipantEnd = event; + public ParticipantSummary(String sessionId, Participant participant) { + this.eventParticipantEnd = new CDREventParticipant(sessionId, participant); } public ParticipantSummary(CDREventParticipant event, ParticipantSummary oldSummary) { @@ -43,10 +43,6 @@ public class ParticipantSummary { this.subscribers = oldSummary.subscribers; } - public ParticipantSummary(String sessionId, Participant participant) { - this.eventParticipantEnd = new CDREventParticipant(sessionId, participant); - } - public void addPublisherClosed(String streamId, CDREventWebrtcConnection event) { this.publishers.put(streamId, event); }