Beispiel #1
0
        public async Task <OutgoingChatMessageViewModel> SendMessage(IncommingChatMessageViewModel chatMessageViewModel)
        {
            var chatMessage = new ChatMessage()
            {
                Message = chatMessageViewModel.Message,
                ToId    = chatMessageViewModel.To.Id,
                FromId  = chatMessageViewModel.From.Id,
            };

            await this._unitOfWork.Chats.AddAsync(chatMessage);

            await this._unitOfWork.CompleteAsync();

            var outGoingMessage = new OutgoingChatMessageViewModel
            {
                Id           = chatMessage.Id,
                FromId       = chatMessageViewModel.From.Id,
                ToId         = chatMessageViewModel.To.Id,
                Message      = chatMessageViewModel.Message,
                CreatedAt    = chatMessage.CreatedAt,
                UpdatedAt    = chatMessage.UpdatedAt,
                FromUserName = chatMessageViewModel.From.UserName,
                ToUserName   = chatMessageViewModel.To.UserName,
            };

            await this._hubContext.Clients
            .User(chatMessageViewModel.To.Id.ToString())
            .MessageToUser(outGoingMessage);

            return(outGoingMessage);
        }
Beispiel #2
0
        public async Task <IActionResult> PostVideo([FromForm] IncommingChatMessageViewModel chatMessageViewModel)
        {
            var sentMessage = await
                              this._chatService.SendMessageAsync(chatMessageViewModel);

            return(new OkObjectResult(sentMessage));
        }
Beispiel #3
0
        public async Task <OutgoingChatMessageViewModel> SendMessageAsync(IncommingChatMessageViewModel incommingChatMessageViewModel)
        {
            var chatMessage = new ChatMessage()
            {
                Message = incommingChatMessageViewModel.Message,
                ToId    = incommingChatMessageViewModel.To.Id,
                FromId  = incommingChatMessageViewModel.From.Id,
                Type    = incommingChatMessageViewModel.Type,
            };


            if (incommingChatMessageViewModel.IsTypeSet)
            {
                switch (incommingChatMessageViewModel.Type)
                {
                case "img":
                    var bytes = Convert.FromBase64String(chatMessage.Message.Replace("data:image/png;base64,", ""));
                    File.WriteAllBytes($"Uploads/Images/{Guid.NewGuid()}.png", bytes);
                    break;

                case "video":
                    var fileName         = Guid.NewGuid().ToString();
                    var fileNameConveted = Guid.NewGuid().ToString();
                    var ext = Path.GetExtension(incommingChatMessageViewModel.Video.FileName);

                    var videoUploadPath         = $"Uploads/Videos/{fileName}{ext}";
                    var videoConvertedVideoPath = $"Uploads/Videos/{fileNameConveted}{ext}";

                    var document = new Document {
                        ContentType = incommingChatMessageViewModel.Video.ContentType,
                        Ext         = ext,
                        Name        = fileNameConveted,
                        Path        = videoConvertedVideoPath
                    };
                    chatMessage.Message = _linkGenerator.GetPathByAction(nameof(DocumentsController.Get),
                                                                         "documents",
                                                                         new { name = fileNameConveted }
                                                                         );
                    using (var stream = new FileStream(videoUploadPath, FileMode.Create))
                    {
                        await incommingChatMessageViewModel.Video.CopyToAsync(stream);
                    }

                    await _videoConverter.Convert(Path.GetFullPath(videoUploadPath), Path.GetFullPath(videoConvertedVideoPath));

                    await _dbContext.AddAsync(document);

                    break;

                default:
                    break;
                }
            }


            await _dbContext.AddAsync(chatMessage);

            await _dbContext.SaveChangesAsync();

            var outGoingMessage = new OutgoingChatMessageViewModel
            {
                Id           = chatMessage.Id,
                FromId       = chatMessage.FromId,
                ToId         = chatMessage.ToId,
                Message      = chatMessage.Message,
                CreatedAt    = chatMessage.CreatedAt,
                UpdatedAt    = chatMessage.UpdatedAt,
                FromUserName = incommingChatMessageViewModel.From.UserName,
                ToUserName   = incommingChatMessageViewModel.To.UserName,
                Type         = incommingChatMessageViewModel.Type,
            };

            await this._hubContext.Clients.Users(
                incommingChatMessageViewModel.To.Id.ToString(), outGoingMessage.FromId.ToString())
            .MessageToUser(outGoingMessage);

            return(outGoingMessage);
        }