Skip to content

Commit 310c283

Browse files
committed
- initialize shared objects not on roomstart but on room connect
1 parent 3c53cee commit 310c283

File tree

4 files changed

+101
-87
lines changed

4 files changed

+101
-87
lines changed

bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/layout/LayoutHandler.java

Lines changed: 22 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import org.red5.server.adapter.IApplication;
2424
import org.red5.server.api.IClient;
2525
import org.red5.server.api.IConnection;
26+
import org.red5.server.api.Red5;
2627
import org.red5.server.api.scope.IScope;
2728
import org.red5.server.api.so.ISharedObject;
2829
import org.slf4j.Logger;
@@ -71,15 +72,24 @@ public void appStop(IScope scope) {
7172
@Override
7273
public boolean roomConnect(IConnection connection, Object[] params) {
7374
log.debug(APP + ":roomConnect");
74-
ISharedObject so = getSharedObject(connection.getScope(), LAYOUT_SO);
75-
log.debug("Setting up Listener");
76-
LayoutSender sender = new LayoutSender(so);
77-
String room = connection.getScope().getName();
78-
log.debug("Adding event listener to " + room);
79-
log.debug("Adding room listener");
80-
layoutApplication.addRoomListener(room, sender);
81-
log.debug("Done setting up listener");
82-
return true;
75+
76+
IScope scope = Red5.getConnectionLocal().getScope();
77+
78+
if (!hasSharedObject(scope, LAYOUT_SO)) {
79+
if (createSharedObject(scope, LAYOUT_SO, false)) {
80+
ISharedObject so = getSharedObject(connection.getScope(), LAYOUT_SO);
81+
log.debug("Setting up Listener");
82+
LayoutSender sender = new LayoutSender(so);
83+
String room = connection.getScope().getName();
84+
log.debug("Adding event listener to " + room);
85+
log.debug("Adding room listener");
86+
layoutApplication.addRoomListener(room, sender);
87+
log.debug("Done setting up listener");
88+
return true;
89+
}
90+
}
91+
92+
return false;
8393
}
8494

8595
@Override
@@ -102,20 +112,15 @@ public void roomLeave(IClient client, IScope scope) {
102112
public boolean roomStart(IScope scope) {
103113
log.debug(APP + ":roomStart " + scope.getName());
104114
layoutApplication.createRoom(scope.getName());
105-
if (!hasSharedObject(scope, LAYOUT_SO)) {
106-
if (createSharedObject(scope, LAYOUT_SO, false)) {
107-
return true;
108-
}
109-
}
110-
log.error("Failed to start room " + scope.getName());
111-
return false;
115+
116+
return true;
112117
}
113118

114119
@Override
115120
public void roomStop(IScope scope) {
116121
log.debug(APP + ":roomStop " + scope.getName());
117122
layoutApplication.destroyRoom(scope.getName());
118-
if (!hasSharedObject(scope, LAYOUT_SO)) {
123+
if (hasSharedObject(scope, LAYOUT_SO)) {
119124
clearSharedObjects(scope, LAYOUT_SO);
120125
}
121126
}

bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/participants/ParticipantsHandler.java

Lines changed: 17 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -78,16 +78,22 @@ public void appStop(IScope scope) {
7878
public boolean roomConnect(IConnection connection, Object[] params) {
7979
log.debug(APP + ":roomConnect");
8080

81-
ISharedObject so = getSharedObject(connection.getScope(), PARTICIPANTS_SO);
82-
ParticipantsEventSender sender = new ParticipantsEventSender(so);
83-
ParticipantsEventRecorder recorder = new ParticipantsEventRecorder(connection.getScope().getName(), recorderApplication);
81+
IScope scope = Red5.getConnectionLocal().getScope();
8482

85-
log.debug("Adding room listener " + connection.getScope().getName());
86-
participantsApplication.addRoomListener(connection.getScope().getName(), recorder);
87-
participantsApplication.addRoomListener(connection.getScope().getName(), sender);
88-
log.debug("Done setting up recorder and listener");
89-
90-
return true;
83+
if (!hasSharedObject(scope, PARTICIPANTS_SO)) {
84+
if (createSharedObject(scope, PARTICIPANTS_SO, false)) {
85+
ISharedObject so = getSharedObject(connection.getScope(), PARTICIPANTS_SO);
86+
ParticipantsEventSender sender = new ParticipantsEventSender(so);
87+
ParticipantsEventRecorder recorder = new ParticipantsEventRecorder(connection.getScope().getName(), recorderApplication);
88+
89+
log.debug("Adding room listener " + connection.getScope().getName());
90+
participantsApplication.addRoomListener(connection.getScope().getName(), recorder);
91+
participantsApplication.addRoomListener(connection.getScope().getName(), sender);
92+
log.debug("Done setting up recorder and listener");
93+
}
94+
}
95+
96+
return false;
9197
}
9298

9399
@Override
@@ -116,20 +122,13 @@ public void roomLeave(IClient client, IScope scope) {
116122
@Override
117123
public boolean roomStart(IScope scope) {
118124
log.debug(APP + " - roomStart "+scope.getName());
119-
// create ParticipantSO if it is not already created
120-
if (!hasSharedObject(scope, PARTICIPANTS_SO)) {
121-
if (createSharedObject(scope, PARTICIPANTS_SO, false)) {
122-
return true;
123-
}
124-
}
125-
log.error("Failed to start room " + scope.getName());
126-
return false;
125+
return true;
127126
}
128127

129128
@Override
130129
public void roomStop(IScope scope) {
131130
log.debug(APP + ":roomStop " + scope.getName());
132-
if (!hasSharedObject(scope, PARTICIPANTS_SO)) {
131+
if (hasSharedObject(scope, PARTICIPANTS_SO)) {
133132
clearSharedObjects(scope, PARTICIPANTS_SO);
134133
}
135134
}

bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/presentation/PresentationHandler.java

Lines changed: 42 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -85,17 +85,27 @@ public boolean roomConnect(IConnection connection, Object[] params) {
8585
log.debug(APP + ":roomConnect");
8686

8787
log.debug("In live mode");
88-
ISharedObject so = getSharedObject(connection.getScope(), PRESENTATION_SO);
8988

90-
log.debug("Setting up recorder");
91-
PresentationEventSender sender = new PresentationEventSender(so);
92-
PresentationEventRecorder recorder = new PresentationEventRecorder(connection.getScope().getName(), recorderApplication);
93-
94-
log.debug("Adding room listener");
95-
presentationApplication.addRoomListener(connection.getScope().getName(), recorder);
96-
presentationApplication.addRoomListener(connection.getScope().getName(), sender);
97-
log.debug("Done setting up recorder and listener");
98-
return true;
89+
IScope scope = Red5.getConnectionLocal().getScope();
90+
91+
if (!hasSharedObject(scope, PRESENTATION_SO)) {
92+
if (createSharedObject(scope, PRESENTATION_SO, false)) {
93+
ISharedObject so = getSharedObject(connection.getScope(), PRESENTATION_SO);
94+
95+
log.debug("Setting up recorder");
96+
PresentationEventSender sender = new PresentationEventSender(so);
97+
PresentationEventRecorder recorder = new PresentationEventRecorder(connection.getScope().getName(), recorderApplication);
98+
99+
log.debug("Adding room listener");
100+
presentationApplication.addRoomListener(connection.getScope().getName(), recorder);
101+
presentationApplication.addRoomListener(connection.getScope().getName(), sender);
102+
log.debug("Done setting up recorder and listener");
103+
return true;
104+
}
105+
}
106+
107+
108+
return false;
99109
}
100110

101111
@Override
@@ -119,41 +129,36 @@ public void roomLeave(IClient client, IScope scope) {
119129
public boolean roomStart(IScope scope) {
120130
log.debug(APP + " - roomStart "+ scope.getName());
121131
presentationApplication.createRoom(scope.getName());
122-
if (!hasSharedObject(scope, PRESENTATION_SO)) {
123-
if (createSharedObject(scope, PRESENTATION_SO, false)) {
124-
log.debug(APP + " - scanning for presentations - " + scope.getName());
125-
try {
126-
// TODO: this is hard-coded, and not really a great abstraction. need to fix this up later
127-
String folderPath = "/var/bigbluebutton/" + scope.getName() + "/" + scope.getName();
128-
File folder = new File(folderPath);
129-
//log.debug("folder: {} - exists: {} - isDir: {}", folder.getAbsolutePath(), folder.exists(), folder.isDirectory());
130-
if (folder.exists() && folder.isDirectory()) {
131-
File[] presentations = folder.listFiles(new FileFilter() {
132-
public boolean accept(File path) {
133-
log.debug("\tfound: " + path.getAbsolutePath());
134-
return path.isDirectory();
135-
}
136-
});
137-
for (File presFile : presentations) {
138-
log.debug("\tshare: " + presFile.getName());
139-
presentationApplication.sharePresentation(scope.getName(), presFile.getName(), true);
140-
}
132+
133+
log.debug(APP + " - scanning for presentations - " + scope.getName());
134+
try {
135+
// TODO: this is hard-coded, and not really a great abstraction. need to fix this up later
136+
String folderPath = "/var/bigbluebutton/" + scope.getName() + "/" + scope.getName();
137+
File folder = new File(folderPath);
138+
//log.debug("folder: {} - exists: {} - isDir: {}", folder.getAbsolutePath(), folder.exists(), folder.isDirectory());
139+
if (folder.exists() && folder.isDirectory()) {
140+
File[] presentations = folder.listFiles(new FileFilter() {
141+
public boolean accept(File path) {
142+
log.debug("\tfound: " + path.getAbsolutePath());
143+
return path.isDirectory();
141144
}
142-
} catch (Exception ex) {
143-
log.error(scope.getName() + ": error scanning for existing presentations [" + ex.getMessage() + "]", ex);
145+
});
146+
for (File presFile : presentations) {
147+
log.debug("\tshare: " + presFile.getName());
148+
presentationApplication.sharePresentation(scope.getName(), presFile.getName(), true);
144149
}
145-
return true;
146-
}
147-
}
148-
log.error("Failed to start room " + scope.getName());
149-
return false;
150+
}
151+
} catch (Exception ex) {
152+
log.error(scope.getName() + ": error scanning for existing presentations [" + ex.getMessage() + "]", ex);
153+
}
154+
return true;
150155
}
151156

152157
@Override
153158
public void roomStop(IScope scope) {
154159
log.debug(APP + ":roomStop " + scope.getName());
155160
presentationApplication.destroyRoom(scope.getName());
156-
if (!hasSharedObject(scope, PRESENTATION_SO)) {
161+
if (hasSharedObject(scope, PRESENTATION_SO)) {
157162
clearSharedObjects(scope, PRESENTATION_SO);
158163
}
159164
}

bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/voice/VoiceHandler.java

Lines changed: 20 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -77,15 +77,24 @@ public void appStop(IScope scope) {
7777
public boolean roomConnect(IConnection connection, Object[] params) {
7878
log.debug(APP + ":roomConnect");
7979
log.debug("In live mode");
80-
ISharedObject so = getSharedObject(connection.getScope(), VOICE_SO);
81-
82-
String voiceBridge = getBbbSession().getVoiceBridge();
83-
String meetingid = getBbbSession().getConference();
84-
Boolean record = getBbbSession().getRecord();
8580

86-
log.debug("Setting up voiceBridge " + voiceBridge);
87-
clientManager.addSharedObject(connection.getScope().getName(), voiceBridge, so);
88-
conferenceService.createConference(voiceBridge, meetingid, record);
81+
IScope scope = Red5.getConnectionLocal().getScope();
82+
83+
if (!hasSharedObject(scope, VOICE_SO)) {
84+
if (createSharedObject(scope, VOICE_SO, false)) {
85+
ISharedObject so = getSharedObject(connection.getScope(), VOICE_SO);
86+
87+
String voiceBridge = getBbbSession().getVoiceBridge();
88+
String meetingid = getBbbSession().getConference();
89+
Boolean record = getBbbSession().getRecord();
90+
91+
log.debug("Setting up voiceBridge " + voiceBridge);
92+
clientManager.addSharedObject(connection.getScope().getName(), voiceBridge, so);
93+
conferenceService.createConference(voiceBridge, meetingid, record);
94+
}
95+
}
96+
97+
8998
return true;
9099
}
91100

@@ -109,13 +118,9 @@ public void roomLeave(IClient client, IScope scope) {
109118
public boolean roomStart(IScope scope) {
110119
log.debug(APP + " - roomStart " + scope.getName());
111120

112-
if (!hasSharedObject(scope, VOICE_SO)) {
113-
if (createSharedObject(scope, VOICE_SO, false)) {
114-
return true;
115-
}
116-
}
121+
117122
log.error("Failed to start room " + scope.getName());
118-
return false;
123+
return true;
119124
}
120125

121126
@Override
@@ -128,7 +133,7 @@ public void roomStop(IScope scope) {
128133
String voiceBridge = getBbbSession().getVoiceBridge();
129134
conferenceService.destroyConference(voiceBridge);
130135
clientManager.removeSharedObject(scope.getName());
131-
if (!hasSharedObject(scope, VOICE_SO)) {
136+
if (hasSharedObject(scope, VOICE_SO)) {
132137
clearSharedObjects(scope, VOICE_SO);
133138
}
134139
}

0 commit comments

Comments
 (0)