示例#1
0
        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);
        }
示例#2
0
        /**
         * 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;
            }
        }
示例#3
0
        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);
        }
示例#4
0
 private IActionResult CreateMessageResponse(CreateMessageResponse response)
 {
     logger.LogInformation("Error creating message: {description}", response.Description);
     return(BadRequest(response.Description));
 }