Skip to content

Commit e144c5d

Browse files
Added Serialization.DeserializeActorRef method (#7237)
Designed to give us a more aligned API for end-users that need to serialize and deserialize `IActorRef`s in their own user-defined messages.
1 parent 79f9bc6 commit e144c5d

File tree

4 files changed

+15
-2
lines changed

4 files changed

+15
-2
lines changed

Diff for: src/contrib/cluster/Akka.Cluster.Sharding/Serialization/ClusterShardingMessageSerializer.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -699,7 +699,7 @@ private static string ShardIdMessageFromBinary(byte[] bytes)
699699

700700
private IActorRef ResolveActorRef(string path)
701701
{
702-
return system.Provider.ResolveActorRef(path);
702+
return system.Serialization.DeserializeActorRef(path);
703703
}
704704
}
705705
}

Diff for: src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveCore.DotNet.verified.txt

+1
Original file line numberDiff line numberDiff line change
@@ -5228,6 +5228,7 @@ namespace Akka.Serialization
52285228
public void AddSerializer(string name, Akka.Serialization.Serializer serializer) { }
52295229
public object Deserialize(byte[] bytes, int serializerId, System.Type type) { }
52305230
public object Deserialize(byte[] bytes, int serializerId, string manifest) { }
5231+
public Akka.Actor.IActorRef DeserializeActorRef(string path) { }
52315232
public Akka.Serialization.Serializer FindSerializerFor(object obj, string defaultSerializerName = null) { }
52325233
public Akka.Serialization.Serializer FindSerializerForType(System.Type objectType, string defaultSerializerName = null) { }
52335234
public static Akka.Serialization.Information GetCurrentTransportInformation() { }

Diff for: src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveCore.Net.verified.txt

+1
Original file line numberDiff line numberDiff line change
@@ -5218,6 +5218,7 @@ namespace Akka.Serialization
52185218
public void AddSerializer(string name, Akka.Serialization.Serializer serializer) { }
52195219
public object Deserialize(byte[] bytes, int serializerId, System.Type type) { }
52205220
public object Deserialize(byte[] bytes, int serializerId, string manifest) { }
5221+
public Akka.Actor.IActorRef DeserializeActorRef(string path) { }
52215222
public Akka.Serialization.Serializer FindSerializerFor(object obj, string defaultSerializerName = null) { }
52225223
public Akka.Serialization.Serializer FindSerializerForType(System.Type objectType, string defaultSerializerName = null) { }
52235224
public static Akka.Serialization.Information GetCurrentTransportInformation() { }

Diff for: src/core/Akka/Serialization/Serialization.cs

+12-1
Original file line numberDiff line numberDiff line change
@@ -574,6 +574,17 @@ public Serializer FindSerializerForType(Type objectType, string defaultSerialize
574574
AddSerializationMap(type, serializer);
575575
return serializer;
576576
}
577+
578+
/// <summary>
579+
/// Deserializes an <see cref="IActorRef"/> from its string representation.
580+
/// </summary>
581+
/// <param name="path">The serialized path of the actor represented as a string.</param>
582+
/// <returns>The <see cref="IActorRef"/>. If no such actor exists, it will be (equivalent to) a dead letter reference.</returns>
583+
[MethodImpl(MethodImplOptions.AggressiveInlining)]
584+
public IActorRef DeserializeActorRef(string path)
585+
{
586+
return System.Provider.ResolveActorRef(path);
587+
}
577588

578589
/// <summary>
579590
/// The serialized path of an actorRef, based on the current transport serialization information.
@@ -589,7 +600,7 @@ public Serializer FindSerializerForType(Type objectType, string defaultSerialize
589600
public static string SerializedActorPath(IActorRef actorRef)
590601
{
591602
if (Equals(actorRef, ActorRefs.NoSender))
592-
return String.Empty;
603+
return string.Empty;
593604

594605
var path = actorRef.Path;
595606
ExtendedActorSystem originalSystem = null;

0 commit comments

Comments
 (0)