All Downloads are FREE. Search and download functionalities are using the official Maven repository.

akka.messenger.actors.MessengerActor.scala Maven / Gradle / Ivy

The newest version!
package akka.messenger.actors

import akka.actor.{Actor, Props}
import akka.cluster.pubsub.DistributedPubSubMediator.{Publish, Send}
import akka.cluster.pubsub.{DistributedPubSub, DistributedPubSubMediator}
import akka.messenger.messages._

object MessengerActor {
  def props: Props = Props[MessengerActor]
}

private final class MessengerActor extends Actor {

  private val mediator = DistributedPubSub(context.system).mediator
  mediator ! DistributedPubSubMediator.Put(self)

  override def receive: Receive = {
    case askQuery: AskQuery =>
      mediator ! Send(path = s"/user/${askQuery.toServiceName}", msg = askQuery, localAffinity = false)
    case answerQuery: AnswerQuery =>
      answerQuery.toNodeRef.foreach(_ ! answerQuery)
    case tellCommand: TellCommand =>
      mediator ! Send(path = s"/user/${tellCommand.toServiceName}", msg = tellCommand, localAffinity = false)
    case answerCommand: AnswerCommand =>
      answerCommand.toNodeRef.foreach(_ ! answerCommand)
    case notifyEvent: NotifyEvent =>
      mediator ! Publish(topic = notifyEvent.fromServiceName, msg = notifyEvent, sendOneMessageToEachGroup = false)
      mediator ! Publish(topic = notifyEvent.fromServiceName, msg = notifyEvent, sendOneMessageToEachGroup = true)
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy