From 276f30d30f85b7efe9efbc1ef7e27f436b8acbac Mon Sep 17 00:00:00 2001 From: Viktor Klang Date: Wed, 4 May 2011 18:00:24 +0200 Subject: [PATCH] Fixing ticket #837, broken remote actor refs when serialized --- .../serialization/SerializationProtocol.scala | 28 ++++++++++++------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/akka-remote/src/main/scala/akka/serialization/SerializationProtocol.scala b/akka-remote/src/main/scala/akka/serialization/SerializationProtocol.scala index f41351f5bc..d92cff5ad7 100644 --- a/akka-remote/src/main/scala/akka/serialization/SerializationProtocol.scala +++ b/akka-remote/src/main/scala/akka/serialization/SerializationProtocol.scala @@ -260,17 +260,25 @@ object RemoteActorSerialization { /** * Serializes the ActorRef instance into a Protocol Buffers (protobuf) Message. */ - def toRemoteActorRefProtocol(ar: ActorRef): RemoteActorRefProtocol = { - import ar._ - - Actor.remote.registerByUuid(ar) - - RemoteActorRefProtocol.newBuilder - .setClassOrServiceName("uuid:"+uuid.toString) - .setActorClassname(actorClassName) - .setHomeAddress(ActorSerialization.toAddressProtocol(ar)) - .setTimeout(timeout) + def toRemoteActorRefProtocol(actor: ActorRef): RemoteActorRefProtocol = actor match { + case r: RemoteActorRef => + RemoteActorRefProtocol.newBuilder + .setClassOrServiceName(r.id) + .setActorClassname(r.actorClassName) + .setHomeAddress(ActorSerialization.toAddressProtocol(r)) + .setTimeout(r.timeout) .build + case ar: LocalActorRef => + import ar._ + + Actor.remote.registerByUuid(ar) + + RemoteActorRefProtocol.newBuilder + .setClassOrServiceName("uuid:"+uuid.toString) + .setActorClassname(actorClassName) + .setHomeAddress(ActorSerialization.toAddressProtocol(ar)) + .setTimeout(timeout) + .build } def createRemoteMessageProtocolBuilder(