rework some calls async
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Security.Claims;
|
using System.Security.Claims;
|
||||||
using System.Security.Cryptography;
|
using System.Security.Cryptography;
|
||||||
|
using System.Threading.Tasks;
|
||||||
using MareSynchronosServer.Data;
|
using MareSynchronosServer.Data;
|
||||||
using Microsoft.AspNetCore.SignalR;
|
using Microsoft.AspNetCore.SignalR;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
@@ -21,24 +22,9 @@ namespace MareSynchronosServer.Hubs
|
|||||||
|
|
||||||
protected string AuthenticatedUserId => Context.User?.Claims?.SingleOrDefault(c => c.Type == ClaimTypes.NameIdentifier)?.Value ?? "Unknown";
|
protected string AuthenticatedUserId => Context.User?.Claims?.SingleOrDefault(c => c.Type == ClaimTypes.NameIdentifier)?.Value ?? "Unknown";
|
||||||
|
|
||||||
protected Models.User GetAuthenticatedUserUntracked()
|
protected async Task<Models.User> GetAuthenticatedUserUntrackedAsync()
|
||||||
{
|
{
|
||||||
return DbContext.Users.AsNoTrackingWithIdentityResolution().Single(u => u.UID == AuthenticatedUserId);
|
return await DbContext.Users.AsNoTrackingWithIdentityResolution().SingleAsync(u => u.UID == AuthenticatedUserId);
|
||||||
}
|
|
||||||
|
|
||||||
protected Models.User? GetUserFromCID(string cid)
|
|
||||||
{
|
|
||||||
return DbContext.Users.SingleOrDefault(c => c.CharacterIdentification == cid);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected Models.User? GetUserFromUID(string uid)
|
|
||||||
{
|
|
||||||
return DbContext.Users.SingleOrDefault(c => c.UID == uid);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected bool IsUserOnline(string uid)
|
|
||||||
{
|
|
||||||
return DbContext.Users.Any(c => c.UID == uid && !string.IsNullOrEmpty(c.CharacterIdentification));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static string GenerateRandomString(int length, string allowableChars = null)
|
public static string GenerateRandomString(int length, string allowableChars = null)
|
||||||
|
|||||||
@@ -55,7 +55,7 @@ namespace MareSynchronosServer.Hubs
|
|||||||
{
|
{
|
||||||
Logger.LogInformation("User " + AuthenticatedUserId + " requested online characters");
|
Logger.LogInformation("User " + AuthenticatedUserId + " requested online characters");
|
||||||
|
|
||||||
var ownUser = GetAuthenticatedUserUntracked();
|
var ownUser = await GetAuthenticatedUserUntrackedAsync();
|
||||||
|
|
||||||
var otherUsers = await DbContext.ClientPairs.AsNoTracking()
|
var otherUsers = await DbContext.ClientPairs.AsNoTracking()
|
||||||
.Include(u => u.User)
|
.Include(u => u.User)
|
||||||
@@ -102,23 +102,23 @@ namespace MareSynchronosServer.Hubs
|
|||||||
|
|
||||||
public override async Task OnDisconnectedAsync(Exception exception)
|
public override async Task OnDisconnectedAsync(Exception exception)
|
||||||
{
|
{
|
||||||
var user = DbContext.Users.AsNoTracking().SingleOrDefault(u => u.UID == AuthenticatedUserId);
|
var user = await DbContext.Users.AsNoTracking().SingleOrDefaultAsync(u => u.UID == AuthenticatedUserId);
|
||||||
if (user != null && !string.IsNullOrEmpty(user.CharacterIdentification))
|
if (user != null && !string.IsNullOrEmpty(user.CharacterIdentification))
|
||||||
{
|
{
|
||||||
Logger.LogInformation("Disconnect from " + AuthenticatedUserId);
|
Logger.LogInformation("Disconnect from " + AuthenticatedUserId);
|
||||||
|
|
||||||
var otherUsers = DbContext.ClientPairs.AsNoTracking()
|
var otherUsers = await DbContext.ClientPairs.AsNoTracking()
|
||||||
.Include(u => u.User)
|
.Include(u => u.User)
|
||||||
.Include(u => u.OtherUser)
|
.Include(u => u.OtherUser)
|
||||||
.Where(w => w.User.UID == user.UID && !w.IsPaused)
|
.Where(w => w.User.UID == user.UID && !w.IsPaused)
|
||||||
.Where(w => !string.IsNullOrEmpty(w.OtherUser.CharacterIdentification))
|
.Where(w => !string.IsNullOrEmpty(w.OtherUser.CharacterIdentification))
|
||||||
.Select(e => e.OtherUser).ToList();
|
.Select(e => e.OtherUser).ToListAsync();
|
||||||
var otherEntries = DbContext.ClientPairs.AsNoTracking().Include(u => u.User)
|
var otherEntries = await DbContext.ClientPairs.AsNoTracking().Include(u => u.User)
|
||||||
.Where(u => otherUsers.Any(e => e == u.User) && u.OtherUser.UID == user.UID && !u.IsPaused).ToList();
|
.Where(u => otherUsers.Any(e => e == u.User) && u.OtherUser.UID == user.UID && !u.IsPaused).ToListAsync();
|
||||||
await Clients.Users(otherEntries.Select(e => e.User.UID)).SendAsync(UserHubAPI.OnRemoveOnlinePairedPlayer, user.CharacterIdentification);
|
await Clients.Users(otherEntries.Select(e => e.User.UID)).SendAsync(UserHubAPI.OnRemoveOnlinePairedPlayer, user.CharacterIdentification);
|
||||||
|
|
||||||
|
|
||||||
DbContext.Users.Single(u => u.UID == AuthenticatedUserId).CharacterIdentification = null;
|
(await DbContext.Users.SingleAsync(u => u.UID == AuthenticatedUserId)).CharacterIdentification = null;
|
||||||
await DbContext.SaveChangesAsync();
|
await DbContext.SaveChangesAsync();
|
||||||
|
|
||||||
await Clients.All.SendAsync("UsersOnline",
|
await Clients.All.SendAsync("UsersOnline",
|
||||||
@@ -134,19 +134,19 @@ namespace MareSynchronosServer.Hubs
|
|||||||
{
|
{
|
||||||
Logger.LogInformation("User " + AuthenticatedUserId + " pushing character data to " + visibleCharacterIds.Count + " visible clients");
|
Logger.LogInformation("User " + AuthenticatedUserId + " pushing character data to " + visibleCharacterIds.Count + " visible clients");
|
||||||
|
|
||||||
var user = GetAuthenticatedUserUntracked();
|
var user = await GetAuthenticatedUserUntrackedAsync();
|
||||||
var senderPairedUsers = DbContext.ClientPairs.AsNoTracking()
|
var senderPairedUsers = await DbContext.ClientPairs.AsNoTracking()
|
||||||
.Include(w => w.User)
|
.Include(w => w.User)
|
||||||
.Include(w => w.OtherUser)
|
.Include(w => w.OtherUser)
|
||||||
.Where(w => w.User.UID == user.UID && !w.IsPaused
|
.Where(w => w.User.UID == user.UID && !w.IsPaused
|
||||||
&& visibleCharacterIds.Contains(w.OtherUser.CharacterIdentification))
|
&& visibleCharacterIds.Contains(w.OtherUser.CharacterIdentification))
|
||||||
.Select(u => u.OtherUser).ToList();
|
.Select(u => u.OtherUser).ToListAsync();
|
||||||
|
|
||||||
foreach (var pairedUser in senderPairedUsers)
|
foreach (var pairedUser in senderPairedUsers)
|
||||||
{
|
{
|
||||||
var isPaused = DbContext.ClientPairs.AsNoTracking()
|
var isPaused = (await DbContext.ClientPairs.AsNoTracking()
|
||||||
.FirstOrDefault(w =>
|
.FirstOrDefaultAsync(w =>
|
||||||
w.User.UID == pairedUser.UID && w.OtherUser.UID == user.UID)?.IsPaused ?? true;
|
w.User.UID == pairedUser.UID && w.OtherUser.UID == user.UID))?.IsPaused ?? true;
|
||||||
if (isPaused) continue;
|
if (isPaused) continue;
|
||||||
await Clients.User(pairedUser.UID).SendAsync(UserHubAPI.OnReceiveCharacterData, characterCache,
|
await Clients.User(pairedUser.UID).SendAsync(UserHubAPI.OnReceiveCharacterData, characterCache,
|
||||||
user.CharacterIdentification);
|
user.CharacterIdentification);
|
||||||
@@ -194,13 +194,13 @@ namespace MareSynchronosServer.Hubs
|
|||||||
{
|
{
|
||||||
if (uid == AuthenticatedUserId) return;
|
if (uid == AuthenticatedUserId) return;
|
||||||
uid = uid.Trim();
|
uid = uid.Trim();
|
||||||
var user = DbContext.Users.Single(u => u.UID == AuthenticatedUserId);
|
var user = await DbContext.Users.SingleAsync(u => u.UID == AuthenticatedUserId);
|
||||||
|
|
||||||
var otherUser = await DbContext.Users
|
var otherUser = await DbContext.Users
|
||||||
.SingleOrDefaultAsync(u => u.UID == uid);
|
.SingleOrDefaultAsync(u => u.UID == uid);
|
||||||
var existingEntry =
|
var existingEntry =
|
||||||
await DbContext.ClientPairs.AsNoTracking()
|
await DbContext.ClientPairs.AsNoTracking()
|
||||||
.SingleOrDefaultAsync(p =>
|
.FirstOrDefaultAsync(p =>
|
||||||
p.User.UID == AuthenticatedUserId && p.OtherUser.UID == uid);
|
p.User.UID == AuthenticatedUserId && p.OtherUser.UID == uid);
|
||||||
if (otherUser == null || existingEntry != null) return;
|
if (otherUser == null || existingEntry != null) return;
|
||||||
Logger.LogInformation("User " + AuthenticatedUserId + " adding " + uid + " to whitelist");
|
Logger.LogInformation("User " + AuthenticatedUserId + " adding " + uid + " to whitelist");
|
||||||
@@ -218,19 +218,11 @@ namespace MareSynchronosServer.Hubs
|
|||||||
{
|
{
|
||||||
OtherUID = otherUser.UID,
|
OtherUID = otherUser.UID,
|
||||||
IsPaused = false,
|
IsPaused = false,
|
||||||
IsPausedFromOthers = false,
|
IsPausedFromOthers = otherEntry?.IsPaused ?? false,
|
||||||
IsSynced = otherEntry != null
|
IsSynced = otherEntry != null
|
||||||
}, string.Empty);
|
}, string.Empty);
|
||||||
if (otherEntry != null)
|
if (otherEntry != null)
|
||||||
{
|
{
|
||||||
if (!string.IsNullOrEmpty(otherUser.CharacterIdentification))
|
|
||||||
{
|
|
||||||
await Clients.User(user.UID)
|
|
||||||
.SendAsync(UserHubAPI.OnAddOnlinePairedPlayer, otherUser.CharacterIdentification);
|
|
||||||
await Clients.User(otherUser.UID)
|
|
||||||
.SendAsync(UserHubAPI.OnAddOnlinePairedPlayer, user.CharacterIdentification);
|
|
||||||
}
|
|
||||||
|
|
||||||
await Clients.User(uid).SendAsync(UserHubAPI.OnUpdateClientPairs,
|
await Clients.User(uid).SendAsync(UserHubAPI.OnUpdateClientPairs,
|
||||||
new ClientPairDto()
|
new ClientPairDto()
|
||||||
{
|
{
|
||||||
@@ -239,6 +231,14 @@ namespace MareSynchronosServer.Hubs
|
|||||||
IsPausedFromOthers = false,
|
IsPausedFromOthers = false,
|
||||||
IsSynced = true
|
IsSynced = true
|
||||||
}, user.CharacterIdentification);
|
}, user.CharacterIdentification);
|
||||||
|
|
||||||
|
if (!string.IsNullOrEmpty(otherUser.CharacterIdentification))
|
||||||
|
{
|
||||||
|
await Clients.User(user.UID)
|
||||||
|
.SendAsync(UserHubAPI.OnAddOnlinePairedPlayer, otherUser.CharacterIdentification);
|
||||||
|
await Clients.User(otherUser.UID)
|
||||||
|
.SendAsync(UserHubAPI.OnAddOnlinePairedPlayer, user.CharacterIdentification);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -247,8 +247,8 @@ namespace MareSynchronosServer.Hubs
|
|||||||
public async Task SendPairedClientPauseChange(string uid, bool isPaused)
|
public async Task SendPairedClientPauseChange(string uid, bool isPaused)
|
||||||
{
|
{
|
||||||
if (uid == AuthenticatedUserId) return;
|
if (uid == AuthenticatedUserId) return;
|
||||||
var user = DbContext.Users.AsNoTracking()
|
var user = await DbContext.Users.AsNoTracking()
|
||||||
.Single(u => u.UID == AuthenticatedUserId);
|
.SingleAsync(u => u.UID == AuthenticatedUserId);
|
||||||
var otherUser = await DbContext.Users.AsNoTracking()
|
var otherUser = await DbContext.Users.AsNoTracking()
|
||||||
.SingleOrDefaultAsync(u => u.UID == uid);
|
.SingleOrDefaultAsync(u => u.UID == uid);
|
||||||
if (otherUser == null) return;
|
if (otherUser == null) return;
|
||||||
|
|||||||
Reference in New Issue
Block a user