Skip to content

Commit

Permalink
Added Serialization.DeserializeActorRef method (#7237)
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
Aaronontheweb committed Jun 7, 2024
1 parent 79f9bc6 commit e144c5d
Show file tree
Hide file tree
Showing 4 changed files with 15 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -699,7 +699,7 @@ private static string ShardIdMessageFromBinary(byte[] bytes)

private IActorRef ResolveActorRef(string path)
{
return system.Provider.ResolveActorRef(path);
return system.Serialization.DeserializeActorRef(path);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5228,6 +5228,7 @@ namespace Akka.Serialization
public void AddSerializer(string name, Akka.Serialization.Serializer serializer) { }
public object Deserialize(byte[] bytes, int serializerId, System.Type type) { }
public object Deserialize(byte[] bytes, int serializerId, string manifest) { }
public Akka.Actor.IActorRef DeserializeActorRef(string path) { }
public Akka.Serialization.Serializer FindSerializerFor(object obj, string defaultSerializerName = null) { }
public Akka.Serialization.Serializer FindSerializerForType(System.Type objectType, string defaultSerializerName = null) { }
public static Akka.Serialization.Information GetCurrentTransportInformation() { }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5218,6 +5218,7 @@ namespace Akka.Serialization
public void AddSerializer(string name, Akka.Serialization.Serializer serializer) { }
public object Deserialize(byte[] bytes, int serializerId, System.Type type) { }
public object Deserialize(byte[] bytes, int serializerId, string manifest) { }
public Akka.Actor.IActorRef DeserializeActorRef(string path) { }
public Akka.Serialization.Serializer FindSerializerFor(object obj, string defaultSerializerName = null) { }
public Akka.Serialization.Serializer FindSerializerForType(System.Type objectType, string defaultSerializerName = null) { }
public static Akka.Serialization.Information GetCurrentTransportInformation() { }
Expand Down
13 changes: 12 additions & 1 deletion src/core/Akka/Serialization/Serialization.cs
Original file line number Diff line number Diff line change
Expand Up @@ -574,6 +574,17 @@ public Serializer FindSerializerForType(Type objectType, string defaultSerialize
AddSerializationMap(type, serializer);
return serializer;
}

/// <summary>
/// Deserializes an <see cref="IActorRef"/> from its string representation.
/// </summary>
/// <param name="path">The serialized path of the actor represented as a string.</param>
/// <returns>The <see cref="IActorRef"/>. If no such actor exists, it will be (equivalent to) a dead letter reference.</returns>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public IActorRef DeserializeActorRef(string path)
{
return System.Provider.ResolveActorRef(path);
}

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

var path = actorRef.Path;
ExtendedActorSystem originalSystem = null;
Expand Down

0 comments on commit e144c5d

Please sign in to comment.