Пример #1
0
        public void RemovePendingDisconnectedUser(RoomUser roomUser)
        {
            _logger.LogInformation($"removing pending room user {roomUser.Id}");

            roomUser.Room.RoomActors.Remove(roomUser);
            roomUser.Room.RoomUsers.Remove(roomUser);

            if (roomUser.Room.RoomUsers.Count == 0) //maybe the remaining are bots, or non
            {
                _serverLoop.CancelPendingRoomTimeout(roomUser.Room);
                _sessionRepo.DeleteRoom(roomUser.Room);
            }

            _sessionRepo.DeleteRoomUser(roomUser);

            roomUser.Room = null;
        }
Пример #2
0
        public async Task FinalizeRoom(Room room)
        {
            room.SetUsersDomains(typeof(UserDomain.App.Room.FinishedRoom));
            //does this has usage or u can just use lobby idle?

            LastEat(room);

            var roomDataUsersUnOrdered =
                await _masterRepo.GetUsersByIdsAsync(room.RoomActors.Select(_ => _.Id).ToList());

            var roomDataUsers = room.RoomActors.Join(roomDataUsersUnOrdered, ru => ru.Id,
                                                     du => du.Id, (_, du) => du).ToList();

            var scores = CalcScores(room.RoomActors);

            var reportsAndStatus = UpdateUserStates(room, roomDataUsers, scores);

            for (int i = 0; i < roomDataUsers.Count; i++)
            {
                ActiveUser activeUser = room.RoomActors[i] is RoomUser ru
                ? activeUser = ru.ActiveUser
                : null;

                await LevelWorks(roomDataUsers[i], activeUser);
            }

            await _masterRepo.SaveChangesAsync();

            await SendFinalizeResult(room.RoomUsers, roomDataUsers, reportsAndStatus.Item1,
                                     reportsAndStatus.Item2, room.LastEater.TurnId);

            RemoveDisconnectedUsers(room.RoomUsers);

            room.RoomUsers.ForEach(ru => _sessionRepo.DeleteRoomUser(ru));
            _sessionRepo.DeleteRoom(room);

            room.SetUsersDomains(typeof(UserDomain.App.Lobby.Idle));
        }