Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 14 additions & 1 deletion src/Wolverine/Runtime/Routing/MessageRoute.cs
Original file line number Diff line number Diff line change
Expand Up @@ -27,14 +27,25 @@ public MessageRoute(Type messageType, Endpoint endpoint, IReplyTracker replies)
IsLocal = endpoint is LocalQueue;
_replyTracker = replies;

Sender = endpoint.Agent ?? throw new ArgumentOutOfRangeException(nameof(endpoint), $"Endpoint {endpoint.Uri} does not have an active sending agent. Message type: {messageType.FullNameInCode()}");
if (WolverineSystemPart.WithinDescription)
{
Sender = endpoint.Agent;
}
else
{
Sender = endpoint.Agent ?? throw new ArgumentOutOfRangeException(nameof(endpoint), $"Endpoint {endpoint.Uri} does not have an active sending agent. Message type: {messageType.FullNameInCode()}");
}

IsLocal = endpoint is LocalQueue;

if (messageType.CanBeCastTo(typeof(ISerializable)))
{
Serializer = typeof(IntrinsicSerializer<>).CloseAndBuildAs<IMessageSerializer>(messageType);
}
else if (WolverineSystemPart.WithinDescription)
{
Serializer = endpoint.DefaultSerializer;
}
else
{
Serializer = endpoint.DefaultSerializer ?? throw new ArgumentOutOfRangeException(nameof(endpoint), "No DefaultSerializer on endpoint " + endpoint.Uri + ", Message type: " + messageType.FullNameInCode());
Expand All @@ -48,6 +59,8 @@ public MessageRoute(Type messageType, Endpoint endpoint, IReplyTracker replies)
_endpoint = endpoint;
}

public Uri Uri => _endpoint.Uri;

public Type MessageType { get; }

public bool IsLocal { get; }
Expand Down
4 changes: 3 additions & 1 deletion src/Wolverine/Runtime/Routing/MessageRouter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,10 @@ public MessageRouter(WolverineRuntime runtime, IEnumerable<IMessageRoute> routes
Routes = routes.ToArray();

// ReSharper disable once VirtualMemberCallInConstructor
foreach (var route in Routes.OfType<MessageRoute>().Where(x => x.Sender.Endpoint is LocalQueue))
foreach (var route in Routes.OfType<MessageRoute>().Where(x => x.Sender?.Endpoint is LocalQueue))
{
route.Rules.Fill(HandlerRules);
}
}

public override IMessageRoute[] Routes { get; }
Expand Down
7 changes: 5 additions & 2 deletions src/Wolverine/WolverineSystemPart.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ namespace Wolverine;

internal class WolverineSystemPart : SystemPartBase
{
public static bool WithinDescription = false;

private readonly WolverineRuntime _runtime;

public WolverineSystemPart(IWolverineRuntime runtime) : base("Wolverine", new Uri("wolverine://" + runtime.Options.ServiceName))
Expand All @@ -23,6 +25,7 @@ internal class WolverineSystemPart : SystemPartBase

public override async Task WriteToConsole()
{
WithinDescription = true;
await _runtime.StartLightweightAsync();

_runtime.Options.WriteToConsole();
Expand Down Expand Up @@ -56,8 +59,8 @@ public void WriteMessageSubscriptions()
var routes = _runtime.RoutingFor(messageType).Routes;
foreach (var route in routes.OfType<MessageRoute>())
{
table.AddRow(messageType.FullNameInCode(), route.Sender.Destination.ToString(),
route.Serializer.ContentType);
table.AddRow(messageType.FullNameInCode(), route.Uri.ToString(),
route.Serializer?.ContentType ?? "application/json");
}
}

Expand Down
Loading