diff --git a/akka-bbb-apps/build.sbt b/akka-bbb-apps/build.sbt index b4a2aa6c32e56f01e33985f43a60a4a7054dec98..b338a7788c5f09bf97587d73ce64613732668418 100755 --- a/akka-bbb-apps/build.sbt +++ b/akka-bbb-apps/build.sbt @@ -50,7 +50,7 @@ libraryDependencies ++= { "com.google.code.gson" % "gson" % "1.7.1", "redis.clients" % "jedis" % "2.7.2", "org.apache.commons" % "commons-lang3" % "3.2", - "org.bigbluebutton" % "bbb-common-message" % "0.0.16" + "org.bigbluebutton" % "bbb-common-message" % "0.0.17" )} seq(Revolver.settings: _*) diff --git a/akka-bbb-apps/src/main/java/org/bigbluebutton/core/api/IBigBlueButtonInGW.java b/akka-bbb-apps/src/main/java/org/bigbluebutton/core/api/IBigBlueButtonInGW.java index 1c083591efba8426aab7196377545f1770f9a9ec..86ae822764d49bbf9143f1705eaa32ec599f1040 100755 --- a/akka-bbb-apps/src/main/java/org/bigbluebutton/core/api/IBigBlueButtonInGW.java +++ b/akka-bbb-apps/src/main/java/org/bigbluebutton/core/api/IBigBlueButtonInGW.java @@ -34,7 +34,7 @@ public interface IBigBlueButtonInGW { // Users void validateAuthToken(String meetingId, String userId, String token, String correlationId, String sessionId); - void registerUser(String roomName, String userid, String username, String role, String externUserID, String authToken); + void registerUser(String roomName, String userid, String username, String role, String externUserID, String authToken, String avatarURL); void userEmojiStatus(String meetingId, String userId, String emojiStatus); void shareWebcam(String meetingId, String userId, String stream); void unshareWebcam(String meetingId, String userId, String stream); @@ -59,7 +59,7 @@ public interface IBigBlueButtonInGW { void ejectUserFromVoice(String meetingID, String userId, String ejectedBy); void ejectUserFromMeeting(String meetingId, String userId, String ejectedBy); void voiceUserJoined(String voiceConfId, String voiceUserId, String userId, String callerIdName, - String callerIdNum, Boolean muted, Boolean talking); + String callerIdNum, Boolean muted, String avatarURL, Boolean talking); void voiceUserLeft(String meetingId, String userId); void voiceUserLocked(String meetingId, String userId, Boolean locked); void voiceUserMuted(String meetingId, String userId, Boolean muted); diff --git a/akka-bbb-apps/src/main/java/org/bigbluebutton/core/pubsub/receivers/MeetingMessageReceiver.java b/akka-bbb-apps/src/main/java/org/bigbluebutton/core/pubsub/receivers/MeetingMessageReceiver.java index 3186bc8e06ec3a49214a0d74d4a26d5a15563f7c..414851d1ff700e2bbc039438bba7950e0c494b3f 100755 --- a/akka-bbb-apps/src/main/java/org/bigbluebutton/core/pubsub/receivers/MeetingMessageReceiver.java +++ b/akka-bbb-apps/src/main/java/org/bigbluebutton/core/pubsub/receivers/MeetingMessageReceiver.java @@ -50,7 +50,7 @@ public class MeetingMessageReceiver implements MessageHandler { emm.moderatorPass, emm.viewerPass, emm.createTime, emm.createDate); } else if (msg instanceof RegisterUserMessage) { RegisterUserMessage emm = (RegisterUserMessage) msg; - bbbGW.registerUser(emm.meetingID, emm.internalUserId, emm.fullname, emm.role, emm.externUserID, emm.authToken); + bbbGW.registerUser(emm.meetingID, emm.internalUserId, emm.fullname, emm.role, emm.externUserID, emm.authToken, emm.avatarURL); } else if (msg instanceof DestroyMeetingMessage) { DestroyMeetingMessage emm = (DestroyMeetingMessage) msg; bbbGW.destroyMeeting(emm.meetingId); @@ -133,4 +133,4 @@ public class MeetingMessageReceiver implements MessageHandler { this.bbbGW = bbbGW; } -} \ No newline at end of file +} diff --git a/akka-bbb-apps/src/main/java/org/bigbluebutton/core/pubsub/receivers/UsersMessageReceiver.java b/akka-bbb-apps/src/main/java/org/bigbluebutton/core/pubsub/receivers/UsersMessageReceiver.java index 46ebec54b6e7234906414cc8318fdc8aaf41621f..bdbe9a86c0607a99ac9d3823853416260370ec99 100755 --- a/akka-bbb-apps/src/main/java/org/bigbluebutton/core/pubsub/receivers/UsersMessageReceiver.java +++ b/akka-bbb-apps/src/main/java/org/bigbluebutton/core/pubsub/receivers/UsersMessageReceiver.java @@ -158,7 +158,7 @@ public class UsersMessageReceiver implements MessageHandler{ private void processUserJoinedVoiceConfMessage(String json) { UserJoinedVoiceConfMessage msg = UserJoinedVoiceConfMessage.fromJson(json); if (msg != null) { - bbbInGW.voiceUserJoined(msg.voiceConfId, msg.voiceUserId, msg.userId, msg.callerIdName, msg.callerIdNum, msg.muted, msg.talking); + bbbInGW.voiceUserJoined(msg.voiceConfId, msg.voiceUserId, msg.userId, msg.callerIdName, msg.callerIdNum, msg.muted, msg.avatarURL, msg.talking); } } diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/BigBlueButtonInGW.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/BigBlueButtonInGW.scala index c781e7b579bdd1d501c3a99815024c9b0e021613..1e3fe220fc92ecae71b7aa0b26472394ab729b31 100755 --- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/BigBlueButtonInGW.scala +++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/BigBlueButtonInGW.scala @@ -83,9 +83,9 @@ class BigBlueButtonInGW(val system: ActorSystem, recorderApp: RecorderApplicatio bbbActor ! new ValidateAuthToken(meetingId, userId, token, correlationId, sessionId) } - def registerUser(meetingID: String, userID: String, name: String, role: String, extUserID: String, authToken: String): Unit = { + def registerUser(meetingID: String, userID: String, name: String, role: String, extUserID: String, authToken: String, avatarURL: String): Unit = { val userRole = if (role == "MODERATOR") Role.MODERATOR else Role.VIEWER - bbbActor ! new RegisterUser(meetingID, userID, name, userRole, extUserID, authToken) + bbbActor ! new RegisterUser(meetingID, userID, name, userRole, extUserID, authToken, avatarURL) } def sendLockSettings(meetingID: String, userId: String, settings: java.util.Map[String, java.lang.Boolean]) { @@ -416,10 +416,10 @@ class BigBlueButtonInGW(val system: ActorSystem, recorderApp: RecorderApplicatio } def voiceUserJoined(voiceConfId: String, voiceUserId: String, userId: String, callerIdName: String, - callerIdNum: String, muted: java.lang.Boolean, talking: java.lang.Boolean) { + callerIdNum: String, muted: java.lang.Boolean, avatarURL: String, talking: java.lang.Boolean) { bbbActor ! new UserJoinedVoiceConfMessage(voiceConfId, voiceUserId, userId, userId, callerIdName, - callerIdNum, muted, talking, false /*hardcode listenOnly to false as the message for listenOnly is ConnectedToGlobalAudio*/ ) + callerIdNum, muted, talking, avatarURL, false /*hardcode listenOnly to false as the message for listenOnly is ConnectedToGlobalAudio*/ ) } diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/MessageSenderActor.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/MessageSenderActor.scala index 6ea5ffdc7656629d3b7444b1c7d73123e4635814..bc5b3633ff27f838398cab1bb3ee5840e91ca6ea 100755 --- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/MessageSenderActor.scala +++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/MessageSenderActor.scala @@ -512,6 +512,7 @@ class MessageSenderActor(val meetingId: String, val service: MessageSender) private def handleUserRegistered(msg: UserRegistered) { val json = UsersMessageToJsonConverter.userRegisteredToJson(msg) service.send(MessagingConstants.FROM_MEETING_CHANNEL, json) + handleRegisteredUser(msg); } private def handleUserStatusChange(msg: UserStatusChange) { diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/api/InMessages.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/api/InMessages.scala index 642c6a3be297d80233d3f2312f6097077c08ff67..d8fdb2f859d532157d5f801cdbafb343d56d4b31 100755 --- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/api/InMessages.scala +++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/api/InMessages.scala @@ -28,7 +28,7 @@ case class GetLockSettings(meetingID: String, userId: String) extends InMessage case class ValidateAuthToken(meetingID: String, userId: String, token: String, correlationId: String, sessionId: String) extends InMessage case class RegisterUser(meetingID: String, userID: String, name: String, role: Role, - extUserID: String, authToken: String) extends InMessage + extUserID: String, authToken: String, avatarURL: String) extends InMessage case class UserJoining(meetingID: String, userID: String, authToken: String) extends InMessage case class UserLeaving(meetingID: String, userID: String, sessionId: String) extends InMessage case class GetUsers(meetingID: String, requesterID: String) extends InMessage @@ -100,7 +100,7 @@ case class EjectUserFromVoiceRequest(meetingID: String, userId: String, ejectedB case class VoiceUserJoinedMessage(meetingID: String, user: String, voiceConfId: String, callerIdNum: String, callerIdName: String, muted: Boolean, talking: Boolean) extends InMessage case class UserJoinedVoiceConfMessage(voiceConfId: String, voiceUserId: String, userId: String, externUserId: String, - callerIdName: String, callerIdNum: String, muted: Boolean, talking: Boolean, listenOnly: Boolean) + callerIdName: String, callerIdNum: String, muted: Boolean, talking: Boolean, avatarURL: String, listenOnly: Boolean) case class UserLeftVoiceConfMessage(voiceConfId: String, voiceUserId: String) case class UserLockedInVoiceConfMessage(voiceConfId: String, voiceUserId: String, locked: Boolean) case class UserMutedInVoiceConfMessage(voiceConfId: String, voiceUserId: String, muted: Boolean) diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/api/ValueObjects.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/api/ValueObjects.scala index 34744822316b5e403540adf6bd755012cccda550..00e6459b11eae1b099eeae144311fbcfe53e1a06 100755 --- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/api/ValueObjects.scala +++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/api/ValueObjects.scala @@ -69,7 +69,8 @@ case class RegisteredUser( externId: String, name: String, role: Role.Role, - authToken: String) + authToken: String, + avatarURL: String) case class Voice( id: String, @@ -94,6 +95,7 @@ case class UserVO( phoneUser: Boolean, voiceUser: VoiceUser, listenOnly: Boolean, + avatarURL: String, joinedWeb: Boolean) case class VoiceUser( @@ -105,6 +107,7 @@ case class VoiceUser( locked: Boolean, muted: Boolean, talking: Boolean, + avatarURL: String, listenOnly: Boolean) case class MeetingConfig(name: String, diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/UsersApp.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/UsersApp.scala index 2103c9e3f1818ae9378e180a33f0da99409d5444..3473a160372ccab9402df7aef7852bfbf26202d2 100755 --- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/UsersApp.scala +++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/UsersApp.scala @@ -120,7 +120,7 @@ trait UsersApp { log.info("Register user failed. Mmeeting has ended. meetingId=" + mProps.meetingID + " userId=" + msg.userID) sendMeetingHasEnded(msg.userID) } else { - val regUser = new RegisteredUser(msg.userID, msg.extUserID, msg.name, msg.role, msg.authToken) + val regUser = new RegisteredUser(msg.userID, msg.extUserID, msg.name, msg.role, msg.authToken, msg.avatarURL) usersModel.addRegisteredUser(msg.authToken, regUser) log.info("Register user success. meetingId=" + mProps.meetingID + " userId=" + msg.userID + " user=" + regUser) @@ -329,7 +329,7 @@ trait UsersApp { */ new VoiceUser(u.voiceUser.userId, msg.userID, ru.name, ru.name, joined = false, locked = false, muted = false, - talking = false, listenOnly = u.listenOnly) + talking = false, u.avatarURL, listenOnly = u.listenOnly) } } case None => { @@ -339,7 +339,7 @@ trait UsersApp { */ new VoiceUser(msg.userID, msg.userID, ru.name, ru.name, joined = false, locked = false, - muted = false, talking = false, listenOnly = false) + muted = false, talking = false, ru.avatarURL, listenOnly = false) } } @@ -363,7 +363,7 @@ trait UsersApp { ru.role, emojiStatus = "none", presenter = false, hasStream = false, locked = getInitialLockStatus(ru.role), webcamStreams = new ListSet[String](), phoneUser = false, vu, - listenOnly = vu.listenOnly, joinedWeb = true) + listenOnly = vu.listenOnly, avatarURL = vu.avatarURL, joinedWeb = true) usersModel.addUser(uvo) @@ -401,7 +401,7 @@ trait UsersApp { */ switchUserToPhoneUser((new UserJoinedVoiceConfMessage(mProps.voiceBridge, vu.userId, u.userID, u.externUserID, vu.callerName, - vu.callerNum, vu.muted, vu.talking, u.listenOnly))); + vu.callerNum, vu.muted, vu.talking, vu.avatarURL, u.listenOnly))); } } @@ -436,7 +436,7 @@ trait UsersApp { * If user is not joined listenOnly then user is joined calling through phone or webrtc. */ val vu = new VoiceUser(msg.voiceUserId, webUserId, msg.callerIdName, msg.callerIdNum, - joined = !msg.listenOnly, locked = false, muted = msg.muted, talking = msg.talking, listenOnly = msg.listenOnly) + joined = !msg.listenOnly, locked = false, muted = msg.muted, talking = msg.talking, msg.avatarURL, listenOnly = msg.listenOnly) /** * If user is not joined listenOnly then user is joined calling through phone or webrtc. @@ -446,7 +446,7 @@ trait UsersApp { Role.VIEWER, emojiStatus = "none", presenter = false, hasStream = false, locked = getInitialLockStatus(Role.VIEWER), webcamStreams = new ListSet[String](), - phoneUser = !msg.listenOnly, vu, listenOnly = msg.listenOnly, joinedWeb = false) + phoneUser = !msg.listenOnly, vu, listenOnly = msg.listenOnly, avatarURL = msg.avatarURL, joinedWeb = false) usersModel.addUser(uvo) @@ -480,7 +480,7 @@ trait UsersApp { case Some(user) => { val vu = new VoiceUser(msg.voiceUserId, msg.userId, msg.callerIdName, msg.callerIdNum, joined = true, locked = false, - msg.muted, msg.talking, msg.listenOnly) + msg.muted, msg.talking, msg.avatarURL, msg.listenOnly) val nu = user.copy(voiceUser = vu, listenOnly = msg.listenOnly) usersModel.addUser(nu) @@ -510,7 +510,7 @@ trait UsersApp { val vu = new VoiceUser(msg.voiceUserId, msg.userId, msg.callerIdName, msg.callerIdNum, joined = true, locked = false, - msg.muted, msg.talking, msg.listenOnly) + msg.muted, msg.talking, msg.avatarURL, msg.listenOnly) val nu = user.copy(voiceUser = vu, listenOnly = msg.listenOnly) usersModel.addUser(nu) @@ -550,7 +550,7 @@ trait UsersApp { * Reset user's voice status. */ val vu = new VoiceUser(user.userID, user.userID, user.name, user.name, - joined = false, locked = false, muted = false, talking = false, listenOnly = false) + joined = false, locked = false, muted = false, talking = false, user.avatarURL, listenOnly = false) val nu = user.copy(voiceUser = vu, phoneUser = false, listenOnly = false) usersModel.addUser(nu) diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/pubsub/senders/UsersMessageToJsonConverter.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/pubsub/senders/UsersMessageToJsonConverter.scala index 1214da64a5449d91d0b84dafcfb8bb3aab2dd344..1c003c65d18eadd762ccbafaa8144aa1864b1b41 100755 --- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/pubsub/senders/UsersMessageToJsonConverter.scala +++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/pubsub/senders/UsersMessageToJsonConverter.scala @@ -23,6 +23,7 @@ object UsersMessageToJsonConverter { wuser += "webcam_stream" -> user.webcamStreams.toArray wuser += "phone_user" -> user.phoneUser wuser += "listenOnly" -> user.listenOnly + wuser += "avatarURL" -> user.avatarURL val vuser = new scala.collection.mutable.HashMap[String, Any] vuser += "userid" -> user.voiceUser.userId @@ -46,6 +47,7 @@ object UsersMessageToJsonConverter { wuser += "name" -> user.name wuser += "role" -> user.role.toString() wuser += "authToken" -> user.authToken + wuser += "avatarURL" -> user.avatarURL mapAsJavaMap(wuser) } @@ -429,4 +431,4 @@ object UsersMessageToJsonConverter { val header = Util.buildHeader(MessageNames.USER_LISTEN_ONLY, None) Util.buildJson(header, payload) } -} \ No newline at end of file +} diff --git a/akka-bbb-fsesl/build.sbt b/akka-bbb-fsesl/build.sbt index 762dd4bee3bcd2bb880cb409d6103d160504cfaa..a3cfcc18b19a329f588dc44d0e97a47faa079b2f 100755 --- a/akka-bbb-fsesl/build.sbt +++ b/akka-bbb-fsesl/build.sbt @@ -50,7 +50,7 @@ libraryDependencies ++= { "com.google.code.gson" % "gson" % "1.7.1", "redis.clients" % "jedis" % "2.1.0", "org.apache.commons" % "commons-lang3" % "3.2", - "org.bigbluebutton" % "bbb-common-message" % "0.0.16", + "org.bigbluebutton" % "bbb-common-message" % "0.0.17", "org.bigbluebutton" % "bbb-fsesl-client" % "0.0.3" )} diff --git a/akka-bbb-fsesl/src/main/java/org/bigbluebutton/freeswitch/voice/FreeswitchConferenceEventListener.java b/akka-bbb-fsesl/src/main/java/org/bigbluebutton/freeswitch/voice/FreeswitchConferenceEventListener.java index 69326c4956ad119fde6f2722e3a3d18f99227c63..2037ed8634e8fd6ae5229ed538ab4c7011ed7ea0 100755 --- a/akka-bbb-fsesl/src/main/java/org/bigbluebutton/freeswitch/voice/FreeswitchConferenceEventListener.java +++ b/akka-bbb-fsesl/src/main/java/org/bigbluebutton/freeswitch/voice/FreeswitchConferenceEventListener.java @@ -61,7 +61,7 @@ public class FreeswitchConferenceEventListener implements ConferenceEventListene System.out.println("************** FreeswitchConferenceEventListener received voiceUserJoined "); VoiceUserJoinedEvent evt = (VoiceUserJoinedEvent) event; vcs.userJoinedVoiceConf(evt.getRoom(), evt.getVoiceUserId(), evt.getUserId(), evt.getCallerIdName(), - evt.getCallerIdNum(), evt.getMuted(), evt.getSpeaking()); + evt.getCallerIdNum(), evt.getMuted(), evt.getSpeaking(), evt.getAvatarURL()); } else if (event instanceof VoiceUserLeftEvent) { System.out.println("************** FreeswitchConferenceEventListener received VoiceUserLeftEvent "); VoiceUserLeftEvent evt = (VoiceUserLeftEvent) event; diff --git a/akka-bbb-fsesl/src/main/java/org/bigbluebutton/freeswitch/voice/IVoiceConferenceService.java b/akka-bbb-fsesl/src/main/java/org/bigbluebutton/freeswitch/voice/IVoiceConferenceService.java index 6bf57784fff2cb0074cfdae2f15540bb1af7e1ea..a919ef95a1cab1e48b98e68b05c718acd0eab749 100755 --- a/akka-bbb-fsesl/src/main/java/org/bigbluebutton/freeswitch/voice/IVoiceConferenceService.java +++ b/akka-bbb-fsesl/src/main/java/org/bigbluebutton/freeswitch/voice/IVoiceConferenceService.java @@ -3,7 +3,7 @@ package org.bigbluebutton.freeswitch.voice; public interface IVoiceConferenceService { void voiceConfRecordingStarted(String voiceConfId, String recordStream, Boolean recording, String timestamp); void userJoinedVoiceConf(String voiceConfId, String voiceUserId, String userId, String callerIdName, - String callerIdNum, Boolean muted, Boolean speaking); + String callerIdNum, Boolean muted, Boolean speaking, String avatarURL); void userLeftVoiceConf(String voiceConfId, String voiceUserId); void userLockedInVoiceConf(String voiceConfId, String voiceUserId, Boolean locked); void userMutedInVoiceConf(String voiceConfId, String voiceUserId, Boolean muted); diff --git a/akka-bbb-fsesl/src/main/java/org/bigbluebutton/freeswitch/voice/events/VoiceUserJoinedEvent.java b/akka-bbb-fsesl/src/main/java/org/bigbluebutton/freeswitch/voice/events/VoiceUserJoinedEvent.java index 29dd0c86619345c7596076e5e9793c78b714a2f0..7ac8f398e7d277346d6d7c0f1e6b18b814c5723c 100755 --- a/akka-bbb-fsesl/src/main/java/org/bigbluebutton/freeswitch/voice/events/VoiceUserJoinedEvent.java +++ b/akka-bbb-fsesl/src/main/java/org/bigbluebutton/freeswitch/voice/events/VoiceUserJoinedEvent.java @@ -27,10 +27,11 @@ public class VoiceUserJoinedEvent extends VoiceConferenceEvent { private final Boolean speaking; private final Boolean locked = false; private final String userId; + private final String avatarURL; public VoiceUserJoinedEvent(String userId, String voiceUserId, String room, String callerIdNum, String callerIdName, - Boolean muted, Boolean speaking) { + Boolean muted, Boolean speaking, String avatarURL) { super(room); this.userId = userId; this.voiceUserId = voiceUserId; @@ -38,6 +39,7 @@ public class VoiceUserJoinedEvent extends VoiceConferenceEvent { this.callerIdNum = callerIdNum; this.muted = muted; this.speaking = speaking; + this.avatarURL = avatarURL; } public String getUserId() { @@ -67,4 +69,8 @@ public class VoiceUserJoinedEvent extends VoiceConferenceEvent { public Boolean isLocked() { return locked; } + + public String getAvatarURL() { + return avatarURL; + } } diff --git a/akka-bbb-fsesl/src/main/java/org/bigbluebutton/freeswitch/voice/freeswitch/ESLEventListener.java b/akka-bbb-fsesl/src/main/java/org/bigbluebutton/freeswitch/voice/freeswitch/ESLEventListener.java index 7e6c2b4a3432f8228b8714121cfd66b64c50a0bf..977dd5964dbfd8b402d025aaa55150e5b378e9a6 100755 --- a/akka-bbb-fsesl/src/main/java/org/bigbluebutton/freeswitch/voice/freeswitch/ESLEventListener.java +++ b/akka-bbb-fsesl/src/main/java/org/bigbluebutton/freeswitch/voice/freeswitch/ESLEventListener.java @@ -74,7 +74,7 @@ public class ESLEventListener implements IEslEventListener { callerIdName = matcher.group(2).trim(); } - VoiceUserJoinedEvent pj = new VoiceUserJoinedEvent(voiceUserId, memberId.toString(), confName, callerId, callerIdName, muted, speaking); + VoiceUserJoinedEvent pj = new VoiceUserJoinedEvent(voiceUserId, memberId.toString(), confName, callerId, callerIdName, muted, speaking, null); conferenceEventListener.handleConferenceEvent(pj); } diff --git a/akka-bbb-fsesl/src/main/java/org/bigbluebutton/freeswitch/voice/freeswitch/actions/GetAllUsersCommand.java b/akka-bbb-fsesl/src/main/java/org/bigbluebutton/freeswitch/voice/freeswitch/actions/GetAllUsersCommand.java index 00482e01f1547c7e58d0333e24d1cdd229e11458..f4f1aab7a0452623823aeb13314734c5812c520c 100755 --- a/akka-bbb-fsesl/src/main/java/org/bigbluebutton/freeswitch/voice/freeswitch/actions/GetAllUsersCommand.java +++ b/akka-bbb-fsesl/src/main/java/org/bigbluebutton/freeswitch/voice/freeswitch/actions/GetAllUsersCommand.java @@ -99,7 +99,7 @@ public class GetAllUsersCommand extends FreeswitchCommand { } pj = new VoiceUserJoinedEvent(voiceUserId, member.getId().toString(), confXML.getConferenceRoom(), - callerId, callerIdName, member.getMuted(), member.getSpeaking()); + callerId, callerIdName, member.getMuted(), member.getSpeaking(), null); eventListener.handleConferenceEvent(pj); } diff --git a/akka-bbb-fsesl/src/main/scala/org/bigbluebutton/freeswitch/VoiceConferenceService.scala b/akka-bbb-fsesl/src/main/scala/org/bigbluebutton/freeswitch/VoiceConferenceService.scala index f7a44b71593455ac074375eef5240dfd7966fbcf..e90b5eb6ef779e0e8294a79f507ef3ea0caf6928 100755 --- a/akka-bbb-fsesl/src/main/scala/org/bigbluebutton/freeswitch/VoiceConferenceService.scala +++ b/akka-bbb-fsesl/src/main/scala/org/bigbluebutton/freeswitch/VoiceConferenceService.scala @@ -14,9 +14,9 @@ class VoiceConferenceService(sender: RedisPublisher) extends IVoiceConferenceSer } def userJoinedVoiceConf(voiceConfId: String, voiceUserId: String, userId: String, callerIdName: String, - callerIdNum: String, muted: java.lang.Boolean, talking: java.lang.Boolean) { + callerIdNum: String, muted: java.lang.Boolean, talking: java.lang.Boolean, avatarURL: String) { // println("******** FreeswitchConferenceService received voiceUserJoined vui=[" + userId + "] wui=[" + webUserId + "]") - val msg = new UserJoinedVoiceConfMessage(voiceConfId, voiceUserId, userId, callerIdName, callerIdNum, muted, talking) + val msg = new UserJoinedVoiceConfMessage(voiceConfId, voiceUserId, userId, callerIdName, callerIdNum, muted, talking, avatarURL) sender.publish(FROM_VOICE_CONF_SYSTEM_CHAN, msg.toJson()) } @@ -41,4 +41,4 @@ class VoiceConferenceService(sender: RedisPublisher) extends IVoiceConferenceSer val msg = new UserTalkingInVoiceConfMessage(voiceConfId, voiceUserId, talking) sender.publish(FROM_VOICE_CONF_SYSTEM_CHAN, msg.toJson()) } -} \ No newline at end of file +} diff --git a/bbb-common-message/build.sbt b/bbb-common-message/build.sbt index 27cdbc62e0e1499d1ac4838e327fc03ca55bed0d..4fdd12e8bafeeeee4eddddeffbdaaeba5eca70b8 100755 --- a/bbb-common-message/build.sbt +++ b/bbb-common-message/build.sbt @@ -4,7 +4,7 @@ name := "bbb-common-message" organization := "org.bigbluebutton" -version := "0.0.16" +version := "0.0.17" // We want to have our jar files in lib_managed dir. // This way we'll have the right path when we import @@ -48,19 +48,19 @@ autoScalaLibrary := false * publish to the local maven repo using "sbt publish" */ // Uncomment this to publish to local maven repo while commenting out the nexus repo -//publishTo := Some(Resolver.file("file", new File(Path.userHome.absolutePath+"/.m2/repository"))) +publishTo := Some(Resolver.file("file", new File(Path.userHome.absolutePath+"/.m2/repository"))) // Comment this out when publishing to local maven repo using SNAPSHOT version. // To push to sonatype "sbt publishSigned" -publishTo := { - val nexus = "https://oss.sonatype.org/" - if (isSnapshot.value) - Some("snapshots" at nexus + "content/repositories/snapshots") - else - Some("releases" at nexus + "service/local/staging/deploy/maven2") -} +// publishTo := { +// val nexus = "https://oss.sonatype.org/" +// if (isSnapshot.value) +// Some("snapshots" at nexus + "content/repositories/snapshots") +// else +// Some("releases" at nexus + "service/local/staging/deploy/maven2") +// } // Enables publishing to maven repo diff --git a/bbb-common-message/src/main/java/org/bigbluebutton/common/messages/Constants.java b/bbb-common-message/src/main/java/org/bigbluebutton/common/messages/Constants.java index d1f91c90b1971737625268a0bef7c6f831524d31..830c68309a2876bedf298fa0a5231afccb802a2b 100755 --- a/bbb-common-message/src/main/java/org/bigbluebutton/common/messages/Constants.java +++ b/bbb-common-message/src/main/java/org/bigbluebutton/common/messages/Constants.java @@ -125,4 +125,5 @@ public class Constants { public static final String PERM_LOCK_ON_JOIN = "lockOnJoin"; public static final String PERM_LOCK_ON_JOIN_CONFIG = "lockOnJoinConfigurable"; public static final String ENABLED = "enabled"; + public static final String AVATAR_URL = "avatarURL"; } diff --git a/bbb-common-message/src/main/java/org/bigbluebutton/common/messages/RegisterUserMessage.java b/bbb-common-message/src/main/java/org/bigbluebutton/common/messages/RegisterUserMessage.java index 5e74558fab28205e7ffa736f7ba03f54b3d34226..74052848809f93034fff9efb0b66f36042581264 100755 --- a/bbb-common-message/src/main/java/org/bigbluebutton/common/messages/RegisterUserMessage.java +++ b/bbb-common-message/src/main/java/org/bigbluebutton/common/messages/RegisterUserMessage.java @@ -14,14 +14,16 @@ public class RegisterUserMessage implements IBigBlueButtonMessage { public final String role; public final String externUserID; public final String authToken; + public final String avatarURL; - public RegisterUserMessage(String meetingID, String internalUserId, String fullname, String role, String externUserID, String authToken) { + public RegisterUserMessage(String meetingID, String internalUserId, String fullname, String role, String externUserID, String authToken, String avatarURL) { this.meetingID = meetingID; this.internalUserId = internalUserId; this.fullname = fullname; this.role = role; this.externUserID = externUserID; this.authToken = authToken; + this.avatarURL = avatarURL; } public String toJson() { @@ -33,6 +35,7 @@ public class RegisterUserMessage implements IBigBlueButtonMessage { payload.put(Constants.ROLE, role); payload.put(Constants.EXT_USER_ID, externUserID); payload.put(Constants.AUTH_TOKEN, authToken); + payload.put(Constants.AVATAR_URL, avatarURL); java.util.HashMap<String, Object> header = MessageBuilder.buildHeader(REGISTER_USER, VERSION, null); @@ -60,9 +63,10 @@ public class RegisterUserMessage implements IBigBlueButtonMessage { String role = payload.get(Constants.ROLE).getAsString(); String externUserID = payload.get(Constants.EXT_USER_ID).getAsString(); String authToken = payload.get(Constants.AUTH_TOKEN).getAsString(); + String avatarURL = payload.get(Constants.AVATAR_URL).getAsString(); //use externalUserId twice - once for external, once for internal - return new RegisterUserMessage(meetingID, externUserID, fullname, role, externUserID, authToken); + return new RegisterUserMessage(meetingID, externUserID, fullname, role, externUserID, authToken, avatarURL); } } } diff --git a/bbb-common-message/src/main/java/org/bigbluebutton/common/messages/UserJoinedVoiceConfMessage.java b/bbb-common-message/src/main/java/org/bigbluebutton/common/messages/UserJoinedVoiceConfMessage.java index cf8319dab09712bc44ed0b866aa8321108f8618c..b09101e98c4f9b9bf58331a8e3184c5340cd659e 100755 --- a/bbb-common-message/src/main/java/org/bigbluebutton/common/messages/UserJoinedVoiceConfMessage.java +++ b/bbb-common-message/src/main/java/org/bigbluebutton/common/messages/UserJoinedVoiceConfMessage.java @@ -16,6 +16,7 @@ public class UserJoinedVoiceConfMessage { public static final String CALLER_ID_NUM = "caller_id_num"; public static final String MUTED = "muted"; public static final String TALKING = "talking"; + public static final String AVATAR_URL = "avatarURL"; public final String voiceConfId; public final String voiceUserId; @@ -24,9 +25,10 @@ public class UserJoinedVoiceConfMessage { public final String callerIdNum; public final Boolean muted; public final Boolean talking; + public final String avatarURL; public UserJoinedVoiceConfMessage(String voiceConfId, String voiceUserId, String userId, - String callerIdName, String callerIdNum, Boolean muted, Boolean talking) { + String callerIdName, String callerIdNum, Boolean muted, Boolean talking, String avatarURL) { this.voiceConfId = voiceConfId; this.voiceUserId = voiceUserId; this.userId = userId; @@ -34,6 +36,7 @@ public class UserJoinedVoiceConfMessage { this.callerIdNum = callerIdNum; this.muted = muted; this.talking = talking; + this.avatarURL = avatarURL; } public String toJson() { @@ -45,6 +48,7 @@ public class UserJoinedVoiceConfMessage { payload.put(CALLER_ID_NUM, callerIdNum); payload.put(MUTED, muted); payload.put(TALKING, talking); + payload.put(AVATAR_URL, avatarURL); java.util.HashMap<String, Object> header = MessageBuilder.buildHeader(USER_JOINED_VOICE_CONF, VERSION, null); @@ -76,7 +80,8 @@ public class UserJoinedVoiceConfMessage { String callerIdNum = payload.get(CALLER_ID_NUM).getAsString(); Boolean muted = payload.get(MUTED).getAsBoolean(); Boolean talking = payload.get(TALKING).getAsBoolean(); - return new UserJoinedVoiceConfMessage(voiceConfId, voiceUserId, userId, callerIdName, callerIdNum, muted, talking); + String avatarURL = payload.get(AVATAR_URL).getAsString(); + return new UserJoinedVoiceConfMessage(voiceConfId, voiceUserId, userId, callerIdName, callerIdNum, muted, talking, avatarURL); } } } diff --git a/bbb-common-message/src/main/java/org/bigbluebutton/common/messages/Util.java b/bbb-common-message/src/main/java/org/bigbluebutton/common/messages/Util.java index 6e79a3a7cce415222900f1c86fa6734325aca0ea..2813c724baebc1bf7564243de1a4aba1dc807cac 100755 --- a/bbb-common-message/src/main/java/org/bigbluebutton/common/messages/Util.java +++ b/bbb-common-message/src/main/java/org/bigbluebutton/common/messages/Util.java @@ -88,6 +88,7 @@ public class Util { Boolean locked = user.get(Constants.LOCKED).getAsBoolean(); String extUserId = user.get(Constants.EXTERN_USERID).getAsString(); String role = user.get(Constants.ROLE).getAsString(); + String avatarURL = user.get(Constants.AVATAR_URL).getAsString(); JsonArray webcamStreamJArray = user.get(Constants.WEBCAM_STREAM).getAsJsonArray(); ArrayList<String> webcamStreams = extractWebcamStreams(webcamStreamJArray); @@ -103,6 +104,7 @@ public class Util { userMap.put("locked", locked); userMap.put("role", role); userMap.put("presenter", presenter); + userMap.put("avatarURL", avatarURL); JsonObject vu = (JsonObject) user.get(Constants.VOICEUSER); @@ -672,4 +674,4 @@ public class Util { } -} \ No newline at end of file +} diff --git a/bigbluebutton-apps/build.gradle b/bigbluebutton-apps/build.gradle index b5aa734bd78a62a65d3c4ce1eb7babf03af1d9dc..b603d56b6ada5210621acc0f92dae3b15905fcb6 100755 --- a/bigbluebutton-apps/build.gradle +++ b/bigbluebutton-apps/build.gradle @@ -104,7 +104,7 @@ dependencies { compile 'com.google.code.gson:gson:1.7.1' providedCompile 'org.apache.commons:commons-lang3:3.2' - compile 'org.bigbluebutton:bbb-common-message:0.0.16' + compile 'org.bigbluebutton:bbb-common-message:0.0.17' } test { diff --git a/bigbluebutton-apps/src/main/java/org/bigbluebutton/red5/pubsub/redis/RedisPubSubMessageHandler.java b/bigbluebutton-apps/src/main/java/org/bigbluebutton/red5/pubsub/redis/RedisPubSubMessageHandler.java index 9c1d33831d7531a2bd59b005d0143d6d2effd8f1..e7e0d4ec63185b91ea5295392d04e6e7cf4b7d2b 100755 --- a/bigbluebutton-apps/src/main/java/org/bigbluebutton/red5/pubsub/redis/RedisPubSubMessageHandler.java +++ b/bigbluebutton-apps/src/main/java/org/bigbluebutton/red5/pubsub/redis/RedisPubSubMessageHandler.java @@ -9,8 +9,11 @@ import org.bigbluebutton.red5.client.ChatClientMessageSender; import org.bigbluebutton.red5.client.WhiteboardClientMessageSender; import org.bigbluebutton.red5.client.messaging.ConnectionInvokerService; import org.bigbluebutton.red5.monitoring.BbbAppsIsKeepAliveHandler; +import org.red5.logging.Red5LoggerFactory; +import org.slf4j.Logger; public class RedisPubSubMessageHandler implements MessageHandler { + private static Logger log = Red5LoggerFactory.getLogger(RedisPubSubMessageHandler.class, "bigbluebutton"); private ConnectionInvokerService service; private UserClientMessageSender userMessageSender; @@ -44,6 +47,7 @@ public class RedisPubSubMessageHandler implements MessageHandler { } else if (channel.equalsIgnoreCase(MessagingConstants.FROM_MEETING_CHANNEL)) { meetingMessageSender.handleMeetingMessage(message); } else if (channel.equalsIgnoreCase(MessagingConstants.FROM_USERS_CHANNEL)) { + log.info("trace 0 : " + message); userMessageSender.handleUsersMessage(message); } else if (channel.equalsIgnoreCase(MessagingConstants.FROM_WHITEBOARD_CHANNEL)) { whiteboardMessageSender.handleWhiteboardMessage(message); diff --git a/bigbluebutton-client/src/org/bigbluebutton/core/UsersUtil.as b/bigbluebutton-client/src/org/bigbluebutton/core/UsersUtil.as index b22c1017315a7e1df15bab306ae4bf69c7413ab0..afedd54b3f05b610a7617d5ad81fe9cdfaa1f910 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/core/UsersUtil.as +++ b/bigbluebutton-client/src/org/bigbluebutton/core/UsersUtil.as @@ -107,6 +107,10 @@ package org.bigbluebutton.core public static function getAvatarURL():String { return UserManager.getInstance().getConference().avatarURL; } + + public static function getUserAvatarURL(userID:String):String { + return UserManager.getInstance().getConference().getUserAvatarURL(userID); + } public static function getVoiceBridge():String { return UserManager.getInstance().getConference().voiceBridge; diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/model/ConferenceParameters.as b/bigbluebutton-client/src/org/bigbluebutton/main/model/ConferenceParameters.as index 6c120f8058e709ae07879e37c4dc808b70a6eebc..2a3e730cc6d4dd81ddc41c4de6906cc8379f588a 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/main/model/ConferenceParameters.as +++ b/bigbluebutton-client/src/org/bigbluebutton/main/model/ConferenceParameters.as @@ -41,6 +41,7 @@ package org.bigbluebutton.main.model */ public var username:String; + public var avatarURL:String; /** * The role of the local user. Could be MODERATOR or VIEWER */ @@ -98,4 +99,4 @@ package org.bigbluebutton.main.model public var authToken:String; } -} \ No newline at end of file +} diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/model/users/BBBUser.as b/bigbluebutton-client/src/org/bigbluebutton/main/model/users/BBBUser.as index 626b698e431d06b2936df90c232efc02a8fd758d..0d0f2d047e3890aa372e85b6d001f8e09bcc2c22 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/main/model/users/BBBUser.as +++ b/bigbluebutton-client/src/org/bigbluebutton/main/model/users/BBBUser.as @@ -55,6 +55,7 @@ package org.bigbluebutton.main.model.users [Bindable] public var disableMyPrivateChat:Boolean = false; [Bindable] public var disableMyPublicChat:Boolean = false; [Bindable] public var lockedLayout:Boolean = false; + [Bindable] public var avatarURL:String=""; [Bindable] public function get hasStream():Boolean { diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/model/users/Conference.as b/bigbluebutton-client/src/org/bigbluebutton/main/model/users/Conference.as index 4263d715a2bdc090326867c6b922e86a4a71504d..18caedc116dea2e9b02389c35788eda7668236f0 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/main/model/users/Conference.as +++ b/bigbluebutton-client/src/org/bigbluebutton/main/model/users/Conference.as @@ -541,5 +541,20 @@ package org.bigbluebutton.main.model.users { if(myUser != null) myUser.applyLockSettings(); } + + public function getUserAvatarURL(userID:String):String { // David, to get specific user avatar url + if(userID != null ){ + var p:Object = getUserIndex(userID); + if (p != null) { + var u:BBBUser = p.participant as BBBUser; + LOGGER.info("getUserAvatarURL user =" + JSON.stringify(u)); + if(u.avatarURL == null || u.avatarURL == ""){ + return this.avatarURL; + } + return u.avatarURL; + } + } + return this.avatarURL; + } } } diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/users/services/MessageReceiver.as b/bigbluebutton-client/src/org/bigbluebutton/modules/users/services/MessageReceiver.as index 9d65a3ab671a0eb1750ae5512dbee1731f8b0c3d..b27e0c8aa66fac837de42557067af5f48c6b6f2c 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/users/services/MessageReceiver.as +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/users/services/MessageReceiver.as @@ -538,6 +538,7 @@ package org.bigbluebutton.modules.users.services user.isLeavingFlag = false; user.listenOnly = joinedUser.listenOnly; user.userLocked = joinedUser.locked; + user.avatarURL = joinedUser.avatarURL; LOGGER.info("User joined = " + JSON.stringify(user)); diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/videoconf/views/UserGraphicHolder.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/videoconf/views/UserGraphicHolder.mxml index dc6f268c79ca2453426c8b60489719bf1ab1ca4c..7c89cf12c30471e3a698cc1f15bc16a2f2163391 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/videoconf/views/UserGraphicHolder.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/videoconf/views/UserGraphicHolder.mxml @@ -98,7 +98,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. public function loadAvatar(options:VideoConfOptions):void { avatar.user = _user; avatar.options = options; - avatar.load(UsersUtil.getAvatarURL()); + avatar.load(UsersUtil.getUserAvatarURL(_user.userID)); avatarVisibility = true; setUserProperties(); diff --git a/bigbluebutton-web/build.gradle b/bigbluebutton-web/build.gradle index a5175b6a006104acdabdd91128f07616af47f3ab..377e88eb3e9a68f7c8b0237740c9d32b5f2aa780 100755 --- a/bigbluebutton-web/build.gradle +++ b/bigbluebutton-web/build.gradle @@ -52,7 +52,8 @@ dependencies { compile 'commons-httpclient:commons-httpclient:3.1' compile 'com.zaxxer:nuprocess:1.0.4' - compile 'org.bigbluebutton:bbb-common-message:0.0.13' + // compile 'org.bigbluebutton:bbb-common-message:0.0.13' + compile 'org.bigbluebutton:bbb-common-message:0.0.17' // Logging // Commenting out as it results in build failure (ralam - may 11, 2014) diff --git a/bigbluebutton-web/grails-app/controllers/org/bigbluebutton/web/controllers/ApiController.groovy b/bigbluebutton-web/grails-app/controllers/org/bigbluebutton/web/controllers/ApiController.groovy index ee6201abb5b3be92a29bd87c58a65d5e16ea8e58..e3ba67f6328fe862d6c0d8c125bb5ac3836af3f1 100755 --- a/bigbluebutton-web/grails-app/controllers/org/bigbluebutton/web/controllers/ApiController.groovy +++ b/bigbluebutton-web/grails-app/controllers/org/bigbluebutton/web/controllers/ApiController.groovy @@ -419,7 +419,7 @@ class ApiController { meetingService.addUserSession(session['user-token'], us); // Register user into the meeting. - meetingService.registerUser(us.meetingID, us.internalUserId, us.fullname, us.role, us.externUserID, us.authToken) + meetingService.registerUser(us.meetingID, us.internalUserId, us.fullname, us.role, us.externUserID, us.authToken, us.avatarURL) log.info("Session user token for " + us.fullname + " [" + session['user-token'] + "]") session.setMaxInactiveInterval(SESSION_TIMEOUT); diff --git a/bigbluebutton-web/src/java/org/bigbluebutton/api/MeetingService.java b/bigbluebutton-web/src/java/org/bigbluebutton/api/MeetingService.java index 05cd84139fa6eb6da5e8703d7380545088a8b177..5dd7a859ee107e38faf25b0b53e17a7e7c5a2361 100755 --- a/bigbluebutton-web/src/java/org/bigbluebutton/api/MeetingService.java +++ b/bigbluebutton-web/src/java/org/bigbluebutton/api/MeetingService.java @@ -99,9 +99,9 @@ public class MeetingService implements MessageListener { } public void registerUser(String meetingID, String internalUserId, - String fullname, String role, String externUserID, String authToken) { + String fullname, String role, String externUserID, String authToken, String avatarURL) { handle(new RegisterUser(meetingID, internalUserId, fullname, role, - externUserID, authToken)); + externUserID, authToken, avatarURL)); } public UserSession getUserSession(String token) { @@ -295,7 +295,7 @@ public class MeetingService implements MessageListener { private void processRegisterUser(RegisterUser message) { messagingService.registerUser(message.meetingID, message.internalUserId, message.fullname, message.role, - message.externUserID, message.authToken); + message.externUserID, message.authToken, message.avatarURL); } public String addSubscription(String meetingId, String event, @@ -583,7 +583,7 @@ public class MeetingService implements MessageListener { } User user = new User(message.userId, message.externalUserId, - message.name, message.role); + message.name, message.role, message.avatarURL); m.userJoined(user); Map<String, Object> logData = new HashMap<String, Object>(); diff --git a/bigbluebutton-web/src/java/org/bigbluebutton/api/domain/User.java b/bigbluebutton-web/src/java/org/bigbluebutton/api/domain/User.java index 5ec54946eca4ece105e237767a311f216327a113..3f022263aca21822415688d1d1ac212d77704a90 100755 --- a/bigbluebutton-web/src/java/org/bigbluebutton/api/domain/User.java +++ b/bigbluebutton-web/src/java/org/bigbluebutton/api/domain/User.java @@ -30,16 +30,18 @@ public class User { private String externalUserId; private String fullname; private String role; + private String avatarURL; private Map<String,String> status; private Boolean listeningOnly = false; private Boolean voiceJoined = false; private List<String> streams; - public User(String internalUserId, String externalUserId, String fullname, String role) { + public User(String internalUserId, String externalUserId, String fullname, String role, String avatarURL) { this.internalUserId = internalUserId; this.externalUserId = externalUserId; this.fullname = fullname; this.role = role; + this.avatarURL = avatarURL; this.status = new ConcurrentHashMap<String, String>(); this.streams = Collections.synchronizedList(new ArrayList<String>()); } @@ -72,6 +74,14 @@ public class User { this.role = role; } + public String getAvatarUrl() { + return avatarURL; + } + + public void setAvatarUrl(String avatarURL) { + this.avatarURL = avatarURL; + } + public boolean isModerator() { return this.role.equalsIgnoreCase("MODERATOR"); } diff --git a/bigbluebutton-web/src/java/org/bigbluebutton/api/messaging/Constants.java b/bigbluebutton-web/src/java/org/bigbluebutton/api/messaging/Constants.java index 3179e5ff3404cf1f79803f16d7b77247d4d9ada8..fed0e687c05c3553bd455e31ac2e8829721d0027 100644 --- a/bigbluebutton-web/src/java/org/bigbluebutton/api/messaging/Constants.java +++ b/bigbluebutton-web/src/java/org/bigbluebutton/api/messaging/Constants.java @@ -92,4 +92,5 @@ public class Constants { public static final String VIEWER_PASS = "viewer_pass"; public static final String CREATE_TIME = "create_time"; public static final String CREATE_DATE = "create_date"; + public static final String AVATAR_URL = "avatarURL"; } diff --git a/bigbluebutton-web/src/java/org/bigbluebutton/api/messaging/MeetingMessageHandler.java b/bigbluebutton-web/src/java/org/bigbluebutton/api/messaging/MeetingMessageHandler.java index ca0e98202b98b671f8087b88c0160b6af4d9ba93..f1373402a5c906fcc084e7dfff1c62db1346e3e6 100755 --- a/bigbluebutton-web/src/java/org/bigbluebutton/api/messaging/MeetingMessageHandler.java +++ b/bigbluebutton-web/src/java/org/bigbluebutton/api/messaging/MeetingMessageHandler.java @@ -98,7 +98,6 @@ public class MeetingMessageHandler implements MessageHandler { if (header.has("name")) { String messageName = header.get("name").getAsString(); - if (MessagingConstants.USER_JOINED_EVENT.equalsIgnoreCase(messageName)) { String meetingId = payload.get("meeting_id").getAsString(); JsonObject user = (JsonObject) payload.get("user"); @@ -107,9 +106,10 @@ public class MeetingMessageHandler implements MessageHandler { String externuserid = user.get("extern_userid").getAsString(); String username = user.get("name").getAsString(); String role = user.get("role").getAsString(); + String avatarURL = user.get("avatarURL").getAsString(); for (MessageListener listener : listeners) { - listener.handle(new UserJoined(meetingId, userid, externuserid, username, role)); + listener.handle(new UserJoined(meetingId, userid, externuserid, username, role, avatarURL)); } } else if(MessagingConstants.USER_STATUS_CHANGE_EVENT.equalsIgnoreCase(messageName)) { String meetingId = payload.get("meeting_id").getAsString(); diff --git a/bigbluebutton-web/src/java/org/bigbluebutton/api/messaging/MessageSender.java b/bigbluebutton-web/src/java/org/bigbluebutton/api/messaging/MessageSender.java index 9f73c3490b4bd84a0140b7a6bca0c632c45f88ab..5f3b830f6f46515963a199bfa4756ea1a21814d6 100755 --- a/bigbluebutton-web/src/java/org/bigbluebutton/api/messaging/MessageSender.java +++ b/bigbluebutton-web/src/java/org/bigbluebutton/api/messaging/MessageSender.java @@ -79,6 +79,8 @@ public class MessageSender { public void run() { Jedis jedis = redisPool.getResource(); try { + if(channel.equalsIgnoreCase("bigbluebutton:from-bbb-apps:users") || channel.equalsIgnoreCase("bigbluebutton:from-bbb-apps:meeting")) + log.info("web-Publishing..." + channel + ":" + message); jedis.publish(channel, message); } catch(Exception e){ log.warn("Cannot publish the message to pubsub", e); diff --git a/bigbluebutton-web/src/java/org/bigbluebutton/api/messaging/MessageToJson.java b/bigbluebutton-web/src/java/org/bigbluebutton/api/messaging/MessageToJson.java index 372950a73e1b6dd40ee3c654b1e8c6d9371e2ba0..98649191b5de42c2eff49fd58c3ff82391e57d09 100644 --- a/bigbluebutton-web/src/java/org/bigbluebutton/api/messaging/MessageToJson.java +++ b/bigbluebutton-web/src/java/org/bigbluebutton/api/messaging/MessageToJson.java @@ -18,6 +18,7 @@ public class MessageToJson { payload.put(Constants.ROLE, message.role); payload.put(Constants.EXT_USER_ID, message.externUserID); payload.put(Constants.AUTH_TOKEN, message.authToken); + payload.put(Constants.AVATAR_URL, message.avatarURL); java.util.HashMap<String, Object> header = MessageBuilder.buildHeader(RegisterUserMessage.REGISTER_USER, message.VERSION, null); diff --git a/bigbluebutton-web/src/java/org/bigbluebutton/api/messaging/MessagingService.java b/bigbluebutton-web/src/java/org/bigbluebutton/api/messaging/MessagingService.java index 470c9352a497d222716345719c041d16cd03e307..7bc92d091af6aaefa1250ad47386e5ddaf6c31d2 100755 --- a/bigbluebutton-web/src/java/org/bigbluebutton/api/messaging/MessagingService.java +++ b/bigbluebutton-web/src/java/org/bigbluebutton/api/messaging/MessagingService.java @@ -35,6 +35,6 @@ public interface MessagingService { String storeSubscription(String meetingId, String externalMeetingID, String callbackURL); boolean removeSubscription(String meetingId, String subscriptionId); List<Map<String,String>> listSubscriptions(String meetingId); - void registerUser(String meetingID, String internalUserId, String fullname, String role, String externUserID, String authToken); + void registerUser(String meetingID, String internalUserId, String fullname, String role, String externUserID, String authToken, String avatarURL); void sendKeepAlive(String system, Long timestamp); } diff --git a/bigbluebutton-web/src/java/org/bigbluebutton/api/messaging/RedisMessagingService.java b/bigbluebutton-web/src/java/org/bigbluebutton/api/messaging/RedisMessagingService.java index b22a31c46f50b1f80127463d5df8305abb5628b3..44aa48e33c4d9db13dbdab117e800cb678b18e18 100755 --- a/bigbluebutton-web/src/java/org/bigbluebutton/api/messaging/RedisMessagingService.java +++ b/bigbluebutton-web/src/java/org/bigbluebutton/api/messaging/RedisMessagingService.java @@ -68,8 +68,8 @@ public class RedisMessagingService implements MessagingService { sender.send(MessagingConstants.TO_MEETING_CHANNEL, json); } - public void registerUser(String meetingID, String internalUserId, String fullname, String role, String externUserID, String authToken) { - RegisterUserMessage msg = new RegisterUserMessage(meetingID, internalUserId, fullname, role, externUserID, authToken); + public void registerUser(String meetingID, String internalUserId, String fullname, String role, String externUserID, String authToken, String avatarURL) { + RegisterUserMessage msg = new RegisterUserMessage(meetingID, internalUserId, fullname, role, externUserID, authToken, avatarURL); String json = MessageToJson.registerUserToJson(msg); log.info("Sending register user message to bbb-apps:[{}]", json); sender.send(MessagingConstants.TO_MEETING_CHANNEL, json); diff --git a/bigbluebutton-web/src/java/org/bigbluebutton/api/messaging/converters/messages/RegisterUserMessage.java b/bigbluebutton-web/src/java/org/bigbluebutton/api/messaging/converters/messages/RegisterUserMessage.java index d9593dc34400c5c23d377566f07422ff057f652a..c1bfa9c085d3f76e7854bb90a8561a92f267158a 100644 --- a/bigbluebutton-web/src/java/org/bigbluebutton/api/messaging/converters/messages/RegisterUserMessage.java +++ b/bigbluebutton-web/src/java/org/bigbluebutton/api/messaging/converters/messages/RegisterUserMessage.java @@ -10,13 +10,15 @@ public class RegisterUserMessage { public final String role; public final String externUserID; public final String authToken; + public final String avatarURL; - public RegisterUserMessage(String meetingID, String internalUserId, String fullname, String role, String externUserID, String authToken) { + public RegisterUserMessage(String meetingID, String internalUserId, String fullname, String role, String externUserID, String authToken, String avatarURL) { this.meetingID = meetingID; this.internalUserId = internalUserId; this.fullname = fullname; this.role = role; this.externUserID = externUserID; this.authToken = authToken; + this.avatarURL = avatarURL; } } diff --git a/bigbluebutton-web/src/java/org/bigbluebutton/api/messaging/messages/RegisterUser.java b/bigbluebutton-web/src/java/org/bigbluebutton/api/messaging/messages/RegisterUser.java index 9a9d3f48e7cdb9e0540ec833be525624b72846da..3c3451297cbb4e709d32ec3ad35f05ad155669fb 100644 --- a/bigbluebutton-web/src/java/org/bigbluebutton/api/messaging/messages/RegisterUser.java +++ b/bigbluebutton-web/src/java/org/bigbluebutton/api/messaging/messages/RegisterUser.java @@ -8,13 +8,15 @@ public class RegisterUser implements IMessage { public final String role; public final String externUserID; public final String authToken; + public final String avatarURL; - public RegisterUser(String meetingID, String internalUserId, String fullname, String role, String externUserID, String authToken) { + public RegisterUser(String meetingID, String internalUserId, String fullname, String role, String externUserID, String authToken, String avatarURL) { this.meetingID = meetingID; this.internalUserId = internalUserId; this.fullname = fullname; this.role = role; this.externUserID = externUserID; this.authToken = authToken; + this.avatarURL = avatarURL; } } diff --git a/bigbluebutton-web/src/java/org/bigbluebutton/api/messaging/messages/UserJoined.java b/bigbluebutton-web/src/java/org/bigbluebutton/api/messaging/messages/UserJoined.java index 1e415f1af2d8d8caff6eea2c177412bb44608bd2..cad1acb397fa0aba229edc39161f97112024977d 100755 --- a/bigbluebutton-web/src/java/org/bigbluebutton/api/messaging/messages/UserJoined.java +++ b/bigbluebutton-web/src/java/org/bigbluebutton/api/messaging/messages/UserJoined.java @@ -6,12 +6,14 @@ public class UserJoined implements IMessage { public final String externalUserId; public final String name; public final String role; + public final String avatarURL; - public UserJoined(String meetingId, String userId, String externalUserId, String name, String role) { + public UserJoined(String meetingId, String userId, String externalUserId, String name, String role, String avatarURL) { this.meetingId = meetingId; this.userId = userId; this.externalUserId = externalUserId; this.name = name; this.role = role; + this.avatarURL = avatarURL; } } diff --git a/bigbluebutton-web/test/unit/org/bigbluebutton/api/messaging/NullMessagingService.java b/bigbluebutton-web/test/unit/org/bigbluebutton/api/messaging/NullMessagingService.java index 9ff91f6c1dd62b4ca091e4dac15b3b1152f8b054..23ad693a62dd68a7890c9b89caa5f7abeeb9de9b 100644 --- a/bigbluebutton-web/test/unit/org/bigbluebutton/api/messaging/NullMessagingService.java +++ b/bigbluebutton-web/test/unit/org/bigbluebutton/api/messaging/NullMessagingService.java @@ -85,7 +85,7 @@ public class NullMessagingService implements MessagingService { @Override public void registerUser(String meetingID, String internalUserId, - String fullname, String role, String externUserID, String authToken) { + String fullname, String role, String externUserID, String authToken, String avatarURL) { // TODO Auto-generated method stub }