Пример #1
0
        public async Task SendMessage(JsonMessage message)
        {
            var sender = await _userManager.GetUserAsync(Context.User);

            if (message.Sender.UserName != sender.UserName)
            {
                throw new AuthenticationException();
            }
            var receiver = await _userManager.FindByNameAsync(message.Receiver.UserName) ??
                           throw new ArgumentException($"User with user name {message.Receiver.UserName} doesn't exist");

            message.Text = new Regex(@" ?").Replace(message.Text, " ");
            message.Text = HttpUtility.HtmlDecode(message.Text);
            if (string.IsNullOrWhiteSpace(message.Text))
            {
                throw new ArgumentNullException(nameof(message.Text));
            }

            if (message.Text.Length > 4096)
            {
                throw new ArgumentException("Message text length must be less then 4096");
            }

            await _messageManager.AddAsync(new Message
            {
                Receiver = receiver,
                Sender   = sender,
                SendDate = DateTime.UtcNow,
                Text     = message.Text
            });

            var pathToProfilePhotos = Path.Combine(_environment.ContentRootPath, _photoOptions.Value.UsersPhotosPath);

            message.Sender.PhotoUrl   = Path.Combine(pathToProfilePhotos, sender.ProfilePhotoName);
            message.Receiver.PhotoUrl = Path.Combine(pathToProfilePhotos, receiver.ProfilePhotoName);

            var receiverId = Connections.GetValueOrDefault(message.Receiver.UserName);

            if (!(receiverId is null))
            {
                await Clients.Client(receiverId).SendAsync("receiveMessage", message);
            }