public override DataTemplate SelectTemplate(object item, DependencyObject container)
        {
            ConversationMessageViewModel message = (ConversationMessageViewModel)item;

            switch (message.Type)
            {
            case ConversationViewMessageType.Incoming:
                return(this.IncomingTemplate);

            case ConversationViewMessageType.Outgoing:
                return(this.OutgoingTemplate);
            }

            return(null);
        }
        public async Task <IActionResult> Post([FromBody] ConversationMessageViewModel value)
        {
            if (ModelState.IsValid)
            {
                if (value.ConversationId.IsDefault() || value.ReceiverId.IsDefault())
                {
                    return(BadRequest("Unable to validate payload"));
                }

                var senderId    = User.GetUserId();
                var sentMessage = await _conversationDataProvider.SendMessageAsync(senderId, value);

                await _messageHandler.SendChatMessageToRecipientAsync(Request.GetAccessToken(), senderId, sentMessage);

                return(Ok(sentMessage));
            }

            return(BadRequest(new { Errors = ModelState.ToErrorCollection() }));
        }
        public async Task <ConversationMessageViewModel> SendMessageAsync(Guid senderId, ConversationMessageViewModel message)
        {
            //TODO: Check the instigator has the right to post a message to this conversation
            var entity = new ConversationMessage
            {
                ConversationId = message.ConversationId,
                Created        = DateTime.Now,
                Message        = message.Message,
                SenderId       = senderId,
                ReceiverId     = message.ReceiverId
            };

            await Context.AddAsync(entity);

            await Context.SaveChangesAsync();

            return(new ConversationMessageViewModel
            {
                Id = entity.Id,
                ConversationId = entity.ConversationId,
                Message = entity.Message,
                ReceiverId = entity.ReceiverId,
                Sent = entity.Created,
                Seen = entity.Seen
            });
        }
Esempio n. 4
0
        public async Task SendChatMessageToRecipientAsync(string accessToken, Guid senderId, ConversationMessageViewModel conversationMessage)
        {
            foreach (var userClient in WebSocketConnectionManager.GetClientByUserId(conversationMessage.ReceiverId))
            {
                await InvokeClientMethodAsync(userClient.Key, "ChatMessageReceived", new[] { conversationMessage });
            }

            foreach (var userClient in WebSocketConnectionManager.GetClientByUserId(senderId))
            {
                await InvokeClientMethodAsync(userClient.Key, "ChatMessageReceived", new[] { conversationMessage });
            }
        }