Advertisement
catshow

akka Supervisor example using factory

Jun 23rd, 2011
303
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scala 2.98 KB | None | 0 0
  1. package com.dynafocus.apns.stats
  2.  
  3. import akka.actor._
  4. import akka.config._
  5. import akka.event._
  6. import akka.routing.CyclicIterator
  7.  
  8. case class Register(actor:ActorRef)
  9.  
  10. class Worker(val ip:String) extends Actor {
  11.     self.id = ip
  12.  
  13.     override def preStart(): Unit = {
  14.         EventHandler.info(this, "preStart of worker " + self.id)
  15.         self.supervisor.get ! Register(self)
  16.     }
  17.  
  18.     override def postStop() = {
  19.         EventHandler.info(this, "postStop of worker " + self.id)       
  20.     }
  21.  
  22.     override def preRestart(err:Throwable) = {
  23.         EventHandler.info(this, "preRestart of worker " + self.id)
  24.     }
  25.    
  26.     override def postRestart(err:Throwable) = {
  27.         EventHandler.info(this, "postRestart of worker " + self.id)
  28.     }
  29.    
  30.     protected def receive = {
  31.         case s: Symbol => sys.error("AAIIIE! " + s + " from worker " + self.id)
  32.         case p => EventHandler.info(this, p + " from " + self.id)
  33.     }
  34. }
  35.  
  36. class Worker2(val ip:String) extends Actor {
  37.     self.id = ip
  38.  
  39.     override def preStart(): Unit = {
  40.         EventHandler.info(this, "preStart of worker2 " + self.id)
  41.         self.supervisor.get ! Register(self)
  42.     }
  43.  
  44.     override def postStop() = {
  45.         EventHandler.info(this, "postStop of worker2 " + self.id)      
  46.     }
  47.  
  48.     override def preRestart(err:Throwable) = {
  49.         EventHandler.info(this, "preRestart of worker2 " + self.id)
  50.     }
  51.    
  52.     override def postRestart(err:Throwable) = {
  53.         EventHandler.info(this, "postRestart of worker2 " + self.id)
  54.     }
  55.    
  56.     protected def receive = {
  57.         case s: Symbol => sys.error("AAIIIE! " + s + " from worker2 " + self.id)
  58.         case p => EventHandler.info(this, p + " from " + self.id)
  59.     }
  60. }
  61.  
  62. class Supervisor(val ip:String) extends Actor {
  63.     import Supervision._
  64.  
  65.     self.id = ip
  66.     self.faultHandler = OneForOneStrategy(List(classOf[Exception]), 5, 1000)
  67.    
  68.     var list = List[ActorRef]()
  69.     var cycl = new CyclicIterator(list)
  70.  
  71.     override def preStart(): Unit = {
  72.         EventHandler.info(this, "preStart of supervisor " + self.id)       
  73.         self.startLink(Actor.actorOf(new Worker(ip)))
  74.         self.startLink(Actor.actorOf(new Worker2(ip)))
  75.     }
  76.  
  77.     override def postStop() = {
  78.         EventHandler.info(this, "postStop of supervisor " + self.id)       
  79.     }
  80.  
  81.     override def preRestart(err:Throwable) = {
  82.         EventHandler.info(this, "preRestart of supervisor " + self.id)
  83.     }
  84.    
  85.     override def postRestart(err:Throwable) = {
  86.         EventHandler.info(this, "postRestart of supervisor " + self.id)
  87.     }
  88.  
  89.     protected def receive = {
  90. //      case s: Symbol => sys.error("AAIIIE! " + s + " from supervisor " + self.id)
  91.         case Register(actor) => {
  92.             EventHandler.info(this, "just registered something")
  93.             list = if (list.size == 0) List(actor) else if (list.contains(actor)) list else actor::list
  94.             cycl = new CyclicIterator(list)
  95.         }
  96.        
  97.         case msg => cycl.next.forward(msg)
  98.     }
  99. }
  100.  
  101. object Test {
  102.    
  103.     def test() = {
  104.         import Actor._
  105.         val s = actorOf(new Supervisor("0.0.0.1")).start       
  106. //      val w = actorOf(new Worker("0.0.0.1")).start
  107. //      s link w
  108. //      w link s
  109.         s ! "Hello"
  110.         s ! 'foo
  111.         s ! 'foo2
  112.        
  113.         for (i<-0 to 10){
  114.             s!i
  115.         }
  116.         s ! 3.4
  117. //      s ! 'foo
  118.     }
  119. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement