diff options
author | Philipp Haller <hallerp@gmail.com> | 2008-08-05 15:35:19 +0000 |
---|---|---|
committer | Philipp Haller <hallerp@gmail.com> | 2008-08-05 15:35:19 +0000 |
commit | 2daab02552adedd4bc2b3a028a845abb5fdd566a (patch) | |
tree | 7829e75c57c345cf535079e05078aee2d1b9103e /src | |
parent | 3d82fd2ff551e5f6192b36e0a685e58887e07d8c (diff) | |
download | scala-2daab02552adedd4bc2b3a028a845abb5fdd566a.tar.gz scala-2daab02552adedd4bc2b3a028a845abb5fdd566a.tar.bz2 scala-2daab02552adedd4bc2b3a028a845abb5fdd566a.zip |
Made serialization of functions used in the rem...
Made serialization of functions used in the remote actors runtime more
robust by creating explicit classes.
Diffstat (limited to 'src')
-rw-r--r-- | src/actors/scala/actors/AbstractActor.scala | 7 | ||||
-rw-r--r-- | src/actors/scala/actors/remote/NetKernel.scala | 1 | ||||
-rw-r--r-- | src/actors/scala/actors/remote/Proxy.scala | 36 |
3 files changed, 36 insertions, 8 deletions
diff --git a/src/actors/scala/actors/AbstractActor.scala b/src/actors/scala/actors/AbstractActor.scala index 5bd29021c0..9157ca3451 100644 --- a/src/actors/scala/actors/AbstractActor.scala +++ b/src/actors/scala/actors/AbstractActor.scala @@ -11,7 +11,7 @@ package scala.actors /** - * The <code>AbstractActor</code> trait... + * The <code>AbstractActor</code> trait. * * @version 0.9.18 * @author Philipp Haller @@ -21,12 +21,17 @@ trait AbstractActor extends OutputChannel[Any] { private[actors] var exiting = false private[actors] def linkTo(to: AbstractActor): Unit + private[actors] def unlinkFrom(from: AbstractActor): Unit private[actors] def exit(from: AbstractActor, reason: AnyRef): Unit def !?(msg: Any): Any + def !?(msec: Long, msg: Any): Option[Any] + def !!(msg: Any): Future[Any] + def !![A](msg: Any, f: PartialFunction[Any, A]): Future[A] + } diff --git a/src/actors/scala/actors/remote/NetKernel.scala b/src/actors/scala/actors/remote/NetKernel.scala index 834de3026f..141ea5bbff 100644 --- a/src/actors/scala/actors/remote/NetKernel.scala +++ b/src/actors/scala/actors/remote/NetKernel.scala @@ -11,7 +11,6 @@ package scala.actors.remote import scala.collection.mutable.{HashMap, HashSet} -import scala.actors.Actor.loop case class NamedSend(senderLoc: Locator, receiverLoc: Locator, data: Array[Byte], session: Symbol) diff --git a/src/actors/scala/actors/remote/Proxy.scala b/src/actors/scala/actors/remote/Proxy.scala index 5f3bbda723..f45d1d390b 100644 --- a/src/actors/scala/actors/remote/Proxy.scala +++ b/src/actors/scala/actors/remote/Proxy.scala @@ -71,21 +71,45 @@ class Proxy(node: Node, name: Symbol, @transient var kernel: NetKernel) extends del !! (msg, f) def linkTo(to: AbstractActor): Unit = - del ! Apply0((target: AbstractActor, creator: Proxy) => - target.linkTo(creator)) + del ! Apply0(new LinkToFun) def unlinkFrom(from: AbstractActor): Unit = - del ! Apply0((target: AbstractActor, creator: Proxy) => - target.unlinkFrom(creator)) + del ! Apply0(new UnlinkFromFun) def exit(from: AbstractActor, reason: AnyRef): Unit = - del ! Apply0((target: AbstractActor, creator: Proxy) => - target.exit(creator, reason)) + del ! Apply0(new ExitFun(reason)) override def toString() = name+"@"+node } +@serializable +class LinkToFun extends Function2[AbstractActor, Proxy, Unit] { + def apply(target: AbstractActor, creator: Proxy) { + target.linkTo(creator) + } + override def toString = + "<LinkToFun>" +} + +@serializable +class UnlinkFromFun extends Function2[AbstractActor, Proxy, Unit] { + def apply(target: AbstractActor, creator: Proxy) { + target.unlinkFrom(creator) + } + override def toString = + "<UnlinkFromFun>" +} + +@serializable +class ExitFun(reason: AnyRef) extends Function2[AbstractActor, Proxy, Unit] { + def apply(target: AbstractActor, creator: Proxy) { + target.exit(creator, reason) + } + override def toString = + "<ExitFun>("+reason.toString+")" +} + case class Apply0(rfun: Function2[AbstractActor, Proxy, Unit]) /** |