public void MoveNull()
 {
     Assert.Throws <ArgumentNullException> (() => manager.Move(null, new ChannelInfo(1)));
     Assert.Throws <ArgumentNullException> (() => manager.Move(user, null));
 }
Exemple #2
0
        private void MoveUser(int moverId, int userId, int channelId)
        {
            IConnection requester      = null;
            IUserInfo   requestingUser = (moverId == 0) ? null : this.context.Users[moverId];

            if (requestingUser != null)
            {
                requester = this.context.Users[requestingUser];
            }

            IUserInfo user = this.context.Users[userId];

            if (user == null)
            {
                return;
            }

            ChannelChangeInfo info = (requestingUser != null)
                                                        ? new ChannelChangeInfo(userId, channelId, user.CurrentChannelId, requestingUser.UserId)
                                                        : new ChannelChangeInfo(userId, channelId, user.CurrentChannelId);

            IChannelInfo channel = this.context.Channels[channelId];

            if (channel == null)
            {
                if (requester != null)
                {
                    requester.SendAsync(new ChannelChangeResultMessage(ChannelChangeResult.FailedUnknownChannel, info));
                }

                return;
            }

            if (!user.Equals(requestingUser))
            {
                if (!this.context.GetPermission(PermissionName.ChangePlayersChannel, channel.ChannelId, moverId))
                {
                    if (requester != null)
                    {
                        requester.SendAsync(new ChannelChangeResultMessage(ChannelChangeResult.FailedPermissions, info));
                    }

                    return;
                }
            }
            else if (!this.context.GetPermission(PermissionName.ChangeChannel, channel.ChannelId, user.UserId))
            {
                if (requester != null)
                {
                    requester.SendAsync(new ChannelChangeResultMessage(ChannelChangeResult.FailedPermissions, info));
                }

                return;
            }

            if (channel.UserLimit != 0 && channel.UserLimit <= context.Users.Count(u => u.CurrentChannelId == channel.ChannelId))
            {
                if (requester != null)
                {
                    requester.SendAsync(new ChannelChangeResultMessage(ChannelChangeResult.FailedFull, info));
                }

                return;
            }

            Manager.Move(user, channel);

            foreach (IConnection connection in Manager.GetConnections())
            {
                connection.SendAsync(new UserChangedChannelMessage {
                    ChangeInfo = info
                });
            }
        }