From dffeeb8daf5ae5aa3ece6c86d32f2151e95437cc Mon Sep 17 00:00:00 2001 From: Ghazi Triki <ghazi.triki@riadvice.tn> Date: Mon, 30 Jul 2018 11:43:12 +0100 Subject: [PATCH] Update user last activity time when he sends a message. --- ...scala => UserActivitySignCmdMsgHdlr.scala} | 6 ++--- .../senders/ReceivedJsonMsgHandlerActor.scala | 4 +-- .../core/running/MeetingActor.scala | 26 ++++++++++++------- .../bigbluebutton/core2/AnalyticsActor.scala | 1 + .../core2/message/senders/Sender.scala | 4 +-- .../client/meeting/AllowedMessageNames.scala | 2 +- .../bigbluebutton/common2/msgs/UsersMgs.scala | 6 ++--- .../modules/users/services/MessageSender.as | 2 +- 8 files changed, 29 insertions(+), 22 deletions(-) rename akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/users/{UserActivitySignResponseMsgHdlr.scala => UserActivitySignCmdMsgHdlr.scala} (64%) diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/users/UserActivitySignResponseMsgHdlr.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/users/UserActivitySignCmdMsgHdlr.scala similarity index 64% rename from akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/users/UserActivitySignResponseMsgHdlr.scala rename to akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/users/UserActivitySignCmdMsgHdlr.scala index a68b97392a..a41595e2e5 100755 --- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/users/UserActivitySignResponseMsgHdlr.scala +++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/users/UserActivitySignCmdMsgHdlr.scala @@ -1,13 +1,13 @@ package org.bigbluebutton.core.apps.users -import org.bigbluebutton.common2.msgs.UserActivitySignResponseMsg +import org.bigbluebutton.common2.msgs.UserActivitySignCmdMsg import org.bigbluebutton.core.models.Users2x import org.bigbluebutton.core.running.MeetingActor -trait UserActivitySignResponseMsgHdlr { +trait UserActivitySignCmdMsgHdlr { this: MeetingActor => - def handleUserActivitySignResponseMsg(msg: UserActivitySignResponseMsg): Unit = { + def handleUserActivitySignCmdMsg(msg: UserActivitySignCmdMsg): Unit = { for { user <- Users2x.findWithIntId(liveMeeting.users2x, msg.body.userId) } yield { diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/pubsub/senders/ReceivedJsonMsgHandlerActor.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/pubsub/senders/ReceivedJsonMsgHandlerActor.scala index 15748ab208..464e40471f 100755 --- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/pubsub/senders/ReceivedJsonMsgHandlerActor.scala +++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/pubsub/senders/ReceivedJsonMsgHandlerActor.scala @@ -94,8 +94,8 @@ class ReceivedJsonMsgHandlerActor( routeGenericMsg[RemoveUserFromPresenterGroupCmdMsg](envelope, jsonNode) case GetPresenterGroupReqMsg.NAME => routeGenericMsg[GetPresenterGroupReqMsg](envelope, jsonNode) - case UserActivitySignResponseMsg.NAME => - routeGenericMsg[UserActivitySignResponseMsg](envelope, jsonNode) + case UserActivitySignCmdMsg.NAME => + routeGenericMsg[UserActivitySignCmdMsg](envelope, jsonNode) // Poll case StartCustomPollReqMsg.NAME => diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/running/MeetingActor.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/running/MeetingActor.scala index aa54cde62d..511680e33f 100644 --- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/running/MeetingActor.scala +++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/running/MeetingActor.scala @@ -78,7 +78,7 @@ class MeetingActor( with SyncGetMeetingInfoRespMsgHdlr with ClientToServerLatencyTracerMsgHdlr with ValidateConnAuthTokenSysMsgHdlr - with UserActivitySignResponseMsgHdlr { + with UserActivitySignCmdMsgHdlr { override val supervisorStrategy = OneForOneStrategy(maxNrOfRetries = 10, withinTimeRange = 1 minute) { case e: Exception => { @@ -395,26 +395,30 @@ class MeetingActor( case m: SendPrivateMessagePubMsg => chatApp2x.handle(m, liveMeeting, msgBus) updateUserLastActivity(m.body.message.fromUserId) - case m: ClearPublicChatHistoryPubMsg => state = chatApp2x.handle(m, state, liveMeeting, msgBus) + case m: ClearPublicChatHistoryPubMsg => state = chatApp2x.handle(m, state, liveMeeting, msgBus) // Screenshare - case m: ScreenshareStartedVoiceConfEvtMsg => screenshareApp2x.handle(m, liveMeeting, msgBus) - case m: ScreenshareStoppedVoiceConfEvtMsg => screenshareApp2x.handle(m, liveMeeting, msgBus) + case m: ScreenshareStartedVoiceConfEvtMsg => screenshareApp2x.handle(m, liveMeeting, msgBus) + case m: ScreenshareStoppedVoiceConfEvtMsg => screenshareApp2x.handle(m, liveMeeting, msgBus) case m: ScreenshareRtmpBroadcastStartedVoiceConfEvtMsg => screenshareApp2x.handle(m, liveMeeting, msgBus) case m: ScreenshareRtmpBroadcastStoppedVoiceConfEvtMsg => screenshareApp2x.handle(m, liveMeeting, msgBus) - case m: GetScreenshareStatusReqMsg => screenshareApp2x.handle(m, liveMeeting, msgBus) + case m: GetScreenshareStatusReqMsg => screenshareApp2x.handle(m, liveMeeting, msgBus) // GroupChat - case m: CreateGroupChatReqMsg => state = groupChatApp.handle(m, state, liveMeeting, msgBus) + case m: CreateGroupChatReqMsg => + state = groupChatApp.handle(m, state, liveMeeting, msgBus) + updateUserLastActivity(m.header.userId) case m: GetGroupChatMsgsReqMsg => state = groupChatApp.handle(m, state, liveMeeting, msgBus) - case m: GetGroupChatsReqMsg => state = groupChatApp.handle(m, state, liveMeeting, msgBus) - case m: SendGroupChatMessageMsg => state = groupChatApp.handle(m, state, liveMeeting, msgBus) + case m: GetGroupChatsReqMsg => state = groupChatApp.handle(m, state, liveMeeting, msgBus) + case m: SendGroupChatMessageMsg => + state = groupChatApp.handle(m, state, liveMeeting, msgBus) + updateUserLastActivity(m.body.msg.sender.id) case m: ValidateConnAuthTokenSysMsg => handleValidateConnAuthTokenSysMsg(m) - case m: UserActivitySignResponseMsg => handleUserActivitySignResponseMsg(m) + case m: UserActivitySignCmdMsg => handleUserActivitySignCmdMsg(m) - case _ => log.warning("***** Cannot handle " + msg.envelope.name) + case _ => log.warning("***** Cannot handle " + msg.envelope.name) } } @@ -613,6 +617,7 @@ class MeetingActor( } def warnPotentiallyInactiveUsers(): Unit = { + log.info("Checking for potentially inactive users and sending them a message to show a sign of life.") val users = Users2x.findAll(liveMeeting.users2x) users foreach { u => val active = (lastUserInactivityInspectSentOn - expiryTracker.userInactivityThresholdInMs) < u.lastActivityTime @@ -623,6 +628,7 @@ class MeetingActor( } def disconnectInactiveUsers(): Unit = { + log.info("Disconnecting inactive users that didn't show any sign of life since we warned them.") val users = Users2x.findAll(liveMeeting.users2x) users foreach { u => val respondedOntIme = (lastUserInactivityInspectSentOn - expiryTracker.userInactivityThresholdInMs) < u.lastActivityTime && (lastUserInactivityInspectSentOn + expiryTracker.userActivitySignResponseDelayInMs) > u.lastActivityTime diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core2/AnalyticsActor.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core2/AnalyticsActor.scala index a1060322be..7a4eec74e3 100755 --- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core2/AnalyticsActor.scala +++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core2/AnalyticsActor.scala @@ -82,6 +82,7 @@ class AnalyticsActor extends Actor with ActorLogging { case m: UserBroadcastCamStoppedEvtMsg => logMessage(msg) case m: UserBroadcastCamStartedEvtMsg => logMessage(msg) case m: EjectUserFromMeetingSysMsg => logMessage(msg) + case m: UserActivitySignCmdMsg => logMessage(msg) case m: UserInactivityInspectMsg => logMessage(msg) case m: ChangeUserRoleCmdMsg => logMessage(msg) diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core2/message/senders/Sender.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core2/message/senders/Sender.scala index 76000ccdfb..00fea987da 100755 --- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core2/message/senders/Sender.scala +++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core2/message/senders/Sender.scala @@ -18,8 +18,8 @@ object Sender { } def sendUserInactivityInspectMsg(meetingId: String, userId: String, responseDelay: Long, outGW: OutMsgRouter): Unit = { - val ejectFromMeetingSystemEvent = MsgBuilder.buildUserInactivityInspectMsg(meetingId, userId, responseDelay) - outGW.send(ejectFromMeetingSystemEvent) + val userInactivityInspectMsg = MsgBuilder.buildUserInactivityInspectMsg(meetingId, userId, responseDelay) + outGW.send(userInactivityInspectMsg) } } diff --git a/bbb-apps-common/src/main/scala/org/bigbluebutton/client/meeting/AllowedMessageNames.scala b/bbb-apps-common/src/main/scala/org/bigbluebutton/client/meeting/AllowedMessageNames.scala index 6c8b0ec4ae..9899f62ff9 100644 --- a/bbb-apps-common/src/main/scala/org/bigbluebutton/client/meeting/AllowedMessageNames.scala +++ b/bbb-apps-common/src/main/scala/org/bigbluebutton/client/meeting/AllowedMessageNames.scala @@ -34,7 +34,7 @@ object AllowedMessageNames { GetGuestPolicyReqMsg.NAME, SetGuestPolicyCmdMsg.NAME, GuestsWaitingApprovedMsg.NAME, - UserActivitySignResponseMsg.NAME, + UserActivitySignCmdMsg.NAME, // Webcams GetWebcamsOnlyForModeratorReqMsg.NAME, diff --git a/bbb-common-message/src/main/scala/org/bigbluebutton/common2/msgs/UsersMgs.scala b/bbb-common-message/src/main/scala/org/bigbluebutton/common2/msgs/UsersMgs.scala index 3d79f64e1b..dea63077aa 100755 --- a/bbb-common-message/src/main/scala/org/bigbluebutton/common2/msgs/UsersMgs.scala +++ b/bbb-common-message/src/main/scala/org/bigbluebutton/common2/msgs/UsersMgs.scala @@ -378,6 +378,6 @@ object UserInactivityInspectMsg { val NAME = "UserInactivityInspectMsg" } case class UserInactivityInspectMsg(header: BbbClientMsgHeader, body: UserInactivityInspectMsgBody) extends StandardMsg case class UserInactivityInspectMsgBody(meetingId: String, responseDelay: Long) -object UserActivitySignResponseMsg { val NAME = "UserActivitySignResponseMsg" } -case class UserActivitySignResponseMsg(header: BbbClientMsgHeader, body: UserActivitySignResponseMsgBody) extends StandardMsg -case class UserActivitySignResponseMsgBody(userId: String) +object UserActivitySignCmdMsg { val NAME = "UserActivitySignCmdMsg" } +case class UserActivitySignCmdMsg(header: BbbClientMsgHeader, body: UserActivitySignCmdMsgBody) extends StandardMsg +case class UserActivitySignCmdMsgBody(userId: String) diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/users/services/MessageSender.as b/bigbluebutton-client/src/org/bigbluebutton/modules/users/services/MessageSender.as index 5493e81c88..61143241c8 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/users/services/MessageSender.as +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/users/services/MessageSender.as @@ -329,7 +329,7 @@ package org.bigbluebutton.modules.users.services public function userActivitySignResponse():void { var message:Object = { - header: {name: "UserActivitySignResponseMsg", meetingId: UsersUtil.getInternalMeetingID(), + header: {name: "UserActivitySignCmdMsg", meetingId: UsersUtil.getInternalMeetingID(), userId: UsersUtil.getMyUserID()}, body: {userId: UsersUtil.getMyUserID()} }; -- GitLab