Skip to content

Commit cd0c819

Browse files
committed
event subscription support
1 parent bd23cfc commit cd0c819

12 files changed

+118
-54
lines changed

Client/Pages/Counter.razor

+5-4
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,16 @@
44

55
<h1>Counter</h1>
66

7-
<p role="status">Current count: @currentCount</p>
7+
<p role="status">Current count: @_currentCount</p>
88

99
<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>
1010

1111
@code {
12-
private int currentCount = 0;
12+
private int _currentCount;
1313

1414
private void IncrementCount()
1515
{
16-
currentCount++;
16+
_currentCount++;
1717
}
18-
}
18+
19+
}

Client/Pages/FetchData.razor

-22
This file was deleted.

Client/Pages/Test.razor

+42
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
@page "/test"
2+
@using bWasm.Shared
3+
@using FastEndpoints
4+
5+
<PageTitle>Test</PageTitle>
6+
7+
<h1>Command Send: @_cmdResult</h1>
8+
<h1>Event Receive: @_evntResult</h1>
9+
10+
@code
11+
{
12+
private string _cmdResult = "Sending command to server...";
13+
private string _evntResult = "Waiting for event result...";
14+
15+
protected override async Task OnInitializedAsync()
16+
{
17+
_cmdResult = (await new CreateOrderCommand
18+
{
19+
OrderId = 1001,
20+
CustomerName = "Holly Simms"
21+
}
22+
.RemoteExecuteAsync()).Message;
23+
24+
_ = EventResultCheckerTask();
25+
}
26+
27+
async Task EventResultCheckerTask()
28+
{
29+
while (true)
30+
{
31+
await Task.Delay(1000);
32+
33+
if (OrderCreatedEventHandler.Result is null || OrderCreatedEventHandler.Result == _evntResult)
34+
continue;
35+
36+
_evntResult = OrderCreatedEventHandler.Result;
37+
StateHasChanged();
38+
39+
return;
40+
}
41+
}
42+
}

Client/Program.cs

+14-1
Original file line numberDiff line numberDiff line change
@@ -14,5 +14,18 @@
1414
c =>
1515
{
1616
c.Register<CreateOrderCommand, CreateOrderResult>();
17+
c.Subscribe<OrderCreatedEvent, OrderCreatedEventHandler>();
1718
});
18-
await app.RunAsync();
19+
await app.RunAsync();
20+
21+
sealed class OrderCreatedEventHandler : IEventHandler<OrderCreatedEvent>
22+
{
23+
internal static string? Result { get; private set; }
24+
25+
public Task HandleAsync(OrderCreatedEvent e, CancellationToken c)
26+
{
27+
Result = $"{e.Description} Order Id: {e.OrderId}";
28+
29+
return Task.CompletedTask;
30+
}
31+
}

Client/Shared/NavMenu.razor

+4-3
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@
2020
</NavLink>
2121
</div>
2222
<div class="nav-item px-3">
23-
<NavLink class="nav-link" href="fetchdata">
24-
<span class="oi oi-list-rich" aria-hidden="true"></span> Fetch data
23+
<NavLink class="nav-link" href="test">
24+
<span class="oi oi-list-rich" aria-hidden="true"></span> Test
2525
</NavLink>
2626
</div>
2727
</nav>
@@ -36,4 +36,5 @@
3636
{
3737
collapseNavMenu = !collapseNavMenu;
3838
}
39-
}
39+
40+
}

Client/bWasm.Client.csproj

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
<ItemGroup>
1010
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="8.0.7"/>
1111
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="8.0.7" PrivateAssets="all"/>
12-
<PackageReference Include="FastEndpoints.Messaging.Remote.Core" Version="5.27.0"/>
12+
<PackageReference Include="FastEndpoints.Messaging.Remote.Core" Version="5.27.0.11-beta"/>
1313
<ProjectReference Include="..\Shared\bWasm.Contracts.csproj"/>
1414
</ItemGroup>
1515

Server/Program.cs

+21-4
Original file line numberDiff line numberDiff line change
@@ -14,17 +14,34 @@
1414
app.MapHandlers(
1515
h =>
1616
{
17-
h.Register<CreateOrderCommand, CreateOrderHandler, CreateOrderResult>();
17+
h.Register<CreateOrderCommand, CreateOrderCommandHandler, CreateOrderResult>();
18+
h.RegisterEventHub<OrderCreatedEvent>();
1819
});
1920
app.MapFallbackToFile("index.html");
2021
app.Run();
2122

22-
public sealed class CreateOrderHandler : ICommandHandler<CreateOrderCommand, CreateOrderResult>
23+
public sealed class CreateOrderCommandHandler : ICommandHandler<CreateOrderCommand, CreateOrderResult>
2324
{
24-
public Task<CreateOrderResult> ExecuteAsync(CreateOrderCommand cmd, CancellationToken _)
25-
=> Task.FromResult(
25+
public Task<CreateOrderResult> ExecuteAsync(CreateOrderCommand cmd, CancellationToken ct)
26+
{
27+
_ = Task.Run(
28+
async () =>
29+
{
30+
//broadcast an event after 3 seconds
31+
32+
await Task.Delay(3000);
33+
new OrderCreatedEvent
34+
{
35+
OrderId = cmd.OrderId,
36+
Description = "Successfully created"
37+
}.Broadcast(ct);
38+
},
39+
ct);
40+
41+
return Task.FromResult(
2642
new CreateOrderResult
2743
{
2844
Message = $"Order {cmd.OrderId} created for {cmd.CustomerName}"
2945
});
46+
}
3047
}

Server/bWasm.Server.csproj

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
<ItemGroup>
1010
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.Server" Version="8.0.7"/>
1111
<PackageReference Include="Grpc.AspNetCore.Web" Version="2.63.0"/>
12-
<PackageReference Include="FastEndpoints.Messaging.Remote" Version="5.27.0"/>
12+
<PackageReference Include="FastEndpoints.Messaging.Remote" Version="5.27.0.11-beta"/>
1313
<ProjectReference Include="..\Client\bWasm.Client.csproj"/>
1414
<ProjectReference Include="..\Shared\bWasm.Contracts.csproj"/>
1515
</ItemGroup>

Shared/CreateOrder.cs

-17
This file was deleted.

Shared/CreateOrderCommand.cs

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
#pragma warning disable CS8618
2+
3+
using FastEndpoints;
4+
5+
namespace bWasm.Shared
6+
{
7+
public class CreateOrderCommand : ICommand<CreateOrderResult>
8+
{
9+
public int OrderId { get; set; }
10+
public string CustomerName { get; set; }
11+
}
12+
13+
public class CreateOrderResult
14+
{
15+
public string Message { get; set; }
16+
}
17+
}

Shared/OrderCreatedEvent.cs

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
#pragma warning disable CS8618
2+
3+
using FastEndpoints;
4+
5+
namespace bWasm.Shared
6+
{
7+
public sealed class OrderCreatedEvent : IEvent
8+
{
9+
public int OrderId { get; set; }
10+
public string Description { get; set; }
11+
}
12+
}

Shared/bWasm.Contracts.csproj

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,6 @@
1111
</ItemGroup>
1212

1313
<ItemGroup>
14-
<PackageReference Include="FastEndpoints.Messaging.Core" Version="5.27.0"/>
14+
<PackageReference Include="FastEndpoints.Messaging.Core" Version="5.27.0.11-beta"/>
1515
</ItemGroup>
1616
</Project>

0 commit comments

Comments
 (0)