public async Task CreateMessage(CreateMessageRequest request) { async Task ProcessRequest() { var message = await _mediator .Send(new CreateMessageCommand { UserId = long.Parse(Context.UserIdentifier), RoomId = request.RoomId, Content = request.Content }); var response = new CreateMessageResponse { UserId = message.UserId, Content = message.Content, Date = message.CreatedOn }; await Clients .Group(message.RoomId.ToString()) .SendAsync(_receiveMessageName, response); } await HandleError(ProcessRequest); }
/** * Create a new message in a specific room. * This message can be seen by others in the * same room. */ public async Task <CreateMessageResponse> CreateMessage(CreateMessageRequest payload) { try { var response = new CreateMessageResponse(); User user = await _userRepository.FindRoomOfUserById((Guid)payload.userIdentifier); if (user == null) { throw new ApplicationError("[MessageService.CreateMessage]", 1); } if (user.room == null) { throw new ApplicationError("[MessageService.CreateMessage]", 2); } var model = new Message { id = Guid.NewGuid(), text = payload.text, user = user, room = user.room, stamp = DateTime.Now }; bool result = await _messageRepository.Save(model); if (!result) { throw new ApplicationError("[MessageService.CreateMessage]", 3); } response.message = model; response.roomIdentifier = user.room.identifier; await _unitOfWork.Save(); return(response); } catch (Exception e) { throw e; } }
public async Task LeaveRoom(long roomId) { async Task ProcessRequest() { var room = await _mediator.Send(new GetRoomQuery { Id = roomId }); await Groups.RemoveFromGroupAsync(Context.ConnectionId, room.Id.ToString()); var response = new CreateMessageResponse { Content = $"{Context.User?.Identity?.Name} has left the room {room.Name}.", Date = DateTime.UtcNow }; await Clients .Group(room.Id.ToString()) .SendAsync(_receiveMessageName, response); } await HandleError(ProcessRequest); }
private IActionResult CreateMessageResponse(CreateMessageResponse response) { logger.LogInformation("Error creating message: {description}", response.Description); return(BadRequest(response.Description)); }