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); }
public async Task <IActionResult> PostVideo([FromForm] IncommingChatMessageViewModel chatMessageViewModel) { var sentMessage = await this._chatService.SendMessageAsync(chatMessageViewModel); return(new OkObjectResult(sentMessage)); }
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); }