blob: 0334c085a82fc11c38c6e38d943052374a614404 [file] [log] [blame]
package org.apache.esme.actor
import akka.actor.{ActorRef, Actor, Props => AkkaProps}
import net.liftweb.util.Props
import org.apache.esme.actor.XmppReceiver.FetchMessages
import org.apache.esme.model.User
import net.liftweb.common.Logger
object XmppSupervisor {
val logger: Logger = Logger("org.apache.esme.actor")
sealed trait XmppSupervisorActions
case class Init() extends XmppSupervisorActions
case class Fetch(id: Long) extends XmppSupervisorActions
case class Start(id: Long, who: String, usr: User) extends XmppSupervisorActions
case class Stop(id: Long) extends XmppSupervisorActions
}
class XmppSupervisor extends Actor {
import XmppSupervisor._
private var xmppPullActors: Map[Long, ActorRef] = Map.empty
var xmppHost: String = _
var xmppPort: String = _
var xmppUsr: String = _
var xmppPwd: String = _
var xmppServiceName: String = _
override def preStart() {
logger.info("XmppSupervisor - preStart() called")
xmppHost = Props.get("xmpp.host") openOr ""
xmppPort = Props.get("xmpp.port") openOr ""
xmppUsr = Props.get("xmpp.user") openOr ""
xmppPwd = Props.get("xmpp.password") openOr ""
xmppServiceName = Props.get("xmpp.serviceName") openOr ""
}
def receive = {
case Init() => logger.info("XmppSupervisor - Init message received")
case Start(id, who, usr) => {
logger.info("XmppSupervisor - Start message received. User: %s, who: %s".format(usr, who))
xmppPullActors += (id -> context.actorOf(AkkaProps(new XmppReceiver(xmppHost, xmppPort.toInt, xmppUsr, xmppPwd, xmppServiceName, who, usr))))
}
case Stop(id) => {
logger.info("XmppSupervisor - Stop message received")
xmppPullActors.get(id).foreach { ref =>
context.stop(ref)
xmppPullActors -= id
}
}
case Fetch(id) => {
logger.info("XmppSupervisor - Fetch message received")
xmppPullActors.get(id).foreach(ref => ref ! FetchMessages)
}
case _ => logger.info("XmppSupervisor - Unknown message received")
}
}