From 64342a3d920ea055739f94d1f10119bcfeabd12e Mon Sep 17 00:00:00 2001 From: Philipp Haller Date: Tue, 21 Jul 2009 12:21:56 +0000 Subject: Enabled future-type message sends for reactors. --- src/actors/scala/actors/Channel.scala | 13 ++++++++----- src/actors/scala/actors/OutputChannel.scala | 4 ++-- src/actors/scala/actors/ReplyableReactor.scala | 4 ++-- 3 files changed, 12 insertions(+), 9 deletions(-) (limited to 'src/actors') diff --git a/src/actors/scala/actors/Channel.scala b/src/actors/scala/actors/Channel.scala index 93525dddbd..b8c0420372 100644 --- a/src/actors/scala/actors/Channel.scala +++ b/src/actors/scala/actors/Channel.scala @@ -38,9 +38,9 @@ case class ! [a](ch: Channel[a], msg: a) * @version 0.9.17 * @author Philipp Haller */ -class Channel[Msg](val receiver: Actor) extends InputChannel[Msg] with OutputChannel[Msg] { +class Channel[Msg](val receiver: Reactor) extends InputChannel[Msg] with OutputChannel[Msg] { - def this() = this(Actor.self) + def this() = this(Actor.rawSelf) /** * Sends a message to this Channel. @@ -78,7 +78,8 @@ class Channel[Msg](val receiver: Actor) extends InputChannel[Msg] with OutputCha */ def receive[R](f: PartialFunction[Msg, R]): R = { val C = this.asInstanceOf[Channel[Any]] - receiver.receive { + val recvActor = receiver.asInstanceOf[Actor] + recvActor.receive { case C ! msg if (f.isDefinedAt(msg.asInstanceOf[Msg])) => f(msg.asInstanceOf[Msg]) } } @@ -100,7 +101,8 @@ class Channel[Msg](val receiver: Actor) extends InputChannel[Msg] with OutputCha */ def receiveWithin[R](msec: Long)(f: PartialFunction[Any, R]): R = { val C = this.asInstanceOf[Channel[Any]] - receiver.receiveWithin(msec) { + val recvActor = receiver.asInstanceOf[Actor] + recvActor.receiveWithin(msec) { case C ! msg if (f.isDefinedAt(msg)) => f(msg) case TIMEOUT => f(TIMEOUT) } @@ -133,7 +135,8 @@ class Channel[Msg](val receiver: Actor) extends InputChannel[Msg] with OutputCha */ def reactWithin(msec: Long)(f: PartialFunction[Any, Unit]): Nothing = { val C = this.asInstanceOf[Channel[Any]] - receiver.reactWithin(msec) { + val recvActor = receiver.asInstanceOf[Actor] + recvActor.reactWithin(msec) { case C ! msg if (f.isDefinedAt(msg)) => f(msg) case TIMEOUT => f(TIMEOUT) } diff --git a/src/actors/scala/actors/OutputChannel.scala b/src/actors/scala/actors/OutputChannel.scala index 92c42282d9..261ef56359 100644 --- a/src/actors/scala/actors/OutputChannel.scala +++ b/src/actors/scala/actors/OutputChannel.scala @@ -42,8 +42,8 @@ trait OutputChannel[-Msg] { def forward(msg: Msg): Unit /** - * Returns the Actor that is + * Returns the Reactor that is * receiving from this OutputChannel. */ - def receiver: Actor + def receiver: Reactor } diff --git a/src/actors/scala/actors/ReplyableReactor.scala b/src/actors/scala/actors/ReplyableReactor.scala index 221b424c2c..1f7c774f4a 100644 --- a/src/actors/scala/actors/ReplyableReactor.scala +++ b/src/actors/scala/actors/ReplyableReactor.scala @@ -58,7 +58,7 @@ trait ReplyableReactor extends Replyable[Any, Any] { * returns a future representing the reply value. */ def !!(msg: Any): Future[Any] = { - val ftch = new Channel[Any](Actor.self(thiz.scheduler)) + val ftch = new Channel[Any](Actor.rawSelf(thiz.scheduler)) thiz.send(msg, ftch) Futures.fromInputChannel(ftch) } @@ -71,7 +71,7 @@ trait ReplyableReactor extends Replyable[Any, Any] { * precise type for the reply value. */ def !![A](msg: Any, f: PartialFunction[Any, A]): Future[A] = { - val ftch = new Channel[A](Actor.self(thiz.scheduler)) + val ftch = new Channel[A](Actor.rawSelf(thiz.scheduler)) thiz.send(msg, new OutputChannel[Any] { def !(msg: Any) = ftch ! f(msg) -- cgit v1.2.3