Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.dynafocus.apns.stats
- import akka.actor._
- import akka.config._
- import akka.event._
- import akka.routing.CyclicIterator
- case class Register(actor:ActorRef)
- class Worker(val ip:String) extends Actor {
- self.id = ip
- override def preStart(): Unit = {
- EventHandler.info(this, "preStart of worker " + self.id)
- self.supervisor.get ! Register(self)
- }
- override def postStop() = {
- EventHandler.info(this, "postStop of worker " + self.id)
- }
- override def preRestart(err:Throwable) = {
- EventHandler.info(this, "preRestart of worker " + self.id)
- }
- override def postRestart(err:Throwable) = {
- EventHandler.info(this, "postRestart of worker " + self.id)
- }
- protected def receive = {
- case s: Symbol => sys.error("AAIIIE! " + s + " from worker " + self.id)
- case p => EventHandler.info(this, p + " from " + self.id)
- }
- }
- class Worker2(val ip:String) extends Actor {
- self.id = ip
- override def preStart(): Unit = {
- EventHandler.info(this, "preStart of worker2 " + self.id)
- self.supervisor.get ! Register(self)
- }
- override def postStop() = {
- EventHandler.info(this, "postStop of worker2 " + self.id)
- }
- override def preRestart(err:Throwable) = {
- EventHandler.info(this, "preRestart of worker2 " + self.id)
- }
- override def postRestart(err:Throwable) = {
- EventHandler.info(this, "postRestart of worker2 " + self.id)
- }
- protected def receive = {
- case s: Symbol => sys.error("AAIIIE! " + s + " from worker2 " + self.id)
- case p => EventHandler.info(this, p + " from " + self.id)
- }
- }
- class Supervisor(val ip:String) extends Actor {
- import Supervision._
- self.id = ip
- self.faultHandler = OneForOneStrategy(List(classOf[Exception]), 5, 1000)
- var list = List[ActorRef]()
- var cycl = new CyclicIterator(list)
- override def preStart(): Unit = {
- EventHandler.info(this, "preStart of supervisor " + self.id)
- self.startLink(Actor.actorOf(new Worker(ip)))
- self.startLink(Actor.actorOf(new Worker2(ip)))
- }
- override def postStop() = {
- EventHandler.info(this, "postStop of supervisor " + self.id)
- }
- override def preRestart(err:Throwable) = {
- EventHandler.info(this, "preRestart of supervisor " + self.id)
- }
- override def postRestart(err:Throwable) = {
- EventHandler.info(this, "postRestart of supervisor " + self.id)
- }
- protected def receive = {
- // case s: Symbol => sys.error("AAIIIE! " + s + " from supervisor " + self.id)
- case Register(actor) => {
- EventHandler.info(this, "just registered something")
- list = if (list.size == 0) List(actor) else if (list.contains(actor)) list else actor::list
- cycl = new CyclicIterator(list)
- }
- case msg => cycl.next.forward(msg)
- }
- }
- object Test {
- def test() = {
- import Actor._
- val s = actorOf(new Supervisor("0.0.0.1")).start
- // val w = actorOf(new Worker("0.0.0.1")).start
- // s link w
- // w link s
- s ! "Hello"
- s ! 'foo
- s ! 'foo2
- for (i<-0 to 10){
- s!i
- }
- s ! 3.4
- // s ! 'foo
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement