using Microsoft.AspNetCore.SignalR; using QuestShare.Server.Managers; namespace QuestShare.Server.Hubs { public partial class ShareHub : Hub { [HubMethodName(nameof(Cancel))] public async Task Server_Cancel(Cancel.Request request) { if (BanManager.IsBanned(Context)) { Context.Abort(); return; } var client = ClientManager.GetClient(Context.ConnectionId); if (client == null) { await Clients.Caller.SendAsync(nameof(Cancel), new Cancel.Response { Success = false, Error = Error.Unauthorized, }); return; } var error = Error.None; if (request.Token == "") error = Error.InvalidToken; else if (request.Version != Common.Constants.Version) error = Error.InvalidVersion; var share = ShareManager.GetShare(client); if (share == null) error = Error.Unauthorized; if (error != Error.None) { await Clients.Caller.SendAsync(nameof(Cancel), new Cancel.Response { Success = false, Error = error, }); return; } ShareManager.RemoveShare(share!.ShareCode); await Groups.RemoveFromGroupAsync(Context.ConnectionId, share.ShareCode); // remove all members from the group var members = await ShareManager.GetShareMembers(share); if (members != null && members.Count > 0) { // broadcast to party await Clients.GroupExcept(share.ShareCode, Context.ConnectionId).SendAsync(nameof(Cancel), new Cancel.CancelBroadcast { ShareCode = share.ShareCode, }); foreach (var member in members) { await Groups.RemoveFromGroupAsync(member.ConnectionId, share.ShareCode); await ShareManager.RemoveGroupMember(share, member); } } await Clients.Caller.SendAsync(nameof(Cancel), new Cancel.Response { Success = true, }); } } }