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