summaryrefslogtreecommitdiff
path: root/src/actors
diff options
context:
space:
mode:
authorPhilipp Haller <hallerp@gmail.com>2008-08-05 15:35:19 +0000
committerPhilipp Haller <hallerp@gmail.com>2008-08-05 15:35:19 +0000
commit2daab02552adedd4bc2b3a028a845abb5fdd566a (patch)
tree7829e75c57c345cf535079e05078aee2d1b9103e /src/actors
parent3d82fd2ff551e5f6192b36e0a685e58887e07d8c (diff)
downloadscala-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/actors')
-rw-r--r--src/actors/scala/actors/AbstractActor.scala7
-rw-r--r--src/actors/scala/actors/remote/NetKernel.scala1
-rw-r--r--src/actors/scala/actors/remote/Proxy.scala36
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])
/**