From b10292b88039e5a1a9b2012d4217d344ce0ed3a3 Mon Sep 17 00:00:00 2001 From: Veljko Tosic Date: Mon, 9 Mar 2026 21:13:21 +0100 Subject: [PATCH] Active users copied to last valid state upon invalidation --- dotnet/AipsRT/Model/Whiteboard/Whiteboard.cs | 11 ++++++++--- dotnet/AipsRT/Services/RtErrorHandleStrategy.cs | 7 +++++++ 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/dotnet/AipsRT/Model/Whiteboard/Whiteboard.cs b/dotnet/AipsRT/Model/Whiteboard/Whiteboard.cs index 87a728e..fa8bc5f 100644 --- a/dotnet/AipsRT/Model/Whiteboard/Whiteboard.cs +++ b/dotnet/AipsRT/Model/Whiteboard/Whiteboard.cs @@ -14,8 +14,7 @@ public class Whiteboard public List ActiveUsers { get; } = []; public void AddActiveUser(User user) => ActiveUsers.Add(user); - public void RemoveActiveUser(Guid userId) - => ActiveUsers.RemoveAll(u => u.UserId == userId); + public void RemoveActiveUser(Guid userId) => ActiveUsers.RemoveAll(u => u.UserId == userId); public List Shapes { get; } = []; @@ -48,5 +47,11 @@ public class Whiteboard TextShapes.Add(shape); } - public void AddUser(User user) => Users.Add(user); + public void AddUser(User user) + { + if (!Users.Contains(user)) + { + Users.Add(user); + } + } } \ No newline at end of file diff --git a/dotnet/AipsRT/Services/RtErrorHandleStrategy.cs b/dotnet/AipsRT/Services/RtErrorHandleStrategy.cs index 3f14796..2669f2f 100644 --- a/dotnet/AipsRT/Services/RtErrorHandleStrategy.cs +++ b/dotnet/AipsRT/Services/RtErrorHandleStrategy.cs @@ -18,9 +18,16 @@ public class RtErrorHandleStrategy : IErrorMessageHandleStrategy public async Task Handle(ErrorMessage message, CancellationToken cancellationToken) { + var activeUsers = _whiteboardManager.GetWhiteboard(message.WhiteboardId)!.ActiveUsers; + await _whiteboardManager.LoadWhiteboard(message.WhiteboardId); var whiteboard = _whiteboardManager.GetWhiteboard(message.WhiteboardId)!; + + foreach (var user in activeUsers) + { + whiteboard.AddActiveUser(user); + } await _hubContext.Clients .Group(whiteboard.WhiteboardId.ToString())