Merge branch 'testing-version-002' of github.com:antobinary/bigbluebutton into testing-version-001

This commit is contained in:
Anton Georgiev 2014-09-19 21:22:59 +00:00
commit 26eaa625fc
7 changed files with 58 additions and 34 deletions

View File

@ -110,16 +110,20 @@ class BigBlueButtonActor(outGW: MessageOutGateway) extends Actor {
for(i <- 0 until arr.length) { for(i <- 0 until arr.length) {
val id = arr(i) val id = arr(i)
val duration = meetings.get(arr(i)).head.getDuration()
val name = meetings.get(arr(i)).head.getMeetingName() val name = meetings.get(arr(i)).head.getMeetingName()
val recorded = meetings.get(arr(i)).head.getRecordedStatus() val recorded = meetings.get(arr(i)).head.getRecordedStatus()
val voiceBridge = meetings.get(arr(i)).head.getVoiceBridgeNumber()
var info = new MeetingInfo(id, name, recorded) var info = new MeetingInfo(id, name, recorded, voiceBridge, duration)
resultArray(i) = info resultArray(i) = info
//remove later //remove later
println("for a meeting:" + id) println("for a meeting:" + id)
println("Meeting Name = " + meetings.get(id).head.getMeetingName()) println("Meeting Name = " + meetings.get(id).head.getMeetingName())
println("isRecorded = " + meetings.get(id).head.getRecordedStatus()) println("isRecorded = " + meetings.get(id).head.getRecordedStatus())
println("voiceBridge = " + voiceBridge)
println("duration = " + duration)
//send the users //send the users
this ! (new GetUsers(id, "nodeJSapp")) this ! (new GetUsers(id, "nodeJSapp"))

View File

@ -29,6 +29,10 @@ class MeetingActor(val meetingID: String, val meetingName: String, val recorded:
var muted = false; var muted = false;
var meetingEnded = false var meetingEnded = false
def getDuration():Long = {
duration
}
def getMeetingName():String = { def getMeetingName():String = {
meetingName meetingName
} }
@ -36,6 +40,10 @@ class MeetingActor(val meetingID: String, val meetingName: String, val recorded:
def getRecordedStatus():Boolean = { def getRecordedStatus():Boolean = {
recorded recorded
} }
def getVoiceBridgeNumber():String = {
voiceBridge
}
val TIMER_INTERVAL = 30000 val TIMER_INTERVAL = 30000
var hasLastWebUserLeft = false var hasLastWebUserLeft = false

View File

@ -104,4 +104,4 @@ case class MeetingPasswords(moderatorPass: String, viewerPass: String)
case class MeetingDuration(duration: Int = 0, createdTime: Long = 0, case class MeetingDuration(duration: Int = 0, createdTime: Long = 0,
startTime: Long = 0, endTime: Long = 0) startTime: Long = 0, endTime: Long = 0)
case class MeetingInfo(meetingID: String, meetingName: String, recorded: Boolean) case class MeetingInfo(meetingID: String, meetingName: String, recorded: Boolean, voiceBridge: String, duration: Long)

View File

@ -20,6 +20,9 @@
meet?.meetingName meet?.meetingName
else null else null
@getTimeOfJoining = ->
Meteor.Users.findOne({"user.userid": getInSession("userId")})?.user?.time_of_joining
# Finds the names of all people the current user is in a private conversation with # Finds the names of all people the current user is in a private conversation with
# Removes yourself and duplicates if they exist # Removes yourself and duplicates if they exist
@getPrivateChatees = -> @getPrivateChatees = ->
@ -116,6 +119,12 @@ Handlebars.registerHelper "isUserSharingAudio", (u) ->
user?.user?.voiceUser?.joined user?.user?.voiceUser?.joined
else return false else return false
Handlebars.registerHelper "isUserListenOnly", (u) ->
if u?
user = Meteor.Users.findOne({userId:u.userid})
user?.user?.listenOnly
else return false
Handlebars.registerHelper "isUserSharingVideo", (u) -> Handlebars.registerHelper "isUserSharingVideo", (u) ->
u.webcam_stream?.length isnt 0 u.webcam_stream?.length isnt 0

View File

@ -50,14 +50,14 @@ Template.chatbar.helpers
after = before = greeting = [] after = before = greeting = []
if chattingWith is 'PUBLIC_CHAT' # find all public messages if chattingWith is 'PUBLIC_CHAT' # find all public messages
before = Meteor.Chat.find({'message.chat_type': chattingWith, 'message.from_time': {$lt: String(Meteor.Users.findOne({"user.userid": getInSession("userId")})?.user?.time_of_joining)}}).fetch() before = Meteor.Chat.find({'message.chat_type': chattingWith, 'message.from_time': {$lt: String(getTimeOfJoining())}}).fetch()
after = Meteor.Chat.find({'message.chat_type': chattingWith, 'message.from_time': {$gt: String(Meteor.Users.findOne({"user.userid": getInSession("userId")})?.user?.time_of_joining)}}).fetch() after = Meteor.Chat.find({'message.chat_type': chattingWith, 'message.from_time': {$gt: String(getTimeOfJoining())}}).fetch()
greeting = [ greeting = [
'message': 'message':
'message': Template.chatbar.getChatGreeting(), 'message': Template.chatbar.getChatGreeting(),
'from_username': 'System', 'from_username': 'System',
'from_time': Meteor.Users.findOne({"user.userid": getInSession("userId")})?.user?.time_of_joining 'from_time': getTimeOfJoining()
'from_color': '0x3399FF' # A nice blue in hex 'from_color': '0x3399FF' # A nice blue in hex
] ]
else else

View File

@ -4,9 +4,10 @@
{{/if}}</td> {{/if}}</td>
<!-- Should use much more noticeable icons than just bootstrap's volume-up & volume-down to differentiate talking but it is good for now --> <!-- Should use much more noticeable icons than just bootstrap's volume-up & volume-down to differentiate talking but it is good for now -->
<td>{{#if isUserSharingAudio user}} <td>
{{#if isUserSharingAudio user}}
{{#if isUserMuted user}} {{#if isUserMuted user}}
<span class="userListSettingIcon glyphicon glyphicon-volume-off"></span> <span class="userListSettingIcon glyphicon glyphicon-volume-off" title="Muted"></span>
{{else}} {{else}}
{{#if isUserTalking user}} {{#if isUserTalking user}}
<span class="userListSettingIcon glyphicon glyphicon-volume-up"></span> <span class="userListSettingIcon glyphicon glyphicon-volume-up"></span>
@ -14,7 +15,12 @@
<span class="userListSettingIcon glyphicon glyphicon-volume-down"></span> <span class="userListSettingIcon glyphicon glyphicon-volume-down"></span>
{{/if}} {{/if}}
{{/if}} {{/if}}
{{/if}}</td> {{/if}}
<!-- listen only: -->
{{#if isUserListenOnly user}}
<span class="userListSettingIcon glyphicon glyphicon-headphones" title="Listening only"></span>
{{/if}}
</td>
<td>{{#if user.presenter}}<span class="userListSettingIcon glyphicon glyphicon-picture"></span>{{/if}}</td> <td>{{#if user.presenter}}<span class="userListSettingIcon glyphicon glyphicon-picture"></span>{{/if}}</td>

View File

@ -168,39 +168,26 @@ class Meteor.RedisPubSub
] ]
unless message.header?.name in ignoredEventTypes unless message.header?.name in ignoredEventTypes
#console.log "\nchannel=" + channel
#console.log "correlationId=" + correlationId if correlationId?
console.log "eventType=" + message.header?.name #+ "\n" console.log "eventType=" + message.header?.name #+ "\n"
#log.debug({ pattern: pattern, channel: channel, message: message}, "Received a message from redis")
console.log jsonMsg console.log jsonMsg
if message.header?.name is 'user_voice_talking_message' # handle voice events
u = Meteor.Users.findOne({'userId': message.payload?.user?.userid, 'meetingId': meetingId}) if message.header?.name in ['user_left_voice_message', 'user_joined_voice_message', 'user_voice_talking_message', 'user_voice_muted_message']
if u? voiceUser = message.payload?.user?.voiceUser
if not u?.user?.voiceUser?.muted @updateVoiceUser(meetingId, voiceUser)
console.log "setting talking to #{message?.payload?.user?.voiceUser?.talking}"
Meteor.Users.update({_id:u._id}, {$set: {'user.voiceUser.talking':message?.payload?.user?.voiceUser?.talking}})
Meteor.Users.update({_id:u._id}, {$set: {'user.voiceUser.joined':true}})
else
Meteor.Users.update({_id:u._id}, {$set: {'user.voiceUser.talking':false}})
if message.header?.name is 'user_voice_muted_message' # listen only
u = Meteor.Users.findOne({'userId': message.payload?.user?.userid, 'meetingId': meetingId}) if message.header?.name is 'user_listening_only'
console.log "\n\n\n got a muted event and the user is #{u}" u = Meteor.Users.findOne({userId: message.payload?.userid, meetingId: meetingId})
Meteor.Users.update({_id:u._id}, {$set: {'user.listenOnly':message.payload?.listen_only}})
if u? # most likely we don't need to ensure that the user's voiceUser's {talking, joined, muted, locked} are false by default #TODO?
# make sure the user is not currently in talking mode
Meteor.Users.update({_id:u._id}, {$set: {'user.voiceUser.talking': false}})
# update to muted
Meteor.Users.update({_id:u._id}, {$set: {'user.voiceUser.muted':message?.payload?.user?.voiceUser?.muted}})
else console.log "ERROR!! did not find a matching user to mute!!"
if message.header?.name is "get_all_meetings_reply" if message.header?.name is "get_all_meetings_reply"
console.log "Let's store some data for the running meetings so that when an HTML5 client joins everything is ready!" console.log "Let's store some data for the running meetings so that when an HTML5 client joins everything is ready!"
listOfMeetings = message.payload?.meetings listOfMeetings = message.payload?.meetings
for meeting in listOfMeetings for meeting in listOfMeetings
# we currently do not have voice_conf or duration in this message. # we currently do not have voice_conf or duration in this message.
Meteor.call("addMeetingToCollection", meeting.meetingID, meeting.meetingName, meeting.recorded, "", "") Meteor.call("addMeetingToCollection", meeting.meetingID, meeting.meetingName, meeting.recorded, meeting.voiceBridge, meeting.duration)
if message.header?.name is "get_users_reply" and message.payload?.requester_id is "nodeJSapp" if message.header?.name is "get_users_reply" and message.payload?.requester_id is "nodeJSapp"
unless Meteor.Meetings.findOne({MeetingId: message.payload?.meeting_id})? unless Meteor.Meetings.findOne({MeetingId: message.payload?.meeting_id})?
@ -226,9 +213,6 @@ class Meteor.RedisPubSub
if message.header?.name is "send_public_chat_message" or message.header?.name is "send_private_chat_message" if message.header?.name is "send_public_chat_message" or message.header?.name is "send_private_chat_message"
messageObject = message.payload?.message messageObject = message.payload?.message
#use current_time instead of from_time for sorting the chat messages. We had issues with from_time
messageObject.from_time = message.header?.current_time
Meteor.call("addChatToCollection", meetingId, messageObject) Meteor.call("addChatToCollection", meetingId, messageObject)
if message.header?.name is "meeting_created_message" if message.header?.name is "meeting_created_message"
@ -354,6 +338,18 @@ class Meteor.RedisPubSub
unless message.header?.name is "disconnect_all_users_message" unless message.header?.name is "disconnect_all_users_message"
Meteor.call("removeMeetingFromCollection", meetingId) Meteor.call("removeMeetingFromCollection", meetingId)
#update a voiceUser
updateVoiceUser: (meetingId, voiceUserObject) ->
console.log "I am updating the voiceUserObject with the following: " + JSON.stringify voiceUserObject
u = Meteor.Users.findOne({userId: voiceUserObject?.web_userid, meetingId: meetingId})
if u?
Meteor.Users.update({_id:u._id}, {$set: {'user.voiceUser.talking':voiceUserObject?.talking}})# talking
Meteor.Users.update({_id:u._id}, {$set: {'user.voiceUser.joined':voiceUserObject?.joined}})# joined
Meteor.Users.update({_id:u._id}, {$set: {'user.voiceUser.locked':voiceUserObject?.locked}})# locked
Meteor.Users.update({_id:u._id}, {$set: {'user.voiceUser.muted':voiceUserObject?.muted}})# muted
else
console.log "ERROR! did not find such voiceUser!"
# message should be an object # message should be an object
publish: (channel, message) -> publish: (channel, message) ->
console.log "Publishing channel=#{channel}, message=#{JSON.stringify(message)}" console.log "Publishing channel=#{channel}, message=#{JSON.stringify(message)}"
@ -390,3 +386,4 @@ class Meteor.RedisPubSub
"payload": {} # I need this, otherwise bbb-apps won't recognize the message "payload": {} # I need this, otherwise bbb-apps won't recognize the message
@pubClient.publish(Meteor.config.redis.channels.toBBBApps.meeting, JSON.stringify (message)) @pubClient.publish(Meteor.config.redis.channels.toBBBApps.meeting, JSON.stringify (message))