Skip to content

Instantly share code, notes, and snippets.

@imxiaobo
Created March 7, 2012 04:53
Show Gist options
  • Save imxiaobo/1990998 to your computer and use it in GitHub Desktop.
Save imxiaobo/1990998 to your computer and use it in GitHub Desktop.
simple example for scala remote actor with supervision
import scala.actors.Actor._
import scala.actors.remote.RemoteActor._
import scala.concurrent.ops._
import scala.actors.{ Actor, Exit }
object Server extends App {
def f(msg:Any):String = {
println("I received: " + msg)
"Thanks: " + msg
}
class Dispatcher(worker:Actor) extends Actor {
def act() {
alive(10000)
register('ragtime, self)
println("Server started...")
loop {
react {
case msg => worker.forward(msg)
}
}
}
}
class Worker(keepAlive:Actor) extends Actor {
def act() {
link(keepAlive)
loop {
react {
case 'kill => {
exit()
}
case msg => reply(f(msg))
}
}
}
}
class KeepAlive extends Actor {
def act() {
trapExit = true
loop {
react {
case Exit(from, reason) => {
Console.println(reason)
from match {
case f: Worker => {
f.restart()
}
}
}
}
}
}
}
val keepAlive = new KeepAlive()
keepAlive.start()
val worker = new Worker(keepAlive)
worker.start()
val dispatcher = new Dispatcher(worker)
dispatcher.start()
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment