Code Examples for scala actor link

 

package test.scala.lang.actor

import scala.actors.Actor
import scala.actors.Exit

object TestActorLink {

  def main(args: Array[String]): Unit = {
    //testReact
    testLink
  }
  
  def testLink = {
    val master = new MActor
    master.start()
    
    val slave = new SActor(master)
    slave.start()
    
    Thread.sleep(3000)
    master ! "test"
    master ! 4
    master ! "test"
    
    slave ! "test"
    slave ! 4
    slave ! "test"
  }

  def testReact = {
    val t = new TActor
    t.start()

    Thread.sleep(3000)
    t ! 4
    t ! "test"
  }

}

class MActor extends Actor {
  def act() {
    println("master actor start...")
    loop {
      react({
        case x: String => {
          println("MActor: " + x)
          println("MActor: goodbye guys")
          exit("game over, haha!") //非Normal原因终止
          //exit //Normal原因终止
        }
        case o => println(o)
      })
    }
  }
}

/**
 * Terminates execution of self with the following effect on linked actors:
 * For each linked actor a with trapExit set to true, send message Exit(self, reason) to a.
 * For each linked actor a with trapExit set to false (default), call a.exit(reason) if reason != 'normal.
 */
class SActor(master: Actor) extends Actor {
  def act(){
    println("slave actor start...")
    trapExit = true
    link(master)//当前Actor链接到的Actor如果以非Normal原因终止,则该Actor也终止。
    loop {
      react({
        case Exit(master, reason) => {
        	println(s"---[$master] game over by [$reason]---")
          println(s"SActor say: why are you so diao, [$master] ?")
          exit
        }
        case x => {
          println("SActor say: " + x)
        }
      })
    }
  }
}


class TActor extends Actor {
  def act() {
    println("act start...")
    while (true) {
      react({
        case x: String => println(x)
      })
    }
  }
}

 

http://booksites.artima.com/actors_in_scala/examples/html/ch06.html#sec2

 

posted on 2015-09-25 20:37  develooop  阅读(201)  评论(0编辑  收藏  举报

导航

AmazingCounters.com