diff --git a/Sledgemapper.Api/Hubs/SledgemapperHub.cs b/Sledgemapper.Api/Hubs/SledgemapperHub.cs index d60ce11..5fd8c99 100644 --- a/Sledgemapper.Api/Hubs/SledgemapperHub.cs +++ b/Sledgemapper.Api/Hubs/SledgemapperHub.cs @@ -30,6 +30,9 @@ namespace SignalRChat.Hubs _dbContext = dbContext; _datacontext = datacontext; } + + // other colors + // #cca300, #20f200, #004011, #00e6d6, #005c73, #0057d9, #d900ca, #660029, #d9003a // private static Dictionary _sessions = new Dictionary(); public List Colors = new List{"CC0000", "CC3300", @@ -151,13 +154,16 @@ namespace SignalRChat.Hubs var usersSession = _dbContext.SessionUsers.Where(m => m.SessionId == session.SessionId).Select(m => m.UserId).ToList(); var players = _datacontext. Users. - Where(m => usersSession.Contains(m.Id)). - Select(p => new Player + Where(m => usersSession.Contains(m.Id)).ToList(). + //Select((r, index) => new { Place = index, Name = r }) + Select((p, index) => new Player { Initials = p.Initials, UserId = userId, + Color = Colors[index], Position = new Tile { X = 0, Y = 0 } }).ToList(); + await _dbContext.SaveChangesAsync(); await Groups.AddToGroupAsync(Context.ConnectionId, sessionName); @@ -224,12 +230,26 @@ namespace SignalRChat.Hubs await base.OnConnectedAsync(); } - public override Task OnDisconnectedAsync(Exception exception) + public override async Task OnDisconnectedAsync(Exception exception) { - _connectedPlayers.TryRemove(Context.ConnectionId, out var userId); - return base.OnDisconnectedAsync(exception); - } + var userConnection = _dbContext.UserConnections.FirstOrDefault(m => m.ConnectionId == Context.ConnectionId); + if (userConnection != null) + { + _dbContext.UserConnections.Remove(userConnection); + } + var userSessions = _dbContext.SessionUsers.Where(m => m.UserId == userConnection.UserId).ToList(); + { + foreach (var userSession in userSessions) + { + var session = _dbContext.Sessions.FirstOrDefault(m => m.SessionId == userSession.SessionId); + await Clients.Group(session.SessionName).PlayerUpdate(null); //send remove player + _dbContext.Sessions.Remove(session); + } - ConcurrentDictionary _connectedPlayers = new ConcurrentDictionary(); - } -} \ No newline at end of file + } + await _dbContext.SaveChangesAsync(); + + await base.OnDisconnectedAsync(exception); + + } + } \ No newline at end of file diff --git a/Sledgemapper.Api/sledgemapper.db b/Sledgemapper.Api/sledgemapper.db index 9846409..4f0b16e 100644 Binary files a/Sledgemapper.Api/sledgemapper.db and b/Sledgemapper.Api/sledgemapper.db differ