Created
March 7, 2012 04:53
-
-
Save imxiaobo/1990998 to your computer and use it in GitHub Desktop.
simple example for scala remote actor with supervision
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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