Hola, soy nuevo en Scala y no he podido averiguar cómo se puede almacenar una referencia de actor en un segundo actor, para enviar un mensaje en otro momento. En mi código intento enviar un mensaje de prueba a un actor. cuando recibe este mensaje, debe almacenar la referencia (OutputChannel) al segundo actor y en un momento posterior debe poder enviar un mensaje al segundo actor. No quería usar la respuesta() ya que necesito que el mensaje se envíe solo cuando invoco la respuesta. Aquí está el código. ¡Gracias por cualquier ayuda!¿cómo puedo almacenar una referencia de scala actor?
import scala.actors.Actor
import scala.actors.Actor._
import scala.collection.mutable.ArrayBuffer
import scala.actors.OutputChannel
object testactors {
case object TestMessage
case object Respond
class TestActor(name: String) extends Actor {
private var source : ArrayBuffer[OutputChannel[Any]] = new ArrayBuffer
def act() {
loop {
react{
case TestMessage =>
println("i received a TestMessage " + name)
source += sender
case Respond =>
println("i received a ResponseMessage " + name)
}
}
}
def sendMessage(dest: Actor) = dest ! TestMessage
def respond = {
println("responding... " + name)
source(0) ! Respond
}
}
def main(args: Array[String]) {
val actor1 = new TestActor("one")
actor1.start
val actor2 = new TestActor("two")
actor2.start
actor1.sendMessage(actor2)
Thread.sleep(5000)
actor2.respond
}
}
esto encaja perfectamente con el problema que tuve. muchas gracias Vasil! – spydadome
@spydadome, eres bienvenido :) –