예제 #1
0
        public IHttpActionResult SendMessageIntoChat(Guid id, ChatMessageDispatch model)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var chatMessage = model.MapToChatMessage();

            try
            {
                if (User.Identity.IsAuthenticated)     // User is an operator.
                {
                    chatMessage.SenderType = UserType.Operator;
                    var user = Request.GetOwinContext().GetUserManager <ApplicationUserManager>().FindById(User.Identity.GetUserId());
                    chatMessage.SenderName = user?.ScreenName;
                }
                else // User is anonymous
                {
                    chatMessage.SenderType = UserType.AnonymousUser;
                    chatMessage.SenderName = ChatService.GetScreenName(id);
                }
                // Add the message to our chat.
                ChatService.AddMessageToChat(id, chatMessage);
            }
            catch (ChatNotFoundException e)
            {
                return(Content(HttpStatusCode.NotFound, $"{e.Message}"));
            }
            catch (Exception e)
            {
                Logger.Error(e, $"{nameof(SendMessageIntoChat)} threw an exception: {e.Message}");

                return(InternalServerError());
            }

            var result = chatMessage.MapToChatMessageDTO();

            return(Ok(result));
        }