diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/model/users/NetConnectionDelegate.as b/bigbluebutton-client/src/org/bigbluebutton/main/model/users/NetConnectionDelegate.as index 49bbb1188fad7c45f2e137f1e9e696e46b1d1544..593cb33736868efd8556d3fa09c15b4817c90366 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/main/model/users/NetConnectionDelegate.as +++ b/bigbluebutton-client/src/org/bigbluebutton/main/model/users/NetConnectionDelegate.as @@ -238,7 +238,11 @@ package org.bigbluebutton.main.model.users } }, message - ); //_netConnection.call + ); //_netConnection.call + + _validateTokenTimer = new Timer(10000, 1); + _validateTokenTimer.addEventListener(TimerEvent.TIMER, validataTokenTimerHandler); + _validateTokenTimer.start(); } private function validateToken2x():void { @@ -274,14 +278,13 @@ package org.bigbluebutton.main.model.users } public function sendMessage2x(onSuccess:Function, onFailure:Function, json:Object):void { - //if (useRTMP) { + if (useRTMP) { sendMessageToRed5(onSuccess, onFailure, json); - //} else { + } else { if (connected2Vertx) { sendToVertx(json); - } - - //} + } + } } private function sendMessageToRed5(onSuccess:Function, onFailure:Function, json:Object):void { @@ -443,19 +446,19 @@ package org.bigbluebutton.main.model.users } } - private var useRTMP:Boolean = true; + private var useRTMP:Boolean = false; public function connect():void { - //if (useRTMP) { + if (useRTMP) { connectRTMP(); - //} else { + } else { connectToVertx(LiveMeeting.inst().me.authToken); - //} + } } private function connectMessage():void { var message:Object = { - header: {name: "ConnectMessage", + header: {name: "HandshakeMessage", meetingId: UsersUtil.getInternalMeetingID(), userId: UsersUtil.getMyUserID()}, body: {token: LiveMeeting.inst().me.authToken} @@ -472,12 +475,20 @@ package org.bigbluebutton.main.model.users public function onMessageFromDS(msg: Object): void { trace("*** From DS: " + JSON.stringify(msg)); + var header: Object = msg.header as Object; + + var name:String = header.name as String; + if (name == "HandshakeReplyMessage") { + validateTokenVertx(); + } else { + onMessageFromServer2x(header.name as String, JSON.stringify(msg)); + } } private var connected2Vertx:Boolean = false; public function connectedToVertx(): void { - //trace("*** From DS: connectedToVertx"); + trace("*** From DS: connectedToVertx"); connected2Vertx = true; connectMessage(); } diff --git a/labs/vertx-akka/src/main/java/org/bigbluebutton/vertx/SockJSHandlerVerticle.java b/labs/vertx-akka/src/main/java/org/bigbluebutton/vertx/SockJSHandlerVerticle.java index 532f74fdf57710af12f7e540f08002cbb599c62e..7f07c43851a8d128a4abefc70f870ec910d7834a 100755 --- a/labs/vertx-akka/src/main/java/org/bigbluebutton/vertx/SockJSHandlerVerticle.java +++ b/labs/vertx-akka/src/main/java/org/bigbluebutton/vertx/SockJSHandlerVerticle.java @@ -78,9 +78,9 @@ public class SockJSHandlerVerticle extends AbstractVerticle { } else if (be.type() == BridgeEventType.PUBLISH) { System.out.println("Socket PUBLISH for: " + be.socket().webSession().id() + " \n " + be.getRawMessage()); } else if (be.type() == BridgeEventType.RECEIVE) { - System.out.println("Socket RECEIVE for: " + be.socket().webSession().id() + " \n " + be.getRawMessage()); + System.out.println("Msg to Client: " + be.socket().webSession().id() + " \n " + be.getRawMessage()); } else if (be.type() == BridgeEventType.SEND) { - System.out.println("Socket SEND for: " + be.socket().webSession().id() + " \n " + be.getRawMessage()); + //System.out.println("Msg from Client: " + be.socket().webSession().id() + " \n " + be.getRawMessage()); //String body = be.getRawMessage().getJsonObject("body").encode(); gw.onMessageReceived(be.socket().webSession().id(), be.getRawMessage().getJsonObject("body")); } else if (be.type() == BridgeEventType.REGISTER) { diff --git a/labs/vertx-akka/src/main/resources/application.conf b/labs/vertx-akka/src/main/resources/application.conf index 1d1430f5e1300f67217777ddab4fad2a76936b04..6c82633f26b55ca08d2263f3cd87e23b48c335c2 100755 --- a/labs/vertx-akka/src/main/resources/application.conf +++ b/labs/vertx-akka/src/main/resources/application.conf @@ -8,7 +8,7 @@ akka { } } loggers = ["akka.event.slf4j.Slf4jLogger"] - loglevel = "INFO" + loglevel = "DEBUG" rediscala-publish-worker-dispatcher { mailbox-type = "akka.dispatch.SingleConsumerOnlyUnboundedMailbox" diff --git a/labs/vertx-akka/src/main/resources/logback.xml b/labs/vertx-akka/src/main/resources/logback.xml index 267781bba2dd60859c0902fe61e8312243c0acbb..438248f977dab203d02951657824d79892050fe6 100755 --- a/labs/vertx-akka/src/main/resources/logback.xml +++ b/labs/vertx-akka/src/main/resources/logback.xml @@ -7,9 +7,9 @@ </appender> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> - <File>logs/bbb-apps-akka.log</File> + <File>logs/bbb-vertx-akka.log</File> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> - <FileNamePattern>logs/bbb-apps-akka.%d{yyyy-MM-dd}.log</FileNamePattern> + <FileNamePattern>logs/bbb-vertx-akka.%d{yyyy-MM-dd}.log</FileNamePattern> <!-- keep 30 days worth of history --> <MaxHistory>5</MaxHistory> </rollingPolicy> diff --git a/labs/vertx-akka/src/main/scala/org/bigbluebutton/Boot.scala b/labs/vertx-akka/src/main/scala/org/bigbluebutton/Boot.scala index 4142027d16470e4c455ddc1e48a2e1578627f9b3..a4c887bd71cb793b55885fc6960d91709a2314bf 100755 --- a/labs/vertx-akka/src/main/scala/org/bigbluebutton/Boot.scala +++ b/labs/vertx-akka/src/main/scala/org/bigbluebutton/Boot.scala @@ -1,6 +1,7 @@ package org.bigbluebutton import akka.actor.ActorSystem +import akka.event.Logging import org.bigbluebutton.vertx.HelloWorld import io.vertx.core.Vertx import org.bigbluebutton.client.{ ClientGWApplication, MsgToClientGW } @@ -11,6 +12,9 @@ import org.bigbluebutton.vertx.VertxToAkkaBus object Boot extends App with SystemConfiguration { implicit val system = ActorSystem("vertx-akka-system") + val log = Logging(system, getClass) + + log.debug("*********** vertx-akka-system ***********************") val vertx = Vertx.vertx() @@ -23,6 +27,7 @@ object Boot extends App with SystemConfiguration { val vertxToAkkaBus = new VertxToAkkaBus(vertx, akkaGW) val connEventBus = new InternalMessageBus val connectionManager = new ConnectionManager(system, vertx, connEventBus) + val clientManager = new ClientManager(system, connEventBus) val msgToClientGW = new MsgToClientGW val clientGW = new ClientGWApplication(system, msgToClientGW, connEventBus) diff --git a/labs/vertx-akka/src/main/scala/org/bigbluebutton/ClientManager.scala b/labs/vertx-akka/src/main/scala/org/bigbluebutton/ClientManager.scala index b046fcb94ee57e3d3f930a5481e56584335c4da0..2b6fc79a01fe78a251a947543dfdd91a37c25284 100755 --- a/labs/vertx-akka/src/main/scala/org/bigbluebutton/ClientManager.scala +++ b/labs/vertx-akka/src/main/scala/org/bigbluebutton/ClientManager.scala @@ -1,16 +1,13 @@ package org.bigbluebutton import akka.actor.{ Actor, ActorLogging, ActorSystem, Props } -import org.bigbluebutton.client.bus.InternalMessageBus +import org.bigbluebutton.client.bus.{ ConnectionCreated, ConnectionDestroyed, InternalMessageBus } import org.bigbluebutton.client.Client class ClientManager(system: ActorSystem, connEventBus: InternalMessageBus) { val actorRef = system.actorOf(ClientManagerActor.props(connEventBus), "clientMgrActor") } -case class ConnectionCreated(id: String) -case class ConnectionDestroyed(id: String) - object ClientManagerActor { val CLIENT_MANAGER_CHANNEL = "client-manager-channel" @@ -22,11 +19,15 @@ case class ClientManagerActor(connEventBus: InternalMessageBus) extends Actor wi def receive = { case m: ConnectionCreated => - val client = Client(m.id, connEventBus) + val client = Client(m.connInfo.connId, connEventBus) clients += client.clientId -> client + client.actorRef forward (m) case m: ConnectionDestroyed => - val client = clients.get(m.id) - client foreach (u => clients -= m.id) + val client = clients.get(m.connInfo.connId) + client foreach { u => + clients -= m.connInfo.connId + u.actorRef forward (m) + } case _ => log.debug("***** Connection cannot handle msg ") } diff --git a/labs/vertx-akka/src/main/scala/org/bigbluebutton/Connection.scala b/labs/vertx-akka/src/main/scala/org/bigbluebutton/Connection.scala index ab35853ffb722ee385dc2096f93743c08d7d4646..4ea8ba0458a0bf6873c355157373f361f5e8e7a1 100755 --- a/labs/vertx-akka/src/main/scala/org/bigbluebutton/Connection.scala +++ b/labs/vertx-akka/src/main/scala/org/bigbluebutton/Connection.scala @@ -14,7 +14,7 @@ object Connection { class Connection(val connId: String, vertx: Vertx, connEventBus: InternalMessageBus)(implicit val context: ActorContext) { val actorRef = context.actorOf(ConnectionActor.props(connId, vertx, connEventBus), "connActor" + "-" + connId) - val consumer: MessageConsumer[JsonObject] = vertx.eventBus().consumer("FOO-" + connId) + val consumer: MessageConsumer[JsonObject] = vertx.eventBus().consumer("from-socket-" + connId) consumer.handler(new MyConnHandler(actorRef)) } @@ -33,8 +33,7 @@ class ConnectionActor(connId: String, vertx: Vertx, connEventBus: InternalMessag def receive = { case m: SocketDestroyed => connInfo foreach { conn => - val m2 = ConnDestroyedMsg(conn) - connEventBus.publish(MsgFromConnBusMsg("clientManager", m2)) + connEventBus.publish(MsgFromConnBusMsg(ClientManagerActor.CLIENT_MANAGER_CHANNEL, ConnectionDestroyed(conn))) } context stop self @@ -46,19 +45,27 @@ class ConnectionActor(connId: String, vertx: Vertx, connEventBus: InternalMessag for { conn <- getConnInfo(m.msg) } yield { + println("**************************** HANDSHAKE DONE *****************************") handshakeDone = true connInfo = Some(conn) + connEventBus.publish(MsgFromConnBusMsg(ClientManagerActor.CLIENT_MANAGER_CHANNEL, ConnectionCreated(conn))) + + val response = buildHandshakeReply(conn.meetingId, conn.userId, conn.token) + vertx.eventBus().publish("chat.to.client", response) } } else { - clientAddress foreach { address => - println("My Handler " + m.msg) - vertx.eventBus().publish("chat.to.client", m.msg) + //println("************ FORWARDING TO CLIENT ACTOR *****************************") + connInfo foreach { conn => + //println("************ FORWARDING TO CLIENT ACTOR " + "clientActor-" + conn.connId + " *****************************") + connEventBus.publish(MsgFromConnBusMsg("clientActor-" + conn.connId, MsgFromConnMsg(conn, m.msg.encode()))) } - } - // val connInfo = ConnInfo2(connId) - // connEventBus.publish() MsgFromConnMsg + case m: MsgToConnMsg => + //println("MsgToConnMsg " + m.json) + val jsonObject = new JsonObject(m.json) + vertx.eventBus().publish("chat.to.client", jsonObject) + case _ => log.debug("***** Connection cannot handle msg ") } @@ -80,20 +87,36 @@ class ConnectionActor(connId: String, vertx: Vertx, connEventBus: InternalMessag conn } + private def buildHandshakeReply(meetingId: String, userId: String, token: String): JsonObject = { + val header: JsonObject = new JsonObject() + header.put("name", "HandshakeReplyMessage") + header.put("userId", userId) + header.put("meetingId", meetingId) + + val body = new JsonObject() + body.put("token", token) + + val reply = new JsonObject() + reply.put("header", header) + reply.put("body", body) + + reply + } + override def preStart(): Unit = { super.preStart() - connEventBus.subscribe(self, "conn-" + connId) + connEventBus.subscribe(self, "connActor-" + connId) } override def postStop(): Unit = { super.postStop() - connEventBus.unsubscribe(self, "conn-" + connId) + connEventBus.unsubscribe(self, "connActor-" + connId) } } class MyConnHandler(actorRef: ActorRef) extends Handler[Message[JsonObject]] { def handle(message: Message[JsonObject]) = { - println("My Handler " + message.body()) + //println("My Handler " + message.body()) actorRef ! (MsgFoo(message.body())) } } diff --git a/labs/vertx-akka/src/main/scala/org/bigbluebutton/ConnectionManager.scala b/labs/vertx-akka/src/main/scala/org/bigbluebutton/ConnectionManager.scala index 9a6d4df6a253c545209fd7c36a9fca5419ec8570..f63542add0530e110fc8601535f73b69a6615622 100755 --- a/labs/vertx-akka/src/main/scala/org/bigbluebutton/ConnectionManager.scala +++ b/labs/vertx-akka/src/main/scala/org/bigbluebutton/ConnectionManager.scala @@ -21,7 +21,7 @@ class ConnectionManager(system: ActorSystem, vertx: Vertx, connEventBus: Interna } def onMessageReceived(id: String, msg: JsonObject): Unit = { - vertx.eventBus().publish("FOO-" + id, msg) + vertx.eventBus().publish("from-socket-" + id, msg) } } diff --git a/labs/vertx-akka/src/main/scala/org/bigbluebutton/client/ClientActor.scala b/labs/vertx-akka/src/main/scala/org/bigbluebutton/client/ClientActor.scala index 04fd5a85ab271dad3f5f98049324e4eaebc27f8f..61d43d5d1f4d543fa21745a9e253d541431e3d7a 100755 --- a/labs/vertx-akka/src/main/scala/org/bigbluebutton/client/ClientActor.scala +++ b/labs/vertx-akka/src/main/scala/org/bigbluebutton/client/ClientActor.scala @@ -1,7 +1,7 @@ package org.bigbluebutton.client import akka.actor.{ Actor, ActorContext, ActorLogging, Props } -import org.bigbluebutton.client.bus.InternalMessageBus +import org.bigbluebutton.client.bus._ import org.bigbluebutton.client.meeting.Connections object Client { @@ -16,14 +16,36 @@ object ClientActor { def props(clientId: String, connEventBus: InternalMessageBus): Props = Props(classOf[ClientActor], clientId, connEventBus) } -class ClientActor(clientId: String, connEventBus: InternalMessageBus) extends Actor with ActorLogging { - - connEventBus.subscribe(self, "client-" + clientId) +class ClientActor(clientId: String, connEventBus: InternalMessageBus) + extends Actor with ActorLogging with SystemConfiguration { private val conns = new Connections private var authorized = false def receive = { - case _ => log.debug("***** UserActor cannot handle msg ") + case m: ConnectionCreated => + connEventBus.publish(MsgFromConnBusMsg(fromClientChannel, ClientConnectedMsg(m.connInfo))) + case m: ConnectionDestroyed => + connEventBus.publish(MsgFromConnBusMsg(fromClientChannel, ClientDisconnectedMsg(m.connInfo))) + context stop self + case m: MsgFromConnMsg => + connEventBus.publish(MsgFromConnBusMsg(fromClientChannel, MsgFromClientMsg(m.connInfo, m.json))) + case m: DirectMsgToClient => + connEventBus.publish(MsgFromConnBusMsg("connActor-" + clientId, MsgToConnMsg(m.data.core.toString()))) + case _ => log.debug("***** ClientActor cannot handle msg ") + } + + override def preStart(): Unit = { + super.preStart() + //println("******** CLIENT ACTOR CREATED " + "clientActor-" + clientId + " *****************************") + connEventBus.subscribe(self, "clientActor-" + clientId) + connEventBus.subscribe(self, toClientChannel) + + } + + override def postStop(): Unit = { + connEventBus.unsubscribe(self, "clientActor-" + clientId) + connEventBus.unsubscribe(self, toClientChannel) + super.postStop() } } diff --git a/labs/vertx-akka/src/main/scala/org/bigbluebutton/client/ClientGWApplication.scala b/labs/vertx-akka/src/main/scala/org/bigbluebutton/client/ClientGWApplication.scala index 0cf66f4076b037928463b2ae99aaac9a7d2b30fb..444963d411dedd86f2e8484c40165a8803492eae 100755 --- a/labs/vertx-akka/src/main/scala/org/bigbluebutton/client/ClientGWApplication.scala +++ b/labs/vertx-akka/src/main/scala/org/bigbluebutton/client/ClientGWApplication.scala @@ -5,17 +5,12 @@ import akka.event.Logging import org.bigbluebutton.client.bus._ import org.bigbluebutton.client.endpoint.redis.{ AppsRedisSubscriberActor, MessageSender, RedisPublisher } import org.bigbluebutton.client.meeting.MeetingManagerActor - import scala.concurrent.duration._ class ClientGWApplication(system: ActorSystem, val msgToClientGW: MsgToClientGW, connEventBus: InternalMessageBus) extends SystemConfiguration { implicit val timeout = akka.util.Timeout(3 seconds) - val log = Logging(system, getClass) - - log.debug("*********** meetingManagerChannel = " + meetingManagerChannel) - private val redisPublisher = new RedisPublisher(system) private val msgSender: MessageSender = new MessageSender(redisPublisher) @@ -25,7 +20,6 @@ class ClientGWApplication(system: ActorSystem, val msgToClientGW: MsgToClientGW, private val meetingManagerActorRef = system.actorOf(MeetingManagerActor.props(connEventBus), "meetingManagerActor") connEventBus.subscribe(meetingManagerActorRef, fromAkkaAppsChannel) - connEventBus.subscribe(meetingManagerActorRef, fromClientChannel) private val msgToAkkaAppsToJsonActor = system.actorOf(MsgToAkkaAppsToJsonActor.props(connEventBus), "msgToAkkaAppsToJsonActor") diff --git a/labs/vertx-akka/src/main/scala/org/bigbluebutton/client/MsgToAkkaAppsToJsonActor.scala b/labs/vertx-akka/src/main/scala/org/bigbluebutton/client/MsgToAkkaAppsToJsonActor.scala index c194a0a3233e6e096e0ca9e3e583a322bde93e6c..50f50dc5709834c0c9129ca6a91a0232039ff28c 100755 --- a/labs/vertx-akka/src/main/scala/org/bigbluebutton/client/MsgToAkkaAppsToJsonActor.scala +++ b/labs/vertx-akka/src/main/scala/org/bigbluebutton/client/MsgToAkkaAppsToJsonActor.scala @@ -14,11 +14,12 @@ class MsgToAkkaAppsToJsonActor(connEventBus: InternalMessageBus) extends Actor with ActorLogging with SystemConfiguration { def receive = { - case msg: BbbCommonEnvJsNodeMsg => handle(msg) + case msg: MsgToAkkaApps => handle(msg) } - def handle(msg: BbbCommonEnvJsNodeMsg): Unit = { - val json = JsonUtil.toJson(msg) + def handle(msg: MsgToAkkaApps): Unit = { + println("**************** TO AKKA APPS MESSAGE ***************") + val json = JsonUtil.toJson(msg.payload) val jsonMsg = JsonMsgToAkkaApps(toAkkaAppsRedisChannel, json) connEventBus.publish(MsgFromConnBusMsg(toAkkaAppsJsonChannel, jsonMsg)) } diff --git a/labs/vertx-akka/src/main/scala/org/bigbluebutton/client/bus/InternalMessageBus.scala b/labs/vertx-akka/src/main/scala/org/bigbluebutton/client/bus/InternalMessageBus.scala index 5e4412b098c1cf45c3ac2a37808866fbc366bee0..46658a9e9db2d29bddb044f3898b1b481a49ed7e 100755 --- a/labs/vertx-akka/src/main/scala/org/bigbluebutton/client/bus/InternalMessageBus.scala +++ b/labs/vertx-akka/src/main/scala/org/bigbluebutton/client/bus/InternalMessageBus.scala @@ -8,9 +8,9 @@ import org.bigbluebutton.common2.msgs.BbbCommonEnvJsNodeMsg case class ConnInfo2(meetingId: String, userId: String, token: String, connId: String) sealed trait FromConnMsg -case class ConnCreatedMsg(connInfo: ConnInfo2) extends FromConnMsg -case class ConnDestroyedMsg(connInfo: ConnInfo2) extends FromConnMsg -case class MsgToConnMsg(connInfo: ConnInfo2, json: String) extends FromConnMsg +case class ConnectionCreated(connInfo: ConnInfo2) extends FromConnMsg +case class ConnectionDestroyed(connInfo: ConnInfo2) extends FromConnMsg +case class MsgToConnMsg(json: String) extends FromConnMsg case class MsgFromConnMsg(connInfo: ConnInfo2, json: String) extends FromConnMsg case class JsonMsgFromAkkaApps(name: String, data: String) extends FromConnMsg case class JsonMsgToAkkaApps(channel: String, json: String) extends FromConnMsg diff --git a/labs/vertx-akka/src/main/scala/org/bigbluebutton/client/meeting/MeetingManagerActor.scala b/labs/vertx-akka/src/main/scala/org/bigbluebutton/client/meeting/MeetingManagerActor.scala index 22124ea81cc699aa5086ff78c70fd0ad1af62584..e789b73f4cf149bcfb7650d7fa4b8f53859523db 100755 --- a/labs/vertx-akka/src/main/scala/org/bigbluebutton/client/meeting/MeetingManagerActor.scala +++ b/labs/vertx-akka/src/main/scala/org/bigbluebutton/client/meeting/MeetingManagerActor.scala @@ -18,7 +18,7 @@ class MeetingManagerActor(connEventBus: InternalMessageBus) case msg: ClientConnectedMsg => handleConnectMsg(msg) case msg: ClientDisconnectedMsg => handleDisconnectMsg(msg) case msg: MsgFromClientMsg => handleMsgFromClientMsg(msg) - case msg: BbbCommonEnvJsNodeMsg => handleBbbServerMsg(msg) + case msg: MsgFromAkkaApps => handleBbbServerMsg(msg) // TODO we should monitor meeting lifecycle so we can remove when meeting ends. } @@ -55,12 +55,12 @@ class MeetingManagerActor(connEventBus: InternalMessageBus) } } - def handleBbbServerMsg(msg: BbbCommonEnvJsNodeMsg): Unit = { + def handleBbbServerMsg(msg: MsgFromAkkaApps): Unit = { //log.debug("**** MeetingManagerActor handleBbbServerMsg " + msg.envelope.name) for { - msgType <- msg.envelope.routing.get("msgType") + msgType <- msg.payload.envelope.routing.get("msgType") } yield { - handleServerMsg(msgType, msg) + handleServerMsg(msgType, msg.payload) } } diff --git a/labs/vertx-akka/src/main/scala/org/bigbluebutton/client/meeting/UserActor.scala b/labs/vertx-akka/src/main/scala/org/bigbluebutton/client/meeting/UserActor.scala index 074a07d984b8d02417b0bdc5467a9ab05ca35714..66caa310f22d2560b0e7526ade745dc99218e8ed 100755 --- a/labs/vertx-akka/src/main/scala/org/bigbluebutton/client/meeting/UserActor.scala +++ b/labs/vertx-akka/src/main/scala/org/bigbluebutton/client/meeting/UserActor.scala @@ -91,6 +91,7 @@ class UserActor(val userId: String, } def handleMsgFromClientMsg(msg: MsgFromClientMsg, applyWhitelist: Boolean): Unit = { + println("************* MESSAGE FROM CLIENT *********** \n" + msg.json) def convertToJsonNode(json: String): Option[JsonNode] = { JsonUtil.toJsonNode(json) match { case Success(jsonNode) => Some(jsonNode) @@ -133,6 +134,7 @@ class UserActor(val userId: String, jsonNode <- convertToJsonNode(json) } yield { val akkaMsg = BbbCommonEnvJsNodeMsg(envelope, jsonNode) + println("****** FORWARDING TO AKKA APPS ******") connEventBus.publish(MsgFromConnBusMsg(toAkkaAppsChannel, MsgToAkkaApps(akkaMsg))) } } @@ -152,6 +154,7 @@ class UserActor(val userId: String, def handleServerMsg(msgType: String, msg: BbbCommonEnvJsNodeMsg): Unit = { // log.debug("**** UserActor handleServerMsg " + msg) + println("************* MESSAGE FROM SERVER *********** \n" + msg) msgType match { case MessageTypes.DIRECT => handleDirectMessage(msg) case MessageTypes.BROADCAST_TO_MEETING => handleBroadcastMessage(msg)