Один из способов сделать это - создать фабрику актеров, в которой будут храниться актеры, которых вы сможете получить из любой точки мира.
import scala.actors.Actor
import scala.actors.Actor._
import scala.collection.mutable._
Сообщения могут быть либо объектами (без «полезной нагрузки»), либо могут быть классами, содержащими данные
abstract class Message
case object MessageType1 extends Message
case class MessageType2(str:String) extends Message
Вот пара типов субъектов.Экземпляр Actor2 создается «на лету» и сохраняется в ActorFactory для последующего использования, так же как и экземпляр Actor1, который явно объявлен в основном
class MyActor1 extends Actor {
def act() {
loop {
react {
case MessageType1 =>
println("MessageType1 received")
ActorFactory.getActor2("B") ! MessageType2("Hello")
case _ =>
}
}
}
}
class MyActor2 extends Actor {
def act() {
loop {
react {
case MessageType2(theString) =>
println(theString+" from actor 2 instance")
case _ =>
}
}
}
}
Следующий ActorFactory создает и хранит актеры,Здесь вы можете создать несколько экземпляров типа актера и сохранить его по имени.
object ActorFactory {
val actorMap = new HashMap[String,Actor] with SynchronizedMap[String,Actor]
def getActor1(symbol:String): Actor = {
val actor = actorMap.getOrElseUpdate(symbol,new MyActor1().start)
actor
}
def getActor2(symbol:String): Actor = {
val actor = actorMap.getOrElseUpdate(symbol,new MyActor2().start)
actor
}
}
object Test {
def main(args : Array[String]) {
val actor1 = ActorFactory.getActor1("A")
actor1 ! MessageType1
}
}
Вывод этого
MessageType1 received
Hello from actor 2 instance