Files
AIPS/dotnet/AipsRT/Model/Whiteboard/WhiteboardManager.cs
Veljko Tosic 643de642a1 Merge branch 'main' into feature-join-whiteboard-by-code
# Conflicts:
#	dotnet/AipsRT/Hubs/WhiteboardHub.cs
#	dotnet/AipsRT/Services/Interfaces/IMessagingService.cs
#	front/src/stores/whiteboard.ts
2026-03-07 21:40:09 +01:00

88 lines
2.5 KiB
C#

using System.Collections.Concurrent;
using AipsCore.Application.Abstract;
namespace AipsRT.Model.Whiteboard;
public class WhiteboardManager
{
private readonly IServiceScopeFactory _scopeFactory;
private readonly ConcurrentDictionary<Guid, Whiteboard> _whiteboards = new();
private readonly ConcurrentDictionary<Guid, Guid> _userInWhiteboards = new();
public WhiteboardManager(IServiceScopeFactory scopeFactory)
{
_scopeFactory = scopeFactory;
}
public async Task LoadWhiteboard(Guid whiteboardId)
{
var getWhiteboardService = _scopeFactory.CreateScope().ServiceProvider.GetRequiredService<GetWhiteboardService>();
var whiteboard = await getWhiteboardService.GetWhiteboard(whiteboardId);
_whiteboards[whiteboardId] = whiteboard;
}
public bool WhiteboardExists(Guid whiteboardId)
{
return _whiteboards.ContainsKey(whiteboardId);
}
public void RemoveWhiteboard(Guid whiteboardId)
{
_whiteboards.TryRemove(whiteboardId, out _);
}
public Whiteboard? GetWhiteboard(Guid whiteboardId)
{
return _whiteboards.GetValueOrDefault(whiteboardId);
}
public void AddUserToWhiteboard(Guid userId, Guid whiteboardId)
{
_userInWhiteboards[userId] = whiteboardId;
}
public Guid GetUserWhiteboard(Guid userId)
{
return _userInWhiteboards[userId];
}
public void RemoveUserFromWhiteboard(Guid userId)
{
_userInWhiteboards.TryRemove(userId, out _);
}
public Whiteboard? GetWhiteboardForUser(Guid userId)
{
return GetWhiteboard(GetUserWhiteboard(userId));
}
public void AddPendingUser(Guid userId, Guid whiteboardId)
{
var wb = GetWhiteboard(whiteboardId)!;
wb.AddPendingUser(userId);
_userInWhiteboards[userId] = whiteboardId;
}
public void MovePendingToAccepted(Guid userId, Guid whiteboardId)
{
var wb = GetWhiteboard(whiteboardId)!;
wb.AcceptUser(userId);
}
public void RemovePendingUser(Guid userId, Guid whiteboardId)
{
var whiteboard = GetWhiteboard(whiteboardId)!;
whiteboard.RejectUser(userId);
_userInWhiteboards.TryRemove(userId, out _);
}
public bool IsAccepted(Guid userId)
{
if (!_userInWhiteboards.TryGetValue(userId, out var wbId))
return false;
var whiteboard = GetWhiteboard(wbId);
return whiteboard?.IsAccepted(userId) ?? false;
}
}