From fc4028d6de546d2788ad2c122086767fec55ed2f Mon Sep 17 00:00:00 2001 From: Ghazi Triki <ghazi.triki@riadvice.tn> Date: Fri, 9 Nov 2018 20:08:20 +0100 Subject: [PATCH] Redis refactoring : remove duplicate classes, factorisation and build configuration update. --- akka-bbb-apps/build.sbt | 2 + .../main/scala/org/bigbluebutton/Boot.scala | 19 +-- .../bigbluebutton/SystemConfiguration.scala | 23 +--- .../bigbluebutton/core/MessageSender.scala | 10 -- .../senders/ReceivedJsonMsgHandlerActor.scala | 4 +- .../core2/FromAkkaAppsMsgSenderActor.scala | 4 +- ...ala => AkkaAppsRedisSubscriberActor.scala} | 41 +++---- .../redis/KeepAliveRedisPublisher.scala | 16 --- .../endpoint/redis/RedisPublisher.scala | 21 ---- .../endpoint/redis/RedisRecorderActor.scala | 4 +- .../ReceivedJsonMsgHandlerTraitTests.scala | 2 +- akka-bbb-fsesl/build.sbt | 110 +++++------------- akka-bbb-fsesl/project/Build.scala | 0 akka-bbb-fsesl/project/Dependencies.scala | 76 ++++++++++++ akka-bbb-fsesl/project/build.properties | 2 +- akka-bbb-fsesl/project/plugins.sbt | 8 +- .../main/scala/org/bigbluebutton/Boot.scala | 8 +- .../bigbluebutton/SystemConfiguration.scala | 12 +- ....scala => FSESLRedisSubscriberActor.scala} | 37 +++--- .../endpoint/redis/RedisPublisher.scala | 20 ---- .../freeswitch/VoiceConferenceService.scala | 4 +- bbb-apps-common/build.sbt | 1 - .../client/ClientGWApplication.scala | 10 +- .../client/MsgToRedisActor.scala | 11 +- .../client/SystemConfiguration.scala | 9 +- .../client/bus/JsonMsgFromAkkaAppsBus.scala | 32 ----- .../client/bus/MsgFromAkkaAppsEventBus.scala | 31 ----- .../redis/KeepAliveRedisPublisher.scala | 17 --- .../client/endpoint/redis/MessageSender.scala | 8 -- ...ala => Red5AppsRedisSubscriberActor.scala} | 26 ++--- .../endpoint/redis/RedisPublisher.scala | 24 ---- bbb-common-message/build.sbt | 2 - bbb-common-message/project/Dependencies.scala | 17 ++- .../common2/redis/RedisStorageService.java | 1 - .../common2}/bus/IncomingJsonMessageBus.scala | 2 +- .../common2}/bus/JsonMsgFromAkkaAppsBus.scala | 6 +- .../bus/MsgFromAkkaAppsEventBus.scala | 4 +- .../common2}/bus/OldMessageEventBus.scala | 5 +- .../common2}/redis/MessageSender.scala | 2 +- .../redis/RedisAppSubscriberActor.scala | 18 +++ .../common2/redis/RedisConfiguration.scala | 24 ++++ .../common2}/redis/RedisPublisher.scala | 8 +- .../common2/redis/RedisSubscriber.scala | 6 + bbb-common-web/build.sbt | 2 - bbb-common-web/project/Dependencies.scala | 5 +- .../bigbluebutton/api2/BbbWebApiGWApp.scala | 12 +- .../api2/SystemConfiguration.scala | 11 +- .../api2/bus/MessageSenderActor.scala | 2 +- .../bus/OldMessageJsonReceiverActor.scala | 3 +- .../api2/bus/ReceivedJsonMsgHdlrActor.scala | 1 + .../redis/RedisDataStorageActor.scala | 11 +- ...or.scala => WebRedisSubscriberActor.scala} | 35 +++--- .../api/util/ParamsUtilTest.scala | 44 ++++--- .../org/bigbluebutton/api/util/UnitSpec.scala | 15 ++- bbb-fsesl-client/build.sbt | 24 ++-- .../app/screenshare/SystemConfiguration.scala | 12 +- .../redis/IncomingJsonMessageBus.scala | 31 ----- ... => ScreenshareRedisSubscriberActor.scala} | 0 bigbluebutton-apps/build.gradle | 1 - .../main/webapp/WEB-INF/bbb-redis-pool.xml | 6 - 60 files changed, 360 insertions(+), 542 deletions(-) delete mode 100755 akka-bbb-apps/src/main/scala/org/bigbluebutton/core/MessageSender.scala rename akka-bbb-apps/src/main/scala/org/bigbluebutton/endpoint/redis/{AppsRedisSubscriberActor.scala => AkkaAppsRedisSubscriberActor.scala} (68%) delete mode 100755 akka-bbb-apps/src/main/scala/org/bigbluebutton/endpoint/redis/KeepAliveRedisPublisher.scala delete mode 100755 akka-bbb-apps/src/main/scala/org/bigbluebutton/endpoint/redis/RedisPublisher.scala delete mode 100755 akka-bbb-fsesl/project/Build.scala create mode 100644 akka-bbb-fsesl/project/Dependencies.scala rename akka-bbb-fsesl/src/main/scala/org/bigbluebutton/endpoint/redis/{AppsRedisSubscriberActor.scala => FSESLRedisSubscriberActor.scala} (68%) delete mode 100755 akka-bbb-fsesl/src/main/scala/org/bigbluebutton/endpoint/redis/RedisPublisher.scala delete mode 100755 bbb-apps-common/src/main/scala/org/bigbluebutton/client/bus/JsonMsgFromAkkaAppsBus.scala delete mode 100755 bbb-apps-common/src/main/scala/org/bigbluebutton/client/bus/MsgFromAkkaAppsEventBus.scala delete mode 100755 bbb-apps-common/src/main/scala/org/bigbluebutton/client/endpoint/redis/KeepAliveRedisPublisher.scala delete mode 100755 bbb-apps-common/src/main/scala/org/bigbluebutton/client/endpoint/redis/MessageSender.scala rename bbb-apps-common/src/main/scala/org/bigbluebutton/client/endpoint/redis/{AppsRedisSubscriberActor.scala => Red5AppsRedisSubscriberActor.scala} (67%) delete mode 100755 bbb-apps-common/src/main/scala/org/bigbluebutton/client/endpoint/redis/RedisPublisher.scala rename {akka-bbb-apps/src/main/scala/org/bigbluebutton/core => bbb-common-message/src/main/scala/org/bigbluebutton/common2}/bus/IncomingJsonMessageBus.scala (94%) mode change 100755 => 100644 rename {bbb-common-web/src/main/scala/org/bigbluebutton/api2 => bbb-common-message/src/main/scala/org/bigbluebutton/common2}/bus/JsonMsgFromAkkaAppsBus.scala (88%) mode change 100755 => 100644 rename {bbb-common-web/src/main/scala/org/bigbluebutton/api2 => bbb-common-message/src/main/scala/org/bigbluebutton/common2}/bus/MsgFromAkkaAppsEventBus.scala (91%) mode change 100755 => 100644 rename {bbb-common-web/src/main/scala/org/bigbluebutton/api2 => bbb-common-message/src/main/scala/org/bigbluebutton/common2}/bus/OldMessageEventBus.scala (86%) rename {bbb-common-web/src/main/scala/org/bigbluebutton/api2/endpoint => bbb-common-message/src/main/scala/org/bigbluebutton/common2}/redis/MessageSender.scala (71%) create mode 100644 bbb-common-message/src/main/scala/org/bigbluebutton/common2/redis/RedisAppSubscriberActor.scala create mode 100644 bbb-common-message/src/main/scala/org/bigbluebutton/common2/redis/RedisConfiguration.scala rename {bbb-common-web/src/main/scala/org/bigbluebutton/api2/endpoint => bbb-common-message/src/main/scala/org/bigbluebutton/common2}/redis/RedisPublisher.scala (57%) create mode 100644 bbb-common-message/src/main/scala/org/bigbluebutton/common2/redis/RedisSubscriber.scala rename bbb-common-web/src/main/scala/org/bigbluebutton/api2/endpoint/redis/{AppsRedisSubscriberActor.scala => WebRedisSubscriberActor.scala} (60%) delete mode 100755 bbb-screenshare/app/src/main/scala/org/bigbluebutton/app/screenshare/redis/IncomingJsonMessageBus.scala rename bbb-screenshare/app/src/main/scala/org/bigbluebutton/app/screenshare/redis/{AppsRedisSubscriberActor.scala => ScreenshareRedisSubscriberActor.scala} (100%) diff --git a/akka-bbb-apps/build.sbt b/akka-bbb-apps/build.sbt index 892a77e541..1a4da064d3 100755 --- a/akka-bbb-apps/build.sbt +++ b/akka-bbb-apps/build.sbt @@ -75,3 +75,5 @@ daemonGroup in Linux := group mappings in(Universal, packageBin) += file("src/main/resources/application.conf") -> "conf/application.conf" mappings in(Universal, packageBin) += file("src/main/resources/logback.xml") -> "conf/logback.xml" + +debianPackageDependencies in Debian ++= Seq("java8-runtime-headless", "bash") diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/Boot.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/Boot.scala index 74a852b9a5..8df3465637 100755 --- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/Boot.scala +++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/Boot.scala @@ -1,12 +1,18 @@ package org.bigbluebutton -import akka.event.Logging -import akka.actor.ActorSystem -import org.bigbluebutton.endpoint.redis.{ AppsRedisSubscriberActor, KeepAliveRedisPublisher, RedisPublisher, RedisRecorderActor } +import org.bigbluebutton.common2.redis.RedisPublisher import org.bigbluebutton.core._ import org.bigbluebutton.core.bus._ import org.bigbluebutton.core.pubsub.senders.ReceivedJsonMsgHandlerActor -import org.bigbluebutton.core2.{ AnalyticsActor, FromAkkaAppsMsgSenderActor } +import org.bigbluebutton.core2.AnalyticsActor +import org.bigbluebutton.core2.FromAkkaAppsMsgSenderActor +import org.bigbluebutton.endpoint.redis.AppsRedisSubscriberActor +import org.bigbluebutton.endpoint.redis.RedisRecorderActor + +import akka.actor.ActorSystem +import akka.event.Logging +import org.bigbluebutton.common2.redis.MessageSender +import org.bigbluebutton.common2.bus.IncomingJsonMessageBus object Boot extends App with SystemConfiguration { @@ -22,7 +28,7 @@ object Boot extends App with SystemConfiguration { val outGW = new OutMessageGatewayImp(outBus2) - val redisPublisher = new RedisPublisher(system) + val redisPublisher = new RedisPublisher(system, "BbbAppsAkkaPub") val msgSender = new MessageSender(redisPublisher) val redisRecorderActor = system.actorOf(RedisRecorderActor.props(system), "redisRecorderActor") @@ -47,7 +53,4 @@ object Boot extends App with SystemConfiguration { incomingJsonMessageBus.subscribe(redisMessageHandlerActor, toAkkaAppsJsonChannel) val redisSubscriberActor = system.actorOf(AppsRedisSubscriberActor.props(incomingJsonMessageBus), "redis-subscriber") - - val keepAliveRedisPublisher = new KeepAliveRedisPublisher(system, redisPublisher) - } diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/SystemConfiguration.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/SystemConfiguration.scala index d2986d262a..743a4894c4 100755 --- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/SystemConfiguration.scala +++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/SystemConfiguration.scala @@ -1,15 +1,10 @@ package org.bigbluebutton -import com.typesafe.config.ConfigFactory import scala.util.Try -trait SystemConfiguration { +import org.bigbluebutton.common2.redis.RedisConfiguration - val config = ConfigFactory.load() - - lazy val redisHost = Try(config.getString("redis.host")).getOrElse("127.0.0.1") - lazy val redisPort = Try(config.getInt("redis.port")).getOrElse(6379) - lazy val redisPassword = Try(config.getString("redis.password")).getOrElse("") +trait SystemConfiguration extends RedisConfiguration { lazy val bbbWebHost = Try(config.getString("services.bbbWebHost")).getOrElse("localhost") lazy val bbbWebPort = Try(config.getInt("services.bbbWebPort")).getOrElse(8888) @@ -31,8 +26,6 @@ trait SystemConfiguration { lazy val outBbbMsgMsgChannel = Try(config.getString("eventBus.outBbbMsgMsgChannel")).getOrElse("OutBbbMsgChannel") lazy val recordServiceMessageChannel = Try(config.getString("eventBus.recordServiceMessageChannel")).getOrElse("RecordServiceMessageChannel") - lazy val toAkkaAppsRedisChannel = Try(config.getString("redis.toAkkaAppsRedisChannel")).getOrElse("to-akka-apps-redis-channel") - lazy val fromAkkaAppsRedisChannel = Try(config.getString("redis.fromAkkaAppsRedisChannel")).getOrElse("from-akka-apps-redis-channel") lazy val toHTML5RedisChannel = Try(config.getString("redis.toHTML5RedisChannel")).getOrElse("to-html5-redis-channel") lazy val fromAkkaAppsChannel = Try(config.getString("eventBus.fromAkkaAppsChannel")).getOrElse("from-akka-apps-channel") lazy val toAkkaAppsChannel = Try(config.getString("eventBus.toAkkaAppsChannel")).getOrElse("to-akka-apps-channel") @@ -41,21 +34,9 @@ trait SystemConfiguration { lazy val toAkkaAppsJsonChannel = Try(config.getString("eventBus.toAkkaAppsChannel")).getOrElse("to-akka-apps-json-channel") lazy val fromAkkaAppsJsonChannel = Try(config.getString("eventBus.fromAkkaAppsChannel")).getOrElse("from-akka-apps-json-channel") - lazy val toVoiceConfRedisChannel = Try(config.getString("redis.toVoiceConfRedisChannel")).getOrElse("to-voice-conf-redis-channel") - lazy val fromVoiceConfRedisChannel = Try(config.getString("redis.fromVoiceConfRedisChannel")).getOrElse("from-voice-conf-redis-channel") - - lazy val fromAkkaAppsWbRedisChannel = Try(config.getString("redis.fromAkkaAppsWbRedisChannel")).getOrElse("from-akka-apps-wb-redis-channel") - lazy val fromAkkaAppsChatRedisChannel = Try(config.getString("redis.fromAkkaAppsChatRedisChannel")).getOrElse("from-akka-apps-chat-redis-channel") - lazy val fromAkkaAppsPresRedisChannel = Try(config.getString("redis.fromAkkaAppsPresRedisChannel")).getOrElse("from-akka-apps-pres-redis-channel") - lazy val maxNumberOfNotes = Try(config.getInt("sharedNotes.maxNumberOfNotes")).getOrElse(3) lazy val maxNumberOfUndos = Try(config.getInt("sharedNotes.maxNumberOfUndos")).getOrElse(30) - lazy val httpInterface = Try(config.getString("http.interface")).getOrElse("") - lazy val httpPort = Try(config.getInt("http.port")).getOrElse(9090) - lazy val telizeHost = Try(config.getString("services.telizeHost")).getOrElse("") - lazy val telizePort = Try(config.getInt("services.telizePort")).getOrElse(80) - lazy val applyPermissionCheck = Try(config.getBoolean("apps.checkPermissions")).getOrElse(false) lazy val voiceConfRecordPath = Try(config.getString("voiceConf.recordPath")).getOrElse("/var/freeswitch/meetings") diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/MessageSender.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/MessageSender.scala deleted file mode 100755 index 250b1b3fba..0000000000 --- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/MessageSender.scala +++ /dev/null @@ -1,10 +0,0 @@ -package org.bigbluebutton.core - -import org.bigbluebutton.endpoint.redis.RedisPublisher - -class MessageSender(publisher: RedisPublisher) { - - def send(channel: String, data: String) { - publisher.publish(channel, data) - } -} \ No newline at end of file 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 7d762dbb11..639adf2ca1 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 @@ -6,7 +6,9 @@ import com.fasterxml.jackson.databind.JsonNode import org.bigbluebutton.common2.msgs._ import org.bigbluebutton.core.bus._ import org.bigbluebutton.core2.ReceivedMessageRouter -import scala.reflect.runtime.universe._ +import scala.reflect.runtime.universe._ +import org.bigbluebutton.common2.bus.ReceivedJsonMessage +import org.bigbluebutton.common2.bus.IncomingJsonMessageBus object ReceivedJsonMsgHandlerActor { def props(eventBus: BbbMsgRouterEventBus, incomingJsonMessageBus: IncomingJsonMessageBus): Props = diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core2/FromAkkaAppsMsgSenderActor.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core2/FromAkkaAppsMsgSenderActor.scala index 2dcaaf0f1f..0061b110d6 100755 --- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core2/FromAkkaAppsMsgSenderActor.scala +++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core2/FromAkkaAppsMsgSenderActor.scala @@ -3,8 +3,8 @@ package org.bigbluebutton.core2 import akka.actor.{ Actor, ActorLogging, Props } import org.bigbluebutton.SystemConfiguration import org.bigbluebutton.common2.msgs._ -import org.bigbluebutton.common2.util.JsonUtil -import org.bigbluebutton.core.MessageSender +import org.bigbluebutton.common2.util.JsonUtil +import org.bigbluebutton.common2.redis.MessageSender object FromAkkaAppsMsgSenderActor { def props(msgSender: MessageSender): Props = Props(classOf[FromAkkaAppsMsgSenderActor], msgSender) diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/endpoint/redis/AppsRedisSubscriberActor.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/endpoint/redis/AkkaAppsRedisSubscriberActor.scala similarity index 68% rename from akka-bbb-apps/src/main/scala/org/bigbluebutton/endpoint/redis/AppsRedisSubscriberActor.scala rename to akka-bbb-apps/src/main/scala/org/bigbluebutton/endpoint/redis/AkkaAppsRedisSubscriberActor.scala index 5a5a1424f5..c0ff9efed4 100755 --- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/endpoint/redis/AppsRedisSubscriberActor.scala +++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/endpoint/redis/AkkaAppsRedisSubscriberActor.scala @@ -1,22 +1,27 @@ package org.bigbluebutton.endpoint.redis -import akka.actor.Props -import akka.actor.OneForOneStrategy -import akka.actor.SupervisorStrategy.Resume -import java.io.{ PrintWriter, StringWriter } import java.net.InetSocketAddress -import redis.actors.RedisSubscriberActor -import redis.api.pubsub.{ Message, PMessage } - -import scala.concurrent.duration._ import org.bigbluebutton.SystemConfiguration -import org.bigbluebutton.core.bus.{ IncomingJsonMessage, IncomingJsonMessageBus, ReceivedJsonMessage } +import org.bigbluebutton.common2.bus.IncomingJsonMessage +import org.bigbluebutton.common2.bus.IncomingJsonMessageBus +import org.bigbluebutton.common2.bus.ReceivedJsonMessage +import org.bigbluebutton.common2.redis.RedisAppSubscriberActor +import org.bigbluebutton.common2.redis.RedisConfiguration +import org.bigbluebutton.common2.redis.RedisSubscriber + +import akka.actor.Props +import redis.actors.RedisSubscriberActor +import redis.api.pubsub.Message import redis.api.servers.ClientSetname +import java.io.StringWriter +import akka.actor.OneForOneStrategy +import akka.actor.SupervisorStrategy.Resume +import scala.concurrent.duration.DurationInt +import java.io.PrintWriter -object AppsRedisSubscriberActor extends SystemConfiguration { +object AppsRedisSubscriberActor extends RedisSubscriber with RedisConfiguration { - val TO_AKKA_APPS = "bbb:to-akka-apps" val channels = Seq(toAkkaAppsRedisChannel, fromVoiceConfRedisChannel) val patterns = Seq("bigbluebutton:to-bbb-apps:*", "bigbluebutton:from-voice-conf:*", "bigbluebutton:from-bbb-transcode:*") @@ -29,9 +34,11 @@ object AppsRedisSubscriberActor extends SystemConfiguration { class AppsRedisSubscriberActor(jsonMsgBus: IncomingJsonMessageBus, redisHost: String, redisPort: Int, channels: Seq[String] = Nil, patterns: Seq[String] = Nil) - extends RedisSubscriberActor( - new InetSocketAddress(redisHost, redisPort), - channels, patterns, onConnectStatus = connected => { println(s"connected: $connected") }) with SystemConfiguration { + extends RedisSubscriberActor( + new InetSocketAddress(redisHost, redisPort), + channels, patterns, onConnectStatus = connected => { println(s"connected: $connected") }) + with SystemConfiguration + with RedisAppSubscriberActor { override val supervisorStrategy = OneForOneStrategy(maxNrOfRetries = 10, withinTimeRange = 1 minute) { case e: Exception => { @@ -55,10 +62,4 @@ class AppsRedisSubscriberActor(jsonMsgBus: IncomingJsonMessageBus, redisHost: St } } - def onPMessage(pmessage: PMessage) { - - // We don't use PSubscribe anymore, but an implementation of the method is required - //log.error("Should not be receiving a PMessage. It triggered on a match of pattern: " + pmessage.patternMatched) - //log.error(pmessage.data.utf8String) - } } diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/endpoint/redis/KeepAliveRedisPublisher.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/endpoint/redis/KeepAliveRedisPublisher.scala deleted file mode 100755 index 74aa6e4b78..0000000000 --- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/endpoint/redis/KeepAliveRedisPublisher.scala +++ /dev/null @@ -1,16 +0,0 @@ -package org.bigbluebutton.endpoint.redis - -import scala.concurrent.duration._ -import scala.concurrent.ExecutionContext.Implicits.global -import akka.actor.ActorSystem -import org.bigbluebutton.SystemConfiguration - -class KeepAliveRedisPublisher(val system: ActorSystem, sender: RedisPublisher) extends SystemConfiguration { - - val startedOn = System.currentTimeMillis() - - system.scheduler.schedule(2 seconds, 5 seconds) { - //val msg = new BbbAppsIsAliveMessage(startedOn, System.currentTimeMillis()) - // sender.publish("bigbluebutton:from-bbb-apps:keepalive", msg.toJson()) - } -} diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/endpoint/redis/RedisPublisher.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/endpoint/redis/RedisPublisher.scala deleted file mode 100755 index 6af8a64ebb..0000000000 --- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/endpoint/redis/RedisPublisher.scala +++ /dev/null @@ -1,21 +0,0 @@ -package org.bigbluebutton.endpoint.redis - -import redis.RedisClient -import akka.actor.ActorSystem -import org.bigbluebutton.SystemConfiguration -import akka.util.ByteString - -class RedisPublisher(val system: ActorSystem) extends SystemConfiguration { - - val redis = RedisClient(redisHost, redisPort)(system) - - // Set the name of this client to be able to distinguish when doing - // CLIENT LIST on redis-cli - redis.clientSetname("BbbAppsAkkaPub") - - def publish(channel: String, data: String) { - //println("PUBLISH TO [" + channel + "]: \n [" + data + "]") - redis.publish(channel, ByteString(data)) - } - -} diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/endpoint/redis/RedisRecorderActor.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/endpoint/redis/RedisRecorderActor.scala index 7a01783d5b..715fe3b083 100755 --- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/endpoint/redis/RedisRecorderActor.scala +++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/endpoint/redis/RedisRecorderActor.scala @@ -14,8 +14,8 @@ object RedisRecorderActor { } class RedisRecorderActor(val system: ActorSystem) - extends SystemConfiguration - with Actor with ActorLogging { + extends SystemConfiguration + with Actor with ActorLogging { val redis = RedisClient(redisHost, redisPort)(system) // Set the name of this client to be able to distinguish when doing diff --git a/akka-bbb-apps/src/test/scala/org/bigbluebutton/core/pubsub/sender/ReceivedJsonMsgHandlerTraitTests.scala b/akka-bbb-apps/src/test/scala/org/bigbluebutton/core/pubsub/sender/ReceivedJsonMsgHandlerTraitTests.scala index cc0977ada4..329383ad15 100755 --- a/akka-bbb-apps/src/test/scala/org/bigbluebutton/core/pubsub/sender/ReceivedJsonMsgHandlerTraitTests.scala +++ b/akka-bbb-apps/src/test/scala/org/bigbluebutton/core/pubsub/sender/ReceivedJsonMsgHandlerTraitTests.scala @@ -9,7 +9,7 @@ import org.mockito.Mockito._ import org.scalatest.mockito.MockitoSugar class ReceivedJsonMsgHandlerTraitTests extends UnitSpec - with AppsTestFixtures with MockitoSugar with SystemConfiguration { + with AppsTestFixtures with MockitoSugar with SystemConfiguration { class MessageRouter(val eventBus: BbbMsgRouterEventBus) extends ReceivedMessageRouter { diff --git a/akka-bbb-fsesl/build.sbt b/akka-bbb-fsesl/build.sbt index 319345d682..2a1d6b363a 100755 --- a/akka-bbb-fsesl/build.sbt +++ b/akka-bbb-fsesl/build.sbt @@ -1,21 +1,31 @@ -enablePlugins(JavaServerAppPackaging) - -name := "bbb-fsesl-akka" +import org.bigbluebutton.build._ -organization := "org.bigbluebutton" +import scalariform.formatter.preferences._ +import com.typesafe.sbt.SbtScalariform +import com.typesafe.sbt.SbtScalariform.ScalariformKeys -version := "0.0.1" +import com.typesafe.sbt.SbtNativePackager.autoImport._ -scalaVersion := "2.12.6" +enablePlugins(JavaServerAppPackaging) -scalacOptions ++= Seq( - "-unchecked", - "-deprecation", - "-Xlint", - "-Ywarn-dead-code", - "-language:_", - "-target:jvm-1.8", - "-encoding", "UTF-8" +version := "0.0.2" + +val compileSettings = Seq( + organization := "org.bigbluebutton", + + scalacOptions ++= List( + "-unchecked", + "-deprecation", + "-Xlint", + "-Ywarn-dead-code", + "-language:_", + "-target:jvm-1.8", + "-encoding", "UTF-8" + ), + javacOptions ++= List( + "-Xlint:unchecked", + "-Xlint:deprecation" + ) ) resolvers ++= Seq( @@ -37,63 +47,14 @@ testOptions in Test += Tests.Argument(TestFrameworks.Specs2, "html", "console", testOptions in Test += Tests.Argument(TestFrameworks.ScalaTest, "-h", "target/scalatest-reports") -val akkaVersion = "2.5.14" -val scalaTestV = "2.2.6" - - -libraryDependencies ++= { - Seq( - "ch.qos.logback" % "logback-classic" % "1.2.3" % "runtime", - "junit" % "junit" % "4.11", - "commons-codec" % "commons-codec" % "1.11", - "joda-time" % "joda-time" % "2.10", - "org.apache.commons" % "commons-lang3" % "3.7" - - )} - -libraryDependencies += "org.bigbluebutton" % "bbb-common-message_2.12" % "0.0.19-SNAPSHOT" - -libraryDependencies += "org.bigbluebutton" % "bbb-fsesl-client" % "0.0.6" - -// https://mvnrepository.com/artifact/org.scala-lang/scala-library -libraryDependencies += "org.scala-lang" % "scala-library" % scalaVersion.value -// https://mvnrepository.com/artifact/org.scala-lang/scala-compiler -libraryDependencies += "org.scala-lang" % "scala-compiler" % scalaVersion.value - -// https://mvnrepository.com/artifact/com.typesafe.akka/akka-actor_2.12 -libraryDependencies += "com.typesafe.akka" % "akka-actor_2.12" % akkaVersion - -// https://mvnrepository.com/artifact/com.typesafe.akka/akka-slf4j_2.12 -libraryDependencies += "com.typesafe.akka" % "akka-slf4j_2.12" % akkaVersion - -// https://mvnrepository.com/artifact/com.github.etaty/rediscala_2.12 -libraryDependencies += "com.github.etaty" % "rediscala_2.12" % "1.8.0" - -// For generating test reports -libraryDependencies += "org.pegdown" % "pegdown" % "1.6.0" % "test" -// https://mvnrepository.com/artifact/com.typesafe.akka/akka-testkit_2.12 -libraryDependencies += "com.typesafe.akka" % "akka-testkit_2.12" % "2.5.14" % "test" - -// https://mvnrepository.com/artifact/org.scalactic/scalactic_2.12 -libraryDependencies += "org.scalactic" % "scalactic_2.12" % "3.0.5" % "test" - -// https://mvnrepository.com/artifact/org.scalatest/scalatest_2.12 -libraryDependencies += "org.scalatest" % "scalatest_2.12" % "3.0.5" % "test" - -libraryDependencies += "org.mockito" % "mockito-core" % "2.21.0" % "test" - -seq(Revolver.settings: _*) - -import com.typesafe.sbt.SbtScalariform - -import scalariform.formatter.preferences._ -import com.typesafe.sbt.SbtScalariform.ScalariformKeys +Seq(Revolver.settings: _*) +lazy val bbbFseslAkka = (project in file(".")).settings(name := "bbb-fsesl-akka", libraryDependencies ++= Dependencies.runtime).settings(compileSettings) -SbtScalariform.defaultScalariformSettings +scalariformAutoformat := false -ScalariformKeys.preferences := ScalariformKeys.preferences.value +scalariformPreferences := scalariformPreferences.value .setPreference(AlignSingleLineCaseStatements, true) - .setPreference(DoubleIndentClassDeclaration, true) + .setPreference(DoubleIndentConstructorArguments, true) .setPreference(AlignParameters, true) //----------- @@ -121,16 +82,7 @@ daemonUser in Linux := user // group which will execute the application daemonGroup in Linux := group -mappings in Universal <+= (packageBin in Compile, sourceDirectory ) map { (_, src) => - // Move the application.conf so the user can override settings here - val appConf = src / "main" / "resources" / "application.conf" - appConf -> "conf/application.conf" -} - -mappings in Universal <+= (packageBin in Compile, sourceDirectory ) map { (_, src) => - // Move logback.xml so the user can override settings here - val logConf = src / "main" / "resources" / "logback.xml" - logConf -> "conf/logback.xml" -} +mappings in(Universal, packageBin) += file("src/main/resources/application.conf") -> "conf/application.conf" +mappings in(Universal, packageBin) += file("src/main/resources/logback.xml") -> "conf/logback.xml" debianPackageDependencies in Debian ++= Seq("java8-runtime-headless", "bash") diff --git a/akka-bbb-fsesl/project/Build.scala b/akka-bbb-fsesl/project/Build.scala deleted file mode 100755 index e69de29bb2..0000000000 diff --git a/akka-bbb-fsesl/project/Dependencies.scala b/akka-bbb-fsesl/project/Dependencies.scala new file mode 100644 index 0000000000..2f27ce37cd --- /dev/null +++ b/akka-bbb-fsesl/project/Dependencies.scala @@ -0,0 +1,76 @@ +package org.bigbluebutton.build + +import sbt._ +import Keys._ + +object Dependencies { + + object Versions { + // Scala + val scala = "2.12.7" + val junitInterface = "0.11" + val scalactic = "3.0.3" + + // Libraries + val akkaVersion = "2.5.17" + val logback = "1.2.3" + + // Apache Commons + val lang = "3.8.1" + val codec = "1.11" + + // Redis + val redisScala = "1.8.0" + + // BigBlueButton + val bbbCommons = "0.0.20-SNAPSHOT" + val bbbFsesl = "0.0.7" + + // Test + val scalaTest = "3.0.5" + val akkaTestKit = "2.5.18" + val junit = "4.12" + } + + object Compile { + val scalaLibrary = "org.scala-lang" % "scala-library" % Versions.scala + val scalaCompiler = "org.scala-lang" % "scala-compiler" % Versions.scala + + val akkaActor = "com.typesafe.akka" % "akka-actor_2.12" % Versions.akkaVersion + val akkaSl4fj = "com.typesafe.akka" % "akka-slf4j_2.12" % Versions.akkaVersion + + val logback = "ch.qos.logback" % "logback-classic" % Versions.logback % "runtime" + val commonsCodec = "commons-codec" % "commons-codec" % Versions.codec + + val apacheLang = "org.apache.commons" % "commons-lang3" % Versions.lang + + val redisScala = "com.github.etaty" % "rediscala_2.12" % Versions.redisScala + + val bbbCommons = "org.bigbluebutton" % "bbb-common-message_2.12" % Versions.bbbCommons + val bbbFseslClient = "org.bigbluebutton" % "bbb-fsesl-client" % Versions.bbbFsesl + } + + object Test { + val scalaTest = "org.scalatest" %% "scalatest" % Versions.scalaTest % "test" + val junit = "junit" % "junit" % Versions.junit % "test" + val scalactic = "org.scalactic" % "scalactic_2.12" % Versions.scalactic % "test" + val akkaTestKit = "com.typesafe.akka" %% "akka-testkit" % Versions.akkaTestKit % "test" + } + + val testing = Seq( + Test.scalaTest, + Test.junit, + Test.scalactic, + Test.akkaTestKit) + + val runtime = Seq( + Compile.scalaLibrary, + Compile.scalaCompiler, + Compile.akkaActor, + Compile.logback, + Compile.commonsCodec, + Compile.apacheLang, + Compile.redisScala, + Compile.bbbCommons, + Compile.bbbFseslClient) ++ testing +} diff --git a/akka-bbb-fsesl/project/build.properties b/akka-bbb-fsesl/project/build.properties index a6e117b610..2e6e3d2460 100755 --- a/akka-bbb-fsesl/project/build.properties +++ b/akka-bbb-fsesl/project/build.properties @@ -1 +1 @@ -sbt.version=0.13.8 +sbt.version=1.2.6 \ No newline at end of file diff --git a/akka-bbb-fsesl/project/plugins.sbt b/akka-bbb-fsesl/project/plugins.sbt index 56e1e39f39..bc8c448553 100755 --- a/akka-bbb-fsesl/project/plugins.sbt +++ b/akka-bbb-fsesl/project/plugins.sbt @@ -1,11 +1,11 @@ addSbtPlugin("io.spray" % "sbt-revolver" % "0.9.1") -addSbtPlugin("org.scalariform" % "sbt-scalariform" % "1.8.2") - addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "5.2.4") -addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "1.3.6") +addSbtPlugin("org.scalariform" % "sbt-scalariform" % "1.8.2") + +addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "1.3.12") -addSbtPlugin("net.vonbuchholtz" % "sbt-dependency-check" % "0.2.7") +addSbtPlugin("net.vonbuchholtz" % "sbt-dependency-check" % "0.2.8") addSbtPlugin("org.scalastyle" %% "scalastyle-sbt-plugin" % "1.0.0") diff --git a/akka-bbb-fsesl/src/main/scala/org/bigbluebutton/Boot.scala b/akka-bbb-fsesl/src/main/scala/org/bigbluebutton/Boot.scala index 1ab8664c2b..1ae4cbed2e 100755 --- a/akka-bbb-fsesl/src/main/scala/org/bigbluebutton/Boot.scala +++ b/akka-bbb-fsesl/src/main/scala/org/bigbluebutton/Boot.scala @@ -2,7 +2,8 @@ package org.bigbluebutton import akka.actor.{ ActorSystem } -import org.bigbluebutton.endpoint.redis.{ AppsRedisSubscriberActor, RedisPublisher } +import org.bigbluebutton.common2.redis.RedisPublisher +import org.bigbluebutton.endpoint.redis.FSESLRedisSubscriberActor import org.bigbluebutton.freeswitch.{ RxJsonMsgHdlrActor, VoiceConferenceService } import org.bigbluebutton.freeswitch.bus.InsonMsgBus import org.bigbluebutton.freeswitch.voice.FreeswitchConferenceEventListener @@ -13,7 +14,7 @@ object Boot extends App with SystemConfiguration { implicit val system = ActorSystem("bigbluebutton-fsesl-system") - val redisPublisher = new RedisPublisher(system) + val redisPublisher = new RedisPublisher(system, "BbbFsEslAkkaPub") val eslConnection = new DefaultManagerConnection(eslHost, eslPort, eslPassword) @@ -34,6 +35,5 @@ object Boot extends App with SystemConfiguration { val redisMessageHandlerActor = system.actorOf(RxJsonMsgHdlrActor.props(fsApplication)) inJsonMsgBus.subscribe(redisMessageHandlerActor, toFsAppsJsonChannel) - val redisSubscriberActor = system.actorOf(AppsRedisSubscriberActor.props(system, inJsonMsgBus), "redis-subscriber") - + val redisSubscriberActor = system.actorOf(FSESLRedisSubscriberActor.props(system, inJsonMsgBus), "redis-subscriber") } diff --git a/akka-bbb-fsesl/src/main/scala/org/bigbluebutton/SystemConfiguration.scala b/akka-bbb-fsesl/src/main/scala/org/bigbluebutton/SystemConfiguration.scala index c9c776a410..188d202835 100755 --- a/akka-bbb-fsesl/src/main/scala/org/bigbluebutton/SystemConfiguration.scala +++ b/akka-bbb-fsesl/src/main/scala/org/bigbluebutton/SystemConfiguration.scala @@ -1,23 +1,15 @@ package org.bigbluebutton -import com.typesafe.config.ConfigFactory import scala.util.Try -trait SystemConfiguration { - - val config = ConfigFactory.load() +import org.bigbluebutton.common2.redis.RedisConfiguration +trait SystemConfiguration extends RedisConfiguration { lazy val eslHost = Try(config.getString("freeswitch.esl.host")).getOrElse("127.0.0.1") lazy val eslPort = Try(config.getInt("freeswitch.esl.port")).getOrElse(8021) lazy val eslPassword = Try(config.getString("freeswitch.esl.password")).getOrElse("ClueCon") lazy val fsProfile = Try(config.getString("freeswitch.conf.profile")).getOrElse("cdquality") - lazy val redisHost = Try(config.getString("redis.host")).getOrElse("127.0.0.1") - lazy val redisPort = Try(config.getInt("redis.port")).getOrElse(6379) - lazy val redisPassword = Try(config.getString("redis.password")).getOrElse("") - - lazy val toVoiceConfRedisChannel = Try(config.getString("redis.toVoiceConfRedisChannel")).getOrElse("to-voice-conf-redis-channel") - lazy val fromVoiceConfRedisChannel = Try(config.getString("redis.fromVoiceConfRedisChannel")).getOrElse("from-voice-conf-redis-channel") lazy val toFsAppsJsonChannel = Try(config.getString("eventBus.toFsAppsChannel")).getOrElse("to-fs-apps-json-channel") lazy val fromFsAppsJsonChannel = Try(config.getString("eventBus.fromFsAppsChannel")).getOrElse("from-fs-apps-json-channel") } diff --git a/akka-bbb-fsesl/src/main/scala/org/bigbluebutton/endpoint/redis/AppsRedisSubscriberActor.scala b/akka-bbb-fsesl/src/main/scala/org/bigbluebutton/endpoint/redis/FSESLRedisSubscriberActor.scala similarity index 68% rename from akka-bbb-fsesl/src/main/scala/org/bigbluebutton/endpoint/redis/AppsRedisSubscriberActor.scala rename to akka-bbb-fsesl/src/main/scala/org/bigbluebutton/endpoint/redis/FSESLRedisSubscriberActor.scala index 4f969be0b6..c021f739b7 100755 --- a/akka-bbb-fsesl/src/main/scala/org/bigbluebutton/endpoint/redis/AppsRedisSubscriberActor.scala +++ b/akka-bbb-fsesl/src/main/scala/org/bigbluebutton/endpoint/redis/FSESLRedisSubscriberActor.scala @@ -6,49 +6,54 @@ import java.net.InetSocketAddress import scala.concurrent.ExecutionContext.Implicits.global import scala.concurrent.duration.DurationInt + import org.bigbluebutton.SystemConfiguration +import org.bigbluebutton.common2.redis.RedisAppSubscriberActor +import org.bigbluebutton.common2.redis.RedisConfiguration +import org.bigbluebutton.common2.redis.RedisSubscriber +import org.bigbluebutton.freeswitch.bus.InJsonMsg +import org.bigbluebutton.freeswitch.bus.InsonMsgBus +import org.bigbluebutton.freeswitch.bus.ReceivedJsonMsg + import akka.actor.ActorSystem import akka.actor.OneForOneStrategy import akka.actor.Props import akka.actor.SupervisorStrategy.Resume -import org.bigbluebutton.freeswitch.bus.{ InJsonMsg, InsonMsgBus, ReceivedJsonMsg } import redis.actors.RedisSubscriberActor import redis.api.pubsub.Message -import redis.api.pubsub.PMessage import redis.api.servers.ClientSetname -object AppsRedisSubscriberActor extends SystemConfiguration { +object FSESLRedisSubscriberActor extends RedisSubscriber with RedisConfiguration { val channels = Seq(toVoiceConfRedisChannel) val patterns = Seq("bigbluebutton:to-voice-conf:*", "bigbluebutton:from-bbb-apps:*") def props(system: ActorSystem, inJsonMgBus: InsonMsgBus): Props = - Props(classOf[AppsRedisSubscriberActor], system, inJsonMgBus, + Props(classOf[FSESLRedisSubscriberActor], system, inJsonMgBus, redisHost, redisPort, channels, patterns).withDispatcher("akka.rediscala-subscriber-worker-dispatcher") } -class AppsRedisSubscriberActor( +class FSESLRedisSubscriberActor( val system: ActorSystem, inJsonMgBus: InsonMsgBus, redisHost: String, redisPort: Int, channels: Seq[String] = Nil, patterns: Seq[String] = Nil) - extends RedisSubscriberActor( - new InetSocketAddress(redisHost, redisPort), - channels, patterns, onConnectStatus = connected => { println(s"connected: $connected") }) with SystemConfiguration { + extends RedisSubscriberActor( + new InetSocketAddress(redisHost, redisPort), + channels, patterns, onConnectStatus = connected => { println(s"connected: $connected") }) + with SystemConfiguration + with RedisAppSubscriberActor { override val supervisorStrategy = OneForOneStrategy(maxNrOfRetries = 10, withinTimeRange = 1 minute) { case e: Exception => { val sw: StringWriter = new StringWriter() - sw.write("An exception has been thrown on AppsRedisSubscriberActor, exception message [" + e.getMessage() + "] (full stacktrace below)\n") + sw.write("An exception has been thrown on FSESlRedisSubscriberActor, exception message [" + e.getMessage() + "] (full stacktrace below)\n") e.printStackTrace(new PrintWriter(sw)) log.error(sw.toString()) Resume } } - - // val decoder = new FromJsonDecoder() - var lastPongReceivedOn = 0L system.scheduler.schedule(10 seconds, 10 seconds)(checkPongMessage()) @@ -71,12 +76,4 @@ class AppsRedisSubscriberActor( inJsonMgBus.publish(InJsonMsg(toFsAppsJsonChannel, receivedJsonMessage)) } } - - def onPMessage(pmessage: PMessage) { - // log.debug(s"pattern message received: $pmessage") - } - - def handleMessage(msg: String) { - log.warning("**** TODO: Handle pubsub messages. ****") - } } diff --git a/akka-bbb-fsesl/src/main/scala/org/bigbluebutton/endpoint/redis/RedisPublisher.scala b/akka-bbb-fsesl/src/main/scala/org/bigbluebutton/endpoint/redis/RedisPublisher.scala deleted file mode 100755 index 11acf3d06d..0000000000 --- a/akka-bbb-fsesl/src/main/scala/org/bigbluebutton/endpoint/redis/RedisPublisher.scala +++ /dev/null @@ -1,20 +0,0 @@ -package org.bigbluebutton.endpoint.redis - -import redis.RedisClient -import akka.actor.ActorSystem -import org.bigbluebutton.SystemConfiguration - -class RedisPublisher(val system: ActorSystem) extends SystemConfiguration { - - val redis = RedisClient(redisHost, redisPort)(system) - - // Set the name of this client to be able to distinguish when doing - // CLIENT LIST on redis-cli - redis.clientSetname("BbbFsEslAkkaPub") - - def publish(channel: String, data: String) { - //println("PUBLISH TO [" + channel + "]: \n [" + data + "]") - redis.publish(channel, data) - } - -} 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 f82d080800..a72302e7f3 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 @@ -2,9 +2,9 @@ package org.bigbluebutton.freeswitch import org.bigbluebutton.SystemConfiguration import org.bigbluebutton.freeswitch.voice.IVoiceConferenceService -import org.bigbluebutton.endpoint.redis.RedisPublisher import org.bigbluebutton.common2.msgs._ -import org.bigbluebutton.common2.util.JsonUtil +import org.bigbluebutton.common2.util.JsonUtil +import org.bigbluebutton.common2.redis.RedisPublisher class VoiceConferenceService(sender: RedisPublisher) extends IVoiceConferenceService with SystemConfiguration { diff --git a/bbb-apps-common/build.sbt b/bbb-apps-common/build.sbt index 479d4e6ad4..ca5fd2275a 100755 --- a/bbb-apps-common/build.sbt +++ b/bbb-apps-common/build.sbt @@ -46,7 +46,6 @@ libraryDependencies += "com.softwaremill.quicklens" %% "quicklens" % "1.4.11" libraryDependencies += "org.bigbluebutton" % "bbb-common-message_2.12" % "0.0.19-SNAPSHOT" libraryDependencies += "com.google.code.gson" % "gson" % "2.8.5" -libraryDependencies += "redis.clients" % "jedis" % "2.9.0" // https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 libraryDependencies += "org.apache.commons" % "commons-lang3" % "3.7" diff --git a/bbb-apps-common/src/main/scala/org/bigbluebutton/client/ClientGWApplication.scala b/bbb-apps-common/src/main/scala/org/bigbluebutton/client/ClientGWApplication.scala index 9f0bf267da..30d2c67993 100644 --- a/bbb-apps-common/src/main/scala/org/bigbluebutton/client/ClientGWApplication.scala +++ b/bbb-apps-common/src/main/scala/org/bigbluebutton/client/ClientGWApplication.scala @@ -3,10 +3,12 @@ package org.bigbluebutton.client import akka.actor.ActorSystem import akka.event.Logging import org.bigbluebutton.client.bus._ -import org.bigbluebutton.client.endpoint.redis.{AppsRedisSubscriberActor, MessageSender, RedisPublisher} +import org.bigbluebutton.client.endpoint.redis.AppsRedisSubscriberActor import org.bigbluebutton.client.meeting.MeetingManagerActor - -import scala.concurrent.duration._ +import org.bigbluebutton.common2.redis.RedisPublisher + +import scala.concurrent.duration._ +import org.bigbluebutton.common2.redis.MessageSender class ClientGWApplication(val msgToClientGW: MsgToClientGW) extends SystemConfiguration{ @@ -20,7 +22,7 @@ class ClientGWApplication(val msgToClientGW: MsgToClientGW) extends SystemConfig private val msgToRedisEventBus = new MsgToRedisEventBus private val msgToClientEventBus = new MsgToClientEventBus - private val redisPublisher = new RedisPublisher(system) + private val redisPublisher = new RedisPublisher(system, "Red5AppsPub") private val msgSender: MessageSender = new MessageSender(redisPublisher) private val meetingManagerActorRef = system.actorOf( diff --git a/bbb-apps-common/src/main/scala/org/bigbluebutton/client/MsgToRedisActor.scala b/bbb-apps-common/src/main/scala/org/bigbluebutton/client/MsgToRedisActor.scala index 94b37ae924..5a3ce496ff 100644 --- a/bbb-apps-common/src/main/scala/org/bigbluebutton/client/MsgToRedisActor.scala +++ b/bbb-apps-common/src/main/scala/org/bigbluebutton/client/MsgToRedisActor.scala @@ -1,10 +1,10 @@ package org.bigbluebutton.client -import akka.actor.{Actor, ActorLogging, Props} +import akka.actor.{ Actor, ActorLogging, Props } import org.bigbluebutton.common2.msgs.BbbCommonEnvJsNodeMsg -import org.bigbluebutton.common2.util.JsonUtil -import org.bigbluebutton.client.endpoint.redis.MessageSender +import org.bigbluebutton.common2.util.JsonUtil import org.bigbluebutton.common2.msgs.LookUpUserReqMsg +import org.bigbluebutton.common2.redis.MessageSender object MsgToRedisActor { def props(msgSender: MessageSender): Props = @@ -20,11 +20,10 @@ class MsgToRedisActor(msgSender: MessageSender) def handle(msg: BbbCommonEnvJsNodeMsg): Unit = { val json = JsonUtil.toJson(msg) - + msg.envelope.name match { case LookUpUserReqMsg.NAME => msgSender.send(toThirdPartyRedisChannel, json) - case _ => msgSender.send(toAkkaAppsRedisChannel, json) + case _ => msgSender.send(toAkkaAppsRedisChannel, json) } } - } diff --git a/bbb-apps-common/src/main/scala/org/bigbluebutton/client/SystemConfiguration.scala b/bbb-apps-common/src/main/scala/org/bigbluebutton/client/SystemConfiguration.scala index 26e7528bbb..1880c82f69 100644 --- a/bbb-apps-common/src/main/scala/org/bigbluebutton/client/SystemConfiguration.scala +++ b/bbb-apps-common/src/main/scala/org/bigbluebutton/client/SystemConfiguration.scala @@ -1,15 +1,10 @@ package org.bigbluebutton.client import scala.util.Try -import com.typesafe.config.ConfigFactory -trait SystemConfiguration { - val config = ConfigFactory.load() - - lazy val redisHost = Try(config.getString("redis.host")).getOrElse("127.0.0.1") - lazy val redisPort = Try(config.getInt("redis.port")).getOrElse(6379) - lazy val redisPassword = Try(config.getString("redis.password")).getOrElse("") +import org.bigbluebutton.common2.redis.RedisConfiguration +trait SystemConfiguration extends RedisConfiguration { lazy val toAkkaAppsRedisChannel = Try(config.getString("redis.toAkkaAppsRedisChannel")).getOrElse("to-akka-apps-redis-channel") lazy val fromAkkaAppsRedisChannel = Try(config.getString("redis.fromAkkaAppsRedisChannel")).getOrElse("from-akka-apps-redis-channel") lazy val toThirdPartyRedisChannel = Try(config.getString("redis.toThirdPartyRedisChannel")).getOrElse("to-third-party-redis-channel") diff --git a/bbb-apps-common/src/main/scala/org/bigbluebutton/client/bus/JsonMsgFromAkkaAppsBus.scala b/bbb-apps-common/src/main/scala/org/bigbluebutton/client/bus/JsonMsgFromAkkaAppsBus.scala deleted file mode 100755 index ad28aa0618..0000000000 --- a/bbb-apps-common/src/main/scala/org/bigbluebutton/client/bus/JsonMsgFromAkkaAppsBus.scala +++ /dev/null @@ -1,32 +0,0 @@ -package org.bigbluebutton.client.bus - -import akka.actor.ActorRef -import akka.event.{EventBus, LookupClassification} - -case class JsonMsgFromAkkaApps(name: String, data: String) -case class JsonMsgFromAkkaAppsEvent(val topic: String, val payload: JsonMsgFromAkkaApps) - -class JsonMsgFromAkkaAppsBus extends EventBus with LookupClassification { - type Event = JsonMsgFromAkkaAppsEvent - type Classifier = String - type Subscriber = ActorRef - - // is used for extracting the classifier from the incoming events - override protected def classify(event: Event): Classifier = event.topic - - // will be invoked for each event for all subscribers which registered themselves - // for the event’s classifier - override protected def publish(event: Event, subscriber: Subscriber): Unit = { - subscriber ! event.payload - } - - // must define a full order over the subscribers, expressed as expected from - // `java.lang.Comparable.compare` - override protected def compareSubscribers(a: Subscriber, b: Subscriber): Int = - a.compareTo(b) - - // determines the initial size of the index data structure - // used internally (i.e. the expected number of different classifiers) - override protected def mapSize: Int = 128 - -} diff --git a/bbb-apps-common/src/main/scala/org/bigbluebutton/client/bus/MsgFromAkkaAppsEventBus.scala b/bbb-apps-common/src/main/scala/org/bigbluebutton/client/bus/MsgFromAkkaAppsEventBus.scala deleted file mode 100755 index 20dc505536..0000000000 --- a/bbb-apps-common/src/main/scala/org/bigbluebutton/client/bus/MsgFromAkkaAppsEventBus.scala +++ /dev/null @@ -1,31 +0,0 @@ -package org.bigbluebutton.client.bus - -import akka.actor.ActorRef -import akka.event.{EventBus, LookupClassification} -import org.bigbluebutton.common2.msgs.{ BbbCommonEnvJsNodeMsg} - -case class MsgFromAkkaApps(val topic: String, val payload: BbbCommonEnvJsNodeMsg) - -class MsgFromAkkaAppsEventBus extends EventBus with LookupClassification { - type Event = MsgFromAkkaApps - type Classifier = String - type Subscriber = ActorRef - - // is used for extracting the classifier from the incoming events - override protected def classify(event: Event): Classifier = event.topic - - // will be invoked for each event for all subscribers which registered themselves - // for the event’s classifier - override protected def publish(event: Event, subscriber: Subscriber): Unit = { - subscriber ! event.payload - } - - // must define a full order over the subscribers, expressed as expected from - // `java.lang.Comparable.compare` - override protected def compareSubscribers(a: Subscriber, b: Subscriber): Int = - a.compareTo(b) - - // determines the initial size of the index data structure - // used internally (i.e. the expected number of different classifiers) - override protected def mapSize: Int = 128 -} diff --git a/bbb-apps-common/src/main/scala/org/bigbluebutton/client/endpoint/redis/KeepAliveRedisPublisher.scala b/bbb-apps-common/src/main/scala/org/bigbluebutton/client/endpoint/redis/KeepAliveRedisPublisher.scala deleted file mode 100755 index 131a2d46ce..0000000000 --- a/bbb-apps-common/src/main/scala/org/bigbluebutton/client/endpoint/redis/KeepAliveRedisPublisher.scala +++ /dev/null @@ -1,17 +0,0 @@ -package org.bigbluebutton.client.endpoint.redis - -import scala.concurrent.duration._ -import scala.concurrent.ExecutionContext.Implicits.global -import akka.actor.ActorSystem -import org.bigbluebutton.client.SystemConfiguration -//import org.bigbluebutton.common.messages.BbbAppsIsAliveMessage - -class KeepAliveRedisPublisher(val system: ActorSystem, sender: RedisPublisher) extends SystemConfiguration { - - val startedOn = System.currentTimeMillis() - - system.scheduler.schedule(2 seconds, 5 seconds) { -// val msg = new BbbAppsIsAliveMessage(startedOn, System.currentTimeMillis()) -// sender.publish("bigbluebutton:from-bbb-apps:keepalive", msg.toJson()) - } -} diff --git a/bbb-apps-common/src/main/scala/org/bigbluebutton/client/endpoint/redis/MessageSender.scala b/bbb-apps-common/src/main/scala/org/bigbluebutton/client/endpoint/redis/MessageSender.scala deleted file mode 100755 index 191af624c8..0000000000 --- a/bbb-apps-common/src/main/scala/org/bigbluebutton/client/endpoint/redis/MessageSender.scala +++ /dev/null @@ -1,8 +0,0 @@ -package org.bigbluebutton.client.endpoint.redis - -class MessageSender(publisher: RedisPublisher) { - - def send(channel: String, data: String) { - publisher.publish(channel, data) - } -} diff --git a/bbb-apps-common/src/main/scala/org/bigbluebutton/client/endpoint/redis/AppsRedisSubscriberActor.scala b/bbb-apps-common/src/main/scala/org/bigbluebutton/client/endpoint/redis/Red5AppsRedisSubscriberActor.scala similarity index 67% rename from bbb-apps-common/src/main/scala/org/bigbluebutton/client/endpoint/redis/AppsRedisSubscriberActor.scala rename to bbb-apps-common/src/main/scala/org/bigbluebutton/client/endpoint/redis/Red5AppsRedisSubscriberActor.scala index 2d3a30fe97..293bde7d9b 100644 --- a/bbb-apps-common/src/main/scala/org/bigbluebutton/client/endpoint/redis/AppsRedisSubscriberActor.scala +++ b/bbb-apps-common/src/main/scala/org/bigbluebutton/client/endpoint/redis/Red5AppsRedisSubscriberActor.scala @@ -1,17 +1,18 @@ package org.bigbluebutton.client.endpoint.redis -import akka.actor.{ActorLogging, OneForOneStrategy, Props} +import akka.actor.{ ActorLogging, OneForOneStrategy, Props } import akka.actor.SupervisorStrategy.Resume -import java.io.{PrintWriter, StringWriter} +import java.io.{ PrintWriter, StringWriter } import java.net.InetSocketAddress import redis.actors.RedisSubscriberActor -import redis.api.pubsub.{Message, PMessage} +import redis.api.pubsub.{ Message, PMessage } import scala.concurrent.duration._ import org.bigbluebutton.client._ -import org.bigbluebutton.client.bus.{JsonMsgFromAkkaApps, JsonMsgFromAkkaAppsBus, JsonMsgFromAkkaAppsEvent} -import redis.api.servers.ClientSetname +import org.bigbluebutton.client.bus.{ JsonMsgFromAkkaApps, JsonMsgFromAkkaAppsBus, JsonMsgFromAkkaAppsEvent } +import redis.api.servers.ClientSetname +import org.bigbluebutton.common2.redis.RedisAppSubscriberActor object AppsRedisSubscriberActor extends SystemConfiguration { @@ -26,10 +27,11 @@ object AppsRedisSubscriberActor extends SystemConfiguration { class AppsRedisSubscriberActor(jsonMsgBus: JsonMsgFromAkkaAppsBus, redisHost: String, redisPort: Int, - channels: Seq[String] = Nil, patterns: Seq[String] = Nil) - extends RedisSubscriberActor(new InetSocketAddress(redisHost, redisPort), - channels, patterns, onConnectStatus = connected => { println(s"connected: $connected") }) - with SystemConfiguration with ActorLogging { + channels: Seq[String] = Nil, patterns: Seq[String] = Nil) + extends RedisSubscriberActor( + new InetSocketAddress(redisHost, redisPort), + channels, patterns, onConnectStatus = connected => { println(s"connected: $connected") }) + with SystemConfiguration with ActorLogging with RedisAppSubscriberActor { override val supervisorStrategy = OneForOneStrategy(maxNrOfRetries = 10, withinTimeRange = 1 minute) { case e: Exception => { @@ -41,7 +43,6 @@ class AppsRedisSubscriberActor(jsonMsgBus: JsonMsgFromAkkaAppsBus, redisHost: St } } - // Set the name of this client to be able to distinguish when doing // CLIENT LIST on redis-cli write(ClientSetname("Red5AppsSub").encodedRequest) @@ -54,9 +55,4 @@ class AppsRedisSubscriberActor(jsonMsgBus: JsonMsgFromAkkaAppsBus, redisHost: St } } - - def onPMessage(pmessage: PMessage) { - // We don't use PSubscribe anymore, but an implementation of the method is required - log.error("Should not be receiving a PMessage. It triggered on a match of pattern: " + pmessage.patternMatched) - } } diff --git a/bbb-apps-common/src/main/scala/org/bigbluebutton/client/endpoint/redis/RedisPublisher.scala b/bbb-apps-common/src/main/scala/org/bigbluebutton/client/endpoint/redis/RedisPublisher.scala deleted file mode 100755 index 379b15f5de..0000000000 --- a/bbb-apps-common/src/main/scala/org/bigbluebutton/client/endpoint/redis/RedisPublisher.scala +++ /dev/null @@ -1,24 +0,0 @@ -package org.bigbluebutton.client.endpoint.redis - -import redis.RedisClient -import akka.actor.ActorSystem -import akka.event.Logging -import org.bigbluebutton.client.SystemConfiguration -import akka.util.ByteString - -class RedisPublisher(val system: ActorSystem) extends SystemConfiguration { - - val redis = RedisClient(redisHost, redisPort)(system) - - val log = Logging(system, getClass) - - // Set the name of this client to be able to distinguish when doing - // CLIENT LIST on redis-cli - redis.clientSetname("Red5AppsPub") - - def publish(channel: String, data: String) { - //log.debug("PUBLISH TO [" + channel + "]: \n [" + data + "]") - redis.publish(channel, ByteString(data)) - } - -} diff --git a/bbb-common-message/build.sbt b/bbb-common-message/build.sbt index f18aee17ff..054aa4acd3 100755 --- a/bbb-common-message/build.sbt +++ b/bbb-common-message/build.sbt @@ -2,8 +2,6 @@ import org.bigbluebutton.build._ version := "0.0.20-SNAPSHOT" -scalaVersion := "2.12.7" - val compileSettings = Seq( organization := "org.bigbluebutton", diff --git a/bbb-common-message/project/Dependencies.scala b/bbb-common-message/project/Dependencies.scala index a9f76fbc5c..92c0b22065 100644 --- a/bbb-common-message/project/Dependencies.scala +++ b/bbb-common-message/project/Dependencies.scala @@ -11,12 +11,15 @@ object Dependencies { val junit = "4.12" val junitInterface = "0.11" val scalactic = "3.0.3" - val pegdown = "1.6.0" // Libraries + val akkaVersion = "2.5.17" val gson = "2.8.5" val jackson = "2.9.7" val sl4j = "1.7.25" + + // Redis + val redisScala = "1.8.0" val lettuce = "5.1.2.RELEASE" // Test @@ -27,10 +30,14 @@ object Dependencies { val scalaLibrary = "org.scala-lang" % "scala-library" % Versions.scala val scalaCompiler = "org.scala-lang" % "scala-compiler" % Versions.scala + val akkaActor = "com.typesafe.akka" % "akka-actor_2.12" % Versions.akkaVersion + val googleGson = "com.google.code.gson" % "gson" % Versions.gson val jacksonModule = "com.fasterxml.jackson.module" %% "jackson-module-scala" % Versions.jackson val sl4jApi = "org.slf4j" % "slf4j-api" % Versions.sl4j + val lettuceCore = "io.lettuce" % "lettuce-core" % Versions.lettuce + val redisScala = "com.github.etaty" % "rediscala_2.12" % Versions.redisScala } object Test { @@ -38,21 +45,21 @@ object Dependencies { val junit = "junit" % "junit" % Versions.junit % "test" val junitInteface = "com.novocode" % "junit-interface" % Versions.junitInterface % "test" val scalactic = "org.scalactic" % "scalactic_2.12" % Versions.scalactic % "test" - val pegdown = "org.pegdown" % "pegdown" % Versions.pegdown % "test" } val testing = Seq( Test.scalaTest, Test.junit, Test.junitInteface, - Test.scalactic, - Test.pegdown) + Test.scalactic) val runtime = Seq( Compile.scalaLibrary, Compile.scalaCompiler, + Compile.akkaActor, Compile.googleGson, Compile.jacksonModule, Compile.sl4jApi, - Compile.lettuceCore) ++ testing + Compile.lettuceCore, + Compile.redisScala) ++ testing } diff --git a/bbb-common-message/src/main/java/org/bigbluebutton/common2/redis/RedisStorageService.java b/bbb-common-message/src/main/java/org/bigbluebutton/common2/redis/RedisStorageService.java index 33133cf452..8a52f033b4 100644 --- a/bbb-common-message/src/main/java/org/bigbluebutton/common2/redis/RedisStorageService.java +++ b/bbb-common-message/src/main/java/org/bigbluebutton/common2/redis/RedisStorageService.java @@ -31,7 +31,6 @@ import io.lettuce.core.RedisURI; import io.lettuce.core.api.StatefulRedisConnection; import io.lettuce.core.api.sync.RedisCommands; import io.lettuce.core.dynamic.RedisCommandFactory; -import io.lettuce.core.output.StatusOutput; public class RedisStorageService { diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/bus/IncomingJsonMessageBus.scala b/bbb-common-message/src/main/scala/org/bigbluebutton/common2/bus/IncomingJsonMessageBus.scala old mode 100755 new mode 100644 similarity index 94% rename from akka-bbb-apps/src/main/scala/org/bigbluebutton/core/bus/IncomingJsonMessageBus.scala rename to bbb-common-message/src/main/scala/org/bigbluebutton/common2/bus/IncomingJsonMessageBus.scala index f2e9aa281d..96dbff59b4 --- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/bus/IncomingJsonMessageBus.scala +++ b/bbb-common-message/src/main/scala/org/bigbluebutton/common2/bus/IncomingJsonMessageBus.scala @@ -1,4 +1,4 @@ -package org.bigbluebutton.core.bus +package org.bigbluebutton.common2.bus import akka.actor.ActorRef import akka.event.{ EventBus, LookupClassification } diff --git a/bbb-common-web/src/main/scala/org/bigbluebutton/api2/bus/JsonMsgFromAkkaAppsBus.scala b/bbb-common-message/src/main/scala/org/bigbluebutton/common2/bus/JsonMsgFromAkkaAppsBus.scala old mode 100755 new mode 100644 similarity index 88% rename from bbb-common-web/src/main/scala/org/bigbluebutton/api2/bus/JsonMsgFromAkkaAppsBus.scala rename to bbb-common-message/src/main/scala/org/bigbluebutton/common2/bus/JsonMsgFromAkkaAppsBus.scala index 5d26e2c23b..871f6f76f9 --- a/bbb-common-web/src/main/scala/org/bigbluebutton/api2/bus/JsonMsgFromAkkaAppsBus.scala +++ b/bbb-common-message/src/main/scala/org/bigbluebutton/common2/bus/JsonMsgFromAkkaAppsBus.scala @@ -1,7 +1,7 @@ -package org.bigbluebutton.api2.bus +package org.bigbluebutton.common2.bus import akka.actor.ActorRef -import akka.event.{EventBus, LookupClassification} +import akka.event.{ EventBus, LookupClassification } case class JsonMsgFromAkkaApps(name: String, data: String) case class JsonMsgFromAkkaAppsEvent(val topic: String, val payload: JsonMsgFromAkkaApps) @@ -23,7 +23,7 @@ class JsonMsgFromAkkaAppsBus extends EventBus with LookupClassification { // must define a full order over the subscribers, expressed as expected from // `java.lang.Comparable.compare` override protected def compareSubscribers(a: Subscriber, b: Subscriber): Int = - a.compareTo(b) + a.compareTo(b) // determines the initial size of the index data structure // used internally (i.e. the expected number of different classifiers) diff --git a/bbb-common-web/src/main/scala/org/bigbluebutton/api2/bus/MsgFromAkkaAppsEventBus.scala b/bbb-common-message/src/main/scala/org/bigbluebutton/common2/bus/MsgFromAkkaAppsEventBus.scala old mode 100755 new mode 100644 similarity index 91% rename from bbb-common-web/src/main/scala/org/bigbluebutton/api2/bus/MsgFromAkkaAppsEventBus.scala rename to bbb-common-message/src/main/scala/org/bigbluebutton/common2/bus/MsgFromAkkaAppsEventBus.scala index e9f25b91a5..097df4a29c --- a/bbb-common-web/src/main/scala/org/bigbluebutton/api2/bus/MsgFromAkkaAppsEventBus.scala +++ b/bbb-common-message/src/main/scala/org/bigbluebutton/common2/bus/MsgFromAkkaAppsEventBus.scala @@ -2,9 +2,9 @@ package org.bigbluebutton.api2.bus import akka.actor.ActorRef import akka.event.{EventBus, LookupClassification} -import org.bigbluebutton.common2.msgs.{BbbCommonEnvCoreMsg} +import org.bigbluebutton.common2.msgs.BbbCommonMsg -case class MsgFromAkkaApps(val topic: String, val payload: BbbCommonEnvCoreMsg) +case class MsgFromAkkaApps(val topic: String, val payload: BbbCommonMsg) class MsgFromAkkaAppsEventBus extends EventBus with LookupClassification { type Event = MsgFromAkkaApps diff --git a/bbb-common-web/src/main/scala/org/bigbluebutton/api2/bus/OldMessageEventBus.scala b/bbb-common-message/src/main/scala/org/bigbluebutton/common2/bus/OldMessageEventBus.scala similarity index 86% rename from bbb-common-web/src/main/scala/org/bigbluebutton/api2/bus/OldMessageEventBus.scala rename to bbb-common-message/src/main/scala/org/bigbluebutton/common2/bus/OldMessageEventBus.scala index cccd288cdc..9b7c6bdd0b 100755 --- a/bbb-common-web/src/main/scala/org/bigbluebutton/api2/bus/OldMessageEventBus.scala +++ b/bbb-common-message/src/main/scala/org/bigbluebutton/common2/bus/OldMessageEventBus.scala @@ -1,7 +1,8 @@ -package org.bigbluebutton.api2.bus +package org.bigbluebutton.common2.bus import akka.actor.ActorRef import akka.event.{EventBus, LookupClassification} +import akka.actor.actorRef2Scala case class OldReceivedJsonMessage(pattern: String, channel: String, msg: String) case class OldIncomingJsonMessage(val topic: String, val payload: OldReceivedJsonMessage) @@ -11,7 +12,7 @@ class OldMessageEventBus extends EventBus with LookupClassification { type Classifier = String type Subscriber = ActorRef - // is used for extracting the classifier from the incoming events + // is used for extracting te classifier from the incoming events override protected def classify(event: Event): Classifier = event.topic // will be invoked for each event for all subscribers which registered themselves diff --git a/bbb-common-web/src/main/scala/org/bigbluebutton/api2/endpoint/redis/MessageSender.scala b/bbb-common-message/src/main/scala/org/bigbluebutton/common2/redis/MessageSender.scala similarity index 71% rename from bbb-common-web/src/main/scala/org/bigbluebutton/api2/endpoint/redis/MessageSender.scala rename to bbb-common-message/src/main/scala/org/bigbluebutton/common2/redis/MessageSender.scala index be38ef4201..2426a353e6 100755 --- a/bbb-common-web/src/main/scala/org/bigbluebutton/api2/endpoint/redis/MessageSender.scala +++ b/bbb-common-message/src/main/scala/org/bigbluebutton/common2/redis/MessageSender.scala @@ -1,4 +1,4 @@ -package org.bigbluebutton.api2.endpoint.redis +package org.bigbluebutton.common2.redis class MessageSender(publisher: RedisPublisher) { diff --git a/bbb-common-message/src/main/scala/org/bigbluebutton/common2/redis/RedisAppSubscriberActor.scala b/bbb-common-message/src/main/scala/org/bigbluebutton/common2/redis/RedisAppSubscriberActor.scala new file mode 100644 index 0000000000..5ee1ee8d81 --- /dev/null +++ b/bbb-common-message/src/main/scala/org/bigbluebutton/common2/redis/RedisAppSubscriberActor.scala @@ -0,0 +1,18 @@ +package org.bigbluebutton.common2.redis + +import akka.actor.Actor +import akka.event.LoggingAdapter +import redis.api.pubsub.PMessage + +trait RedisAppSubscriberActor extends Actor { + + def log: LoggingAdapter + + def handleMessage(msg: String) { + throw new UnsupportedOperationException(); + } + + def onPMessage(pmessage: PMessage) { + throw new UnsupportedOperationException(); + } +} diff --git a/bbb-common-message/src/main/scala/org/bigbluebutton/common2/redis/RedisConfiguration.scala b/bbb-common-message/src/main/scala/org/bigbluebutton/common2/redis/RedisConfiguration.scala new file mode 100644 index 0000000000..ff0e27a0ac --- /dev/null +++ b/bbb-common-message/src/main/scala/org/bigbluebutton/common2/redis/RedisConfiguration.scala @@ -0,0 +1,24 @@ +package org.bigbluebutton.common2.redis + +import scala.util.Try +import com.typesafe.config.ConfigFactory + +trait RedisConfiguration { + val config = ConfigFactory.load() + + // Redis server configuration + lazy val redisHost = Try(config.getString("redis.host")).getOrElse("127.0.0.1") + lazy val redisPort = Try(config.getInt("redis.port")).getOrElse(6379) + lazy val redisPassword = Try(config.getString("redis.password")).getOrElse("") + + // Redis channels + lazy val toAkkaAppsRedisChannel = Try(config.getString("redis.toAkkaAppsRedisChannel")).getOrElse("to-akka-apps-redis-channel") + lazy val fromAkkaAppsRedisChannel = Try(config.getString("redis.fromAkkaAppsRedisChannel")).getOrElse("from-akka-apps-redis-channel") + + lazy val toVoiceConfRedisChannel = Try(config.getString("redis.toVoiceConfRedisChannel")).getOrElse("to-voice-conf-redis-channel") + lazy val fromVoiceConfRedisChannel = Try(config.getString("redis.fromVoiceConfRedisChannel")).getOrElse("from-voice-conf-redis-channel") + + lazy val fromAkkaAppsWbRedisChannel = Try(config.getString("redis.fromAkkaAppsWbRedisChannel")).getOrElse("from-akka-apps-wb-redis-channel") + lazy val fromAkkaAppsChatRedisChannel = Try(config.getString("redis.fromAkkaAppsChatRedisChannel")).getOrElse("from-akka-apps-chat-redis-channel") + lazy val fromAkkaAppsPresRedisChannel = Try(config.getString("redis.fromAkkaAppsPresRedisChannel")).getOrElse("from-akka-apps-pres-redis-channel") +} diff --git a/bbb-common-web/src/main/scala/org/bigbluebutton/api2/endpoint/redis/RedisPublisher.scala b/bbb-common-message/src/main/scala/org/bigbluebutton/common2/redis/RedisPublisher.scala similarity index 57% rename from bbb-common-web/src/main/scala/org/bigbluebutton/api2/endpoint/redis/RedisPublisher.scala rename to bbb-common-message/src/main/scala/org/bigbluebutton/common2/redis/RedisPublisher.scala index 23e47ddd06..d46bdcfa39 100755 --- a/bbb-common-web/src/main/scala/org/bigbluebutton/api2/endpoint/redis/RedisPublisher.scala +++ b/bbb-common-message/src/main/scala/org/bigbluebutton/common2/redis/RedisPublisher.scala @@ -1,12 +1,11 @@ -package org.bigbluebutton.api2.endpoint.redis +package org.bigbluebutton.common2.redis import akka.actor.ActorSystem import akka.event.Logging import akka.util.ByteString -import org.bigbluebutton.api2.SystemConfiguration import redis.RedisClient -class RedisPublisher(val system: ActorSystem) extends SystemConfiguration { +class RedisPublisher(val system: ActorSystem, val clientName: String) extends RedisConfiguration { val redis = RedisClient(redisHost, redisPort)(system) @@ -14,10 +13,9 @@ class RedisPublisher(val system: ActorSystem) extends SystemConfiguration { // Set the name of this client to be able to distinguish when doing // CLIENT LIST on redis-cli - redis.clientSetname("BbbWebPub") + redis.clientSetname(clientName) def publish(channel: String, data: String) { - //log.debug("PUBLISH TO \n[" + channel + "]: \n " + data + "\n") redis.publish(channel, ByteString(data)) } diff --git a/bbb-common-message/src/main/scala/org/bigbluebutton/common2/redis/RedisSubscriber.scala b/bbb-common-message/src/main/scala/org/bigbluebutton/common2/redis/RedisSubscriber.scala new file mode 100644 index 0000000000..630f079099 --- /dev/null +++ b/bbb-common-message/src/main/scala/org/bigbluebutton/common2/redis/RedisSubscriber.scala @@ -0,0 +1,6 @@ +package org.bigbluebutton.common2.redis + +abstract class RedisSubscriber extends RedisConfiguration { + val channels: Seq[String] + val patterns: Seq[String] +} diff --git a/bbb-common-web/build.sbt b/bbb-common-web/build.sbt index 4acb056c81..0519059e38 100755 --- a/bbb-common-web/build.sbt +++ b/bbb-common-web/build.sbt @@ -2,8 +2,6 @@ import org.bigbluebutton.build._ version := "0.0.3-SNAPSHOT" -scalaVersion := "2.12.7" - val compileSettings = Seq( organization := "org.bigbluebutton", diff --git a/bbb-common-web/project/Dependencies.scala b/bbb-common-web/project/Dependencies.scala index a42aa9a5cd..4de3bd7531 100644 --- a/bbb-common-web/project/Dependencies.scala +++ b/bbb-common-web/project/Dependencies.scala @@ -11,7 +11,6 @@ object Dependencies { val junit = "4.12" val junitInterface = "0.11" val scalactic = "3.0.3" - val pegdown = "1.6.0" // Libraries val akkaVersion = "2.5.17" @@ -83,15 +82,13 @@ object Dependencies { val junit = "junit" % "junit" % Versions.junit % "test" val junitInteface = "com.novocode" % "junit-interface" % Versions.junitInterface % "test" val scalactic = "org.scalactic" % "scalactic_2.12" % Versions.scalactic % "test" - val pegdown = "org.pegdown" % "pegdown" % Versions.pegdown % "test" } val testing = Seq( Test.scalaTest, Test.junit, Test.junitInteface, - Test.scalactic, - Test.pegdown) + Test.scalactic) val runtime = Seq( Compile.scalaLibrary, diff --git a/bbb-common-web/src/main/scala/org/bigbluebutton/api2/BbbWebApiGWApp.scala b/bbb-common-web/src/main/scala/org/bigbluebutton/api2/BbbWebApiGWApp.scala index 053c62ad56..4ac26006a5 100755 --- a/bbb-common-web/src/main/scala/org/bigbluebutton/api2/BbbWebApiGWApp.scala +++ b/bbb-common-web/src/main/scala/org/bigbluebutton/api2/BbbWebApiGWApp.scala @@ -5,12 +5,14 @@ import akka.actor.ActorSystem import akka.event.Logging import org.bigbluebutton.api.messaging.converters.messages._ import org.bigbluebutton.api2.bus._ -import org.bigbluebutton.api2.endpoint.redis.{ AppsRedisSubscriberActor, MessageSender, RedisPublisher } +import org.bigbluebutton.api2.endpoint.redis.{ WebRedisSubscriberActor } +import org.bigbluebutton.common2.redis.MessageSender import org.bigbluebutton.api2.meeting.{ OldMeetingMsgHdlrActor, RegisterUser } import org.bigbluebutton.common2.domain._ import org.bigbluebutton.presentation.messages._ - -import scala.concurrent.duration._ +import scala.concurrent.duration._ +import org.bigbluebutton.common2.redis._ +import org.bigbluebutton.common2.bus._ class BbbWebApiGWApp( val oldMessageReceivedGW: OldMessageReceivedGW, @@ -27,7 +29,7 @@ class BbbWebApiGWApp( log.debug("*********** meetingManagerChannel = " + meetingManagerChannel) private val jsonMsgToAkkaAppsBus = new JsonMsgToAkkaAppsBus - private val redisPublisher = new RedisPublisher(system) + private val redisPublisher = new RedisPublisher(system, "BbbWebPub") private val msgSender: MessageSender = new MessageSender(redisPublisher) private val messageSenderActorRef = system.actorOf(MessageSenderActor.props(msgSender), "messageSenderActor") @@ -55,7 +57,7 @@ class BbbWebApiGWApp( msgToAkkaAppsEventBus.subscribe(msgToAkkaAppsToJsonActor, toAkkaAppsChannel) private val appsRedisSubscriberActor = system.actorOf( - AppsRedisSubscriberActor.props(receivedJsonMsgBus, oldMessageEventBus), "appsRedisSubscriberActor") + WebRedisSubscriberActor.props(receivedJsonMsgBus, oldMessageEventBus), "appsRedisSubscriberActor") private val receivedJsonMsgHdlrActor = system.actorOf( ReceivedJsonMsgHdlrActor.props(msgFromAkkaAppsEventBus), "receivedJsonMsgHdlrActor") diff --git a/bbb-common-web/src/main/scala/org/bigbluebutton/api2/SystemConfiguration.scala b/bbb-common-web/src/main/scala/org/bigbluebutton/api2/SystemConfiguration.scala index 0eb67da981..a092701a3a 100755 --- a/bbb-common-web/src/main/scala/org/bigbluebutton/api2/SystemConfiguration.scala +++ b/bbb-common-web/src/main/scala/org/bigbluebutton/api2/SystemConfiguration.scala @@ -3,16 +3,11 @@ package org.bigbluebutton.api2 import com.typesafe.config.ConfigFactory import scala.util.Try +import org.bigbluebutton.common2.redis.RedisConfiguration -trait SystemConfiguration { - val config = ConfigFactory.load("bbb-web") +trait SystemConfiguration extends RedisConfiguration { + override val config = ConfigFactory.load("bbb-web") - lazy val redisHost = Try(config.getString("redis.host")).getOrElse("127.0.0.1") - lazy val redisPort = Try(config.getInt("redis.port")).getOrElse(6379) - lazy val redisPassword = Try(config.getString("redis.password")).getOrElse("") - - lazy val toAkkaAppsRedisChannel = Try(config.getString("redis.toAkkaAppsRedisChannel")).getOrElse("to-akka-apps-redis-channel") - lazy val fromAkkaAppsRedisChannel = Try(config.getString("redis.fromAkkaAppsRedisChannel")).getOrElse("from-akka-apps-redis-channel") lazy val meetingManagerChannel = Try(config.getString("eventBus.meetingManagerChannel")).getOrElse("FOOOOOOOOO") lazy val fromAkkaAppsChannel = Try(config.getString("eventBus.fromAkkaAppsChannel")).getOrElse("from-akka-apps-channel") lazy val toAkkaAppsChannel = Try(config.getString("eventBus.toAkkaAppsChannel")).getOrElse("to-akka-apps-channel") diff --git a/bbb-common-web/src/main/scala/org/bigbluebutton/api2/bus/MessageSenderActor.scala b/bbb-common-web/src/main/scala/org/bigbluebutton/api2/bus/MessageSenderActor.scala index f4dc981cc9..e21612025c 100755 --- a/bbb-common-web/src/main/scala/org/bigbluebutton/api2/bus/MessageSenderActor.scala +++ b/bbb-common-web/src/main/scala/org/bigbluebutton/api2/bus/MessageSenderActor.scala @@ -4,7 +4,7 @@ import java.io.{PrintWriter, StringWriter} import akka.actor.SupervisorStrategy.Resume import akka.actor.{Actor, ActorLogging, OneForOneStrategy, Props} -import org.bigbluebutton.api2.endpoint.redis.MessageSender +import org.bigbluebutton.common2.redis.MessageSender import scala.concurrent.duration._ object MessageSenderActor { diff --git a/bbb-common-web/src/main/scala/org/bigbluebutton/api2/bus/OldMessageJsonReceiverActor.scala b/bbb-common-web/src/main/scala/org/bigbluebutton/api2/bus/OldMessageJsonReceiverActor.scala index f996ad30ef..ab5af661bf 100755 --- a/bbb-common-web/src/main/scala/org/bigbluebutton/api2/bus/OldMessageJsonReceiverActor.scala +++ b/bbb-common-web/src/main/scala/org/bigbluebutton/api2/bus/OldMessageJsonReceiverActor.scala @@ -1,6 +1,7 @@ package org.bigbluebutton.api2.bus -import akka.actor.{Actor, ActorLogging, Props} +import akka.actor.{Actor, ActorLogging, Props} +import org.bigbluebutton.common2.bus.OldReceivedJsonMessage object OldMessageJsonReceiverActor{ def props(gw: OldMessageReceivedGW): Props = Props(classOf[OldMessageJsonReceiverActor], gw) diff --git a/bbb-common-web/src/main/scala/org/bigbluebutton/api2/bus/ReceivedJsonMsgHdlrActor.scala b/bbb-common-web/src/main/scala/org/bigbluebutton/api2/bus/ReceivedJsonMsgHdlrActor.scala index e63f2d454e..174e4951df 100755 --- a/bbb-common-web/src/main/scala/org/bigbluebutton/api2/bus/ReceivedJsonMsgHdlrActor.scala +++ b/bbb-common-web/src/main/scala/org/bigbluebutton/api2/bus/ReceivedJsonMsgHdlrActor.scala @@ -1,6 +1,7 @@ package org.bigbluebutton.api2.bus import org.bigbluebutton.api2.SystemConfiguration +import org.bigbluebutton.common2.bus._ import org.bigbluebutton.common2.msgs._ import com.fasterxml.jackson.databind.JsonNode import akka.actor.Actor diff --git a/bbb-common-web/src/main/scala/org/bigbluebutton/api2/endpoint/redis/RedisDataStorageActor.scala b/bbb-common-web/src/main/scala/org/bigbluebutton/api2/endpoint/redis/RedisDataStorageActor.scala index 8fb2731d42..95210390fc 100755 --- a/bbb-common-web/src/main/scala/org/bigbluebutton/api2/endpoint/redis/RedisDataStorageActor.scala +++ b/bbb-common-web/src/main/scala/org/bigbluebutton/api2/endpoint/redis/RedisDataStorageActor.scala @@ -1,16 +1,14 @@ package org.bigbluebutton.api2.endpoint.redis -import akka.actor.{Actor, ActorLogging, ActorSystem, Props} +import akka.actor.{ Actor, ActorLogging, ActorSystem, Props } import org.bigbluebutton.api2.SystemConfiguration import redis.RedisClient - case class RecordMeetingInfoMsg(meetingId: String, info: collection.immutable.Map[String, String]) case class RecordBreakoutInfoMsg(meetingId: String, info: collection.immutable.Map[String, String]) case class AddBreakoutRoomMsg(parentId: String, breakoutId: String) case class RemoveMeetingMsg(meetingId: String) - object RedisDataStorageActor { def props(system: ActorSystem): Props = Props(classOf[RedisDataStorageActor], system) } @@ -24,13 +22,12 @@ class RedisDataStorageActor(val system: ActorSystem) extends Actor with ActorLog redis.clientSetname("BbbWebStore") def receive = { - case msg: RecordMeetingInfoMsg => handleRecordMeetingInfoMsg(msg) + case msg: RecordMeetingInfoMsg => handleRecordMeetingInfoMsg(msg) case msg: RecordBreakoutInfoMsg => handleRecordBreakoutInfoMsg(msg) - case msg: AddBreakoutRoomMsg => handleAddBreakoutRoomMsg(msg) - case msg: RemoveMeetingMsg => handleRemoveMeetingMsg(msg) + case msg: AddBreakoutRoomMsg => handleAddBreakoutRoomMsg(msg) + case msg: RemoveMeetingMsg => handleRemoveMeetingMsg(msg) } - def handleRecordMeetingInfoMsg(msg: RecordMeetingInfoMsg): Unit = { redis.hmset("meeting:info:" + msg.meetingId, msg.info) } diff --git a/bbb-common-web/src/main/scala/org/bigbluebutton/api2/endpoint/redis/AppsRedisSubscriberActor.scala b/bbb-common-web/src/main/scala/org/bigbluebutton/api2/endpoint/redis/WebRedisSubscriberActor.scala similarity index 60% rename from bbb-common-web/src/main/scala/org/bigbluebutton/api2/endpoint/redis/AppsRedisSubscriberActor.scala rename to bbb-common-web/src/main/scala/org/bigbluebutton/api2/endpoint/redis/WebRedisSubscriberActor.scala index 3b566c6f2f..fff0050963 100755 --- a/bbb-common-web/src/main/scala/org/bigbluebutton/api2/endpoint/redis/AppsRedisSubscriberActor.scala +++ b/bbb-common-web/src/main/scala/org/bigbluebutton/api2/endpoint/redis/WebRedisSubscriberActor.scala @@ -1,34 +1,39 @@ package org.bigbluebutton.api2.endpoint.redis -import java.io.{PrintWriter, StringWriter} +import java.io.{ PrintWriter, StringWriter } import java.net.InetSocketAddress import akka.actor.SupervisorStrategy.Resume -import akka.actor.{OneForOneStrategy, Props} +import akka.actor.{ OneForOneStrategy, Props } import redis.api.servers.ClientSetname import redis.actors.RedisSubscriberActor -import redis.api.pubsub.{Message, PMessage} +import redis.api.pubsub.{ Message, PMessage } import scala.concurrent.duration._ -import org.bigbluebutton.api2.SystemConfiguration -import org.bigbluebutton.api2.bus._ +import org.bigbluebutton.api2._ +import org.bigbluebutton.common2.redis._ +import org.bigbluebutton.common2.redis.RedisConfiguration +import org.bigbluebutton.common2.bus._ -object AppsRedisSubscriberActor extends SystemConfiguration { +object WebRedisSubscriberActor extends RedisSubscriber with RedisConfiguration { val channels = Seq(fromAkkaAppsRedisChannel) val patterns = Seq("bigbluebutton:from-bbb-apps:*") def props(jsonMsgBus: JsonMsgFromAkkaAppsBus, oldMessageEventBus: OldMessageEventBus): Props = - Props(classOf[AppsRedisSubscriberActor], jsonMsgBus, oldMessageEventBus, + Props(classOf[WebRedisSubscriberActor], jsonMsgBus, oldMessageEventBus, redisHost, redisPort, channels, patterns).withDispatcher("akka.rediscala-subscriber-worker-dispatcher") } -class AppsRedisSubscriberActor(jsonMsgBus: JsonMsgFromAkkaAppsBus, oldMessageEventBus: OldMessageEventBus, redisHost: String, - redisPort: Int, - channels: Seq[String] = Nil, patterns: Seq[String] = Nil) - extends RedisSubscriberActor(new InetSocketAddress(redisHost, redisPort), - channels, patterns, onConnectStatus = connected => { println(s"connected: $connected") }) with SystemConfiguration { +class WebRedisSubscriberActor(jsonMsgBus: JsonMsgFromAkkaAppsBus, oldMessageEventBus: OldMessageEventBus, redisHost: String, + redisPort: Int, + channels: Seq[String] = Nil, patterns: Seq[String] = Nil) + extends RedisSubscriberActor( + new InetSocketAddress(redisHost, redisPort), + channels, patterns, onConnectStatus = connected => { println(s"connected: $connected") }) + with SystemConfiguration + with RedisAppSubscriberActor { override val supervisorStrategy = OneForOneStrategy(maxNrOfRetries = 10, withinTimeRange = 1 minute) { case e: Exception => { @@ -40,7 +45,6 @@ class AppsRedisSubscriberActor(jsonMsgBus: JsonMsgFromAkkaAppsBus, oldMessageEve } } - // Set the name of this client to be able to distinguish when doing // CLIENT LIST on redis-cli write(ClientSetname("Red5AppsSub").encodedRequest) @@ -53,9 +57,10 @@ class AppsRedisSubscriberActor(jsonMsgBus: JsonMsgFromAkkaAppsBus, oldMessageEve } } - def onPMessage(pmessage: PMessage) { + override def onPMessage(pmessage: PMessage) { log.debug(s"RECEIVED:\n ${pmessage.data.utf8String} \n") - val receivedJsonMessage = new OldReceivedJsonMessage(pmessage.patternMatched, + val receivedJsonMessage = new OldReceivedJsonMessage( + pmessage.patternMatched, pmessage.channel, pmessage.data.utf8String) oldMessageEventBus.publish(OldIncomingJsonMessage(fromAkkaAppsOldJsonChannel, receivedJsonMessage)) diff --git a/bbb-common-web/src/test/scala/org/bigbluebutton/api/util/ParamsUtilTest.scala b/bbb-common-web/src/test/scala/org/bigbluebutton/api/util/ParamsUtilTest.scala index 6cf5716b06..460701c67a 100755 --- a/bbb-common-web/src/test/scala/org/bigbluebutton/api/util/ParamsUtilTest.scala +++ b/bbb-common-web/src/test/scala/org/bigbluebutton/api/util/ParamsUtilTest.scala @@ -1,23 +1,21 @@ -package org.bigbluebutton.api.util - -import org.scalatest._ - -class ParamsUtilTest extends UnitSpec { - - it should "strip out control chars from text" in { - val text = "a\u0000b\u0007c\u008fd" - val cleaned = ParamsUtil.stripControlChars(text) - assert("abcd" == cleaned) - } - - it should "complain about invalid chars in meetingId" in { - val meetingId = "Demo , Meeting" - assert(ParamsUtil.isValidMeetingId(meetingId) == false) - } - - it should "accept valid chars in meetingId" in { - val meetingId = "Demo Meeting - 123" - assert(ParamsUtil.isValidMeetingId(meetingId) == true) - } - -} +package org.bigbluebutton.api.util + +class ParamsUtilTest extends UnitSpec { + + it should "strip out control chars from text" in { + val text = "a\u0000b\u0007c\u008fd" + val cleaned = ParamsUtil.stripControlChars(text) + assert("abcd" == cleaned) + } + + it should "complain about invalid chars in meetingId" in { + val meetingId = "Demo , Meeting" + assert(ParamsUtil.isValidMeetingId(meetingId) == false) + } + + it should "accept valid chars in meetingId" in { + val meetingId = "Demo Meeting - 123" + assert(ParamsUtil.isValidMeetingId(meetingId) == true) + } + +} diff --git a/bbb-common-web/src/test/scala/org/bigbluebutton/api/util/UnitSpec.scala b/bbb-common-web/src/test/scala/org/bigbluebutton/api/util/UnitSpec.scala index fef2d5a231..6c5694d0c0 100755 --- a/bbb-common-web/src/test/scala/org/bigbluebutton/api/util/UnitSpec.scala +++ b/bbb-common-web/src/test/scala/org/bigbluebutton/api/util/UnitSpec.scala @@ -1,8 +1,7 @@ -package org.bigbluebutton.api.util - -import org.scalatest.FlatSpec -import org.scalatest.BeforeAndAfterAll -import org.scalatest.WordSpec -import org.scalatest.Matchers - -abstract class UnitSpec extends FlatSpec with Matchers with BeforeAndAfterAll +package org.bigbluebutton.api.util + +import org.scalatest.FlatSpec +import org.scalatest.BeforeAndAfterAll +import org.scalatest.Matchers + +abstract class UnitSpec extends FlatSpec with Matchers with BeforeAndAfterAll diff --git a/bbb-fsesl-client/build.sbt b/bbb-fsesl-client/build.sbt index b3d4b559bb..426c635183 100755 --- a/bbb-fsesl-client/build.sbt +++ b/bbb-fsesl-client/build.sbt @@ -32,7 +32,7 @@ testOptions in Test += Tests.Argument(TestFrameworks.Specs2, "html", "console", testOptions in Test += Tests.Argument(TestFrameworks.ScalaTest, "-h", "target/scalatest-reports") Seq(Revolver.settings: _*) -lazy val commonMessage = (project in file(".")).settings(name := "bbb-fsesl-client", libraryDependencies ++= Dependencies.runtime).settings(compileSettings) +lazy val bbbFSESLClient = (project in file(".")).settings(name := "bbb-fsesl-client", libraryDependencies ++= Dependencies.runtime).settings(compileSettings) //----------- // Packaging @@ -52,7 +52,7 @@ crossPaths := false // This forbids including Scala related libraries into the dependency autoScalaLibrary := false -publishTo := Some(Resolver.file("file", new File(Path.userHome.absolutePath+"/.m2/repository"))) +publishTo := Some(Resolver.file("file", new File(Path.userHome.absolutePath + "/.m2/repository"))) //publishTo := { // val nexus = "https://oss.sonatype.org/" @@ -70,10 +70,10 @@ publishArtifact in Test := false // http://www.scala-sbt.org/release/docs/Artifacts.html // disable publishing the main API jar -publishArtifact in (Compile, packageDoc) := false +publishArtifact in(Compile, packageDoc) := false // disable publishing the main sources jar -publishArtifact in (Compile, packageSrc) := false +publishArtifact in(Compile, packageSrc) := false pomIncludeRepository := { _ => false } @@ -82,14 +82,14 @@ pomExtra := ( <url>git@github.com:bigbluebutton/bigbluebutton.git</url> <connection>scm:git:git@github.com:bigbluebutton/bigbluebutton.git</connection> </scm> - <developers> - <developer> - <id>ritzalam</id> - <name>Richard Alam</name> - <url>http://www.bigbluebutton.org</url> - </developer> - </developers>) - + <developers> + <developer> + <id>ritzalam</id> + <name>Richard Alam</name> + <url>http://www.bigbluebutton.org</url> + </developer> + </developers>) + licenses := Seq("Apache License, Version 2.0" -> url("http://opensource.org/licenses/Apache-2.0")) homepage := Some(url("http://www.bigbluebutton.org")) diff --git a/bbb-screenshare/app/src/main/scala/org/bigbluebutton/app/screenshare/SystemConfiguration.scala b/bbb-screenshare/app/src/main/scala/org/bigbluebutton/app/screenshare/SystemConfiguration.scala index c25b684048..0267a37230 100755 --- a/bbb-screenshare/app/src/main/scala/org/bigbluebutton/app/screenshare/SystemConfiguration.scala +++ b/bbb-screenshare/app/src/main/scala/org/bigbluebutton/app/screenshare/SystemConfiguration.scala @@ -1,16 +1,10 @@ package org.bigbluebutton.app.screenshare import scala.util.Try -import com.typesafe.config.ConfigFactory +import com.typesafe.config.ConfigFactory +import org.bigbluebutton.common2.redis.RedisConfiguration -trait SystemConfiguration { - - //val config = ConfigFactory.load("screenshare-app") - val config = ConfigFactory.load() - - lazy val redisHost = Try(config.getString("redis.host")).getOrElse("127.0.0.1") - lazy val redisPort = Try(config.getInt("redis.port")).getOrElse(6379) - lazy val redisPassword = Try(config.getString("redis.password")).getOrElse("") +trait SystemConfiguration extends RedisConfiguration { lazy val meetingManagerChannel = Try(config.getString("eventBus.meetingManagerChannel")).getOrElse("NOT FROM APP CONF") diff --git a/bbb-screenshare/app/src/main/scala/org/bigbluebutton/app/screenshare/redis/IncomingJsonMessageBus.scala b/bbb-screenshare/app/src/main/scala/org/bigbluebutton/app/screenshare/redis/IncomingJsonMessageBus.scala deleted file mode 100755 index 532b120a86..0000000000 --- a/bbb-screenshare/app/src/main/scala/org/bigbluebutton/app/screenshare/redis/IncomingJsonMessageBus.scala +++ /dev/null @@ -1,31 +0,0 @@ -package org.bigbluebutton.app.screenshare.redis - -import akka.actor.ActorRef -import akka.event.{ EventBus, LookupClassification } - -case class ReceivedJsonMessage(channel: String, data: String) -case class IncomingJsonMessage(val topic: String, val payload: ReceivedJsonMessage) - -class IncomingJsonMessageBus extends EventBus with LookupClassification { - type Event = IncomingJsonMessage - type Classifier = String - type Subscriber = ActorRef - - // is used for extracting the classifier from the incoming events - override protected def classify(event: Event): Classifier = event.topic - - // will be invoked for each event for all subscribers which registered themselves - // for the event’s classifier - override protected def publish(event: Event, subscriber: Subscriber): Unit = { - subscriber ! event.payload - } - - // must define a full order over the subscribers, expressed as expected from - // `java.lang.Comparable.compare` - override protected def compareSubscribers(a: Subscriber, b: Subscriber): Int = - a.compareTo(b) - - // determines the initial size of the index data structure - // used internally (i.e. the expected number of different classifiers) - override protected def mapSize: Int = 128 -} diff --git a/bbb-screenshare/app/src/main/scala/org/bigbluebutton/app/screenshare/redis/AppsRedisSubscriberActor.scala b/bbb-screenshare/app/src/main/scala/org/bigbluebutton/app/screenshare/redis/ScreenshareRedisSubscriberActor.scala similarity index 100% rename from bbb-screenshare/app/src/main/scala/org/bigbluebutton/app/screenshare/redis/AppsRedisSubscriberActor.scala rename to bbb-screenshare/app/src/main/scala/org/bigbluebutton/app/screenshare/redis/ScreenshareRedisSubscriberActor.scala diff --git a/bigbluebutton-apps/build.gradle b/bigbluebutton-apps/build.gradle index 85dc33cbaf..fddbba69b9 100755 --- a/bigbluebutton-apps/build.gradle +++ b/bigbluebutton-apps/build.gradle @@ -57,7 +57,6 @@ dependencies { compile 'org.easymock:easymock:3.6@jar' //redis - compile "redis.clients:jedis:2.9.0" compile 'org.apache.commons:commons-pool2:2.6.0' compile 'com.google.code.gson:gson:2.8.5' diff --git a/bigbluebutton-apps/src/main/webapp/WEB-INF/bbb-redis-pool.xml b/bigbluebutton-apps/src/main/webapp/WEB-INF/bbb-redis-pool.xml index b72ba93cd2..b0454f30d2 100755 --- a/bigbluebutton-apps/src/main/webapp/WEB-INF/bbb-redis-pool.xml +++ b/bigbluebutton-apps/src/main/webapp/WEB-INF/bbb-redis-pool.xml @@ -26,10 +26,4 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.0.xsd "> - <!-- - <bean id="redisPool" class="redis.clients.jedis.JedisPool"> - <constructor-arg index="0" value="${redis.host}"/> - <constructor-arg index="1" value="${redis.port}"/> - </bean> - --> </beans> -- GitLab