Add SignalR integration for real-time weather updates

Implemented SignalR to enable real-time communication between the server and connected clients. Added a new hub (`WeatherUpdateHub`), a background service (`SignalRSendService`), and modified both the API backend and React frontend for seamless message broadcasting and handling.
This commit is contained in:
2025-02-06 22:21:53 +01:00
parent 892b2183e0
commit be2599218d
12 changed files with 202 additions and 15 deletions

View File

@@ -1,9 +1,13 @@
using Api.SignalR;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
// Learn more about configuring OpenAPI at https://aka.ms/aspnet/openapi
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddOpenApi();
builder.Services.AddSignalR();
builder.Services.AddHostedService<SignalRSendService>();
builder.Services.AddOpenApiDocument(config =>
{
config.Title = "NSwag Demo API";
@@ -12,9 +16,10 @@ builder.Services.AddCors(options =>
{
options.AddDefaultPolicy(policy =>
{
policy.AllowAnyOrigin()
policy.WithOrigins("http://localhost:3000") // Specify the allowed origin
.AllowAnyHeader()
.AllowAnyMethod();
.AllowAnyMethod()
.AllowCredentials(); // Allow credentials
});
});
@@ -36,7 +41,7 @@ var summaries = new[]
"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
};
app.MapGet("/weatherforecast", () =>
app.MapGet("/weatherforecast", async () =>
{
var forecast = Enumerable.Range(1, 5).Select(index =>
new WeatherForecast
@@ -46,10 +51,15 @@ app.MapGet("/weatherforecast", () =>
summaries[Random.Shared.Next(summaries.Length)]
))
.ToArray();
return forecast;
})
.WithName("GetWeatherForecast");
// Add SignalR hub
app.MapHub<WeatherUpdateHub>("/WeatherUpdateHub");
app.Run();
record WeatherForecast(DateOnly Date, int TemperatureC, string? Summary)