using Microsoft.AspNetCore.RateLimiting; using Microsoft.AspNetCore.SignalR; using QuestShare.Server.Managers; using Microsoft.AspNetCore.Http.Features; using QuestShare.Server.Models; namespace QuestShare.Server.Hubs { public partial class ShareHub : Hub { public override Task OnConnectedAsync() { Log.Information($"Client connected: {Context.ConnectionId}"); if (BanManager.IsBanned(Context)) { Log.Warning($"Client {Context.ConnectionId} is banned."); Context.Abort(); } Clients.Caller.SendAsync(nameof(Authorize.AuthBroadcast), new Authorize.AuthBroadcast { }); return base.OnConnectedAsync(); } public override Task OnDisconnectedAsync(Exception? exception) { Log.Information($"Client {Context.ConnectionId} disconnected."); if (exception != null) { Log.Error(exception, "Exception occurred on disconnect."); } if (Context.Items["Token"] != null) { using var db = new QuestShareContext(); var client = db.Clients.FirstOrDefault(c => c.Token == Context.Items["Token"]!.ToString()); if (client != null) db.Clients.Remove(client); } return base.OnDisconnectedAsync(exception); } } }