示例#1
0
        private Task handleUserLeft(MultiplayerRoomUser user, Action <MultiplayerRoomUser>?callback)
        {
            if (Room == null)
            {
                return(Task.CompletedTask);
            }

            Scheduler.Add(() =>
            {
                if (Room == null)
                {
                    return;
                }

                Room.Users.Remove(user);
                PlayingUserIds.Remove(user.UserID);

                Debug.Assert(APIRoom != null);
                APIRoom.RecentParticipants.RemoveAll(u => u.Id == user.UserID);
                APIRoom.ParticipantCount.Value--;

                callback?.Invoke(user);
                RoomUpdated?.Invoke();
            }, false);

            return(Task.CompletedTask);
        }
示例#2
0
        async Task IMultiplayerClient.UserJoined(MultiplayerRoomUser user)
        {
            if (Room == null)
            {
                return;
            }

            await PopulateUser(user).ConfigureAwait(false);

            Scheduler.Add(() =>
            {
                if (Room == null)
                {
                    return;
                }

                // for sanity, ensure that there can be no duplicate users in the room user list.
                if (Room.Users.Any(existing => existing.UserID == user.UserID))
                {
                    return;
                }

                Room.Users.Add(user);

                addUserToAPIRoom(user);

                UserJoined?.Invoke(user);
                RoomUpdated?.Invoke();
            });
        }
示例#3
0
        async Task IMultiplayerClient.UserJoined(MultiplayerRoomUser user)
        {
            if (Room == null)
            {
                return;
            }

            await PopulateUser(user);

            Schedule(() =>
            {
                if (Room == null)
                {
                    return;
                }

                // for sanity, ensure that there can be no duplicate users in the room user list.
                if (Room.Users.Any(existing => existing.UserID == user.UserID))
                {
                    return;
                }

                Room.Users.Add(user);

                RoomChanged?.Invoke();
            });
        }
示例#4
0
        private void addUserToAPIRoom(MultiplayerRoomUser user)
        {
            Debug.Assert(APIRoom != null);

            APIRoom.RecentParticipants.Add(user.User ?? new APIUser
            {
                Id       = user.UserID,
                Username = "******"
            });
            APIRoom.ParticipantCount.Value++;
        }
示例#5
0
        Task IMultiplayerClient.UserKicked(MultiplayerRoomUser user)
        {
            if (LocalUser == null)
            {
                return(Task.CompletedTask);
            }

            if (user.Equals(LocalUser))
            {
                LeaveRoom();
            }

            return(handleUserLeft(user, UserKicked));
        }
示例#6
0
        Task IMultiplayerClient.UserKicked(MultiplayerRoomUser user)
        {
            if (LocalUser == null)
            {
                return(Task.CompletedTask);
            }

            if (user.Equals(LocalUser))
            {
                LeaveRoom();
            }

            // TODO: also inform users of the kick operation.
            return(((IMultiplayerClient)this).UserLeft(user));
        }
        Task IMultiplayerClient.UserLeft(MultiplayerRoomUser user)
        {
            if (Room == null)
            {
                return(Task.CompletedTask);
            }

            Scheduler.Add(() =>
            {
                if (Room == null)
                {
                    return;
                }

                Room.Users.Remove(user);
                CurrentMatchPlayingUserIds.Remove(user.UserID);

                RoomUpdated?.Invoke();
            }, false);

            return(Task.CompletedTask);
        }
示例#8
0
        Task IMultiplayerClient.UserLeft(MultiplayerRoomUser user)
        {
            if (Room == null)
            {
                return(Task.CompletedTask);
            }

            Schedule(() =>
            {
                if (Room == null)
                {
                    return;
                }

                Room.Users.Remove(user);
                PlayingUsers.Remove(user.UserID);

                RoomChanged?.Invoke();
            });

            return(Task.CompletedTask);
        }
示例#9
0
        private Task handleUserLeft(MultiplayerRoomUser user, Action <MultiplayerRoomUser>?callback)
        {
            if (Room == null)
            {
                return(Task.CompletedTask);
            }

            Scheduler.Add(() =>
            {
                if (Room == null)
                {
                    return;
                }

                Room.Users.Remove(user);
                PlayingUserIds.Remove(user.UserID);

                callback?.Invoke(user);
                RoomUpdated?.Invoke();
            }, false);

            return(Task.CompletedTask);
        }
示例#10
0
 protected async Task PopulateUser(MultiplayerRoomUser multiplayerUser) => multiplayerUser.User ??= await userLookupCache.GetUserAsync(multiplayerUser.UserID).ConfigureAwait(false);
示例#11
0
 Task IMultiplayerClient.UserLeft(MultiplayerRoomUser user) =>
 handleUserLeft(user, UserLeft);