public async Task PostConversationEdgeCaseFailedtoAddToBothPartitions()
        {
            Profile profile1 = CreateRandomProfile();
            await _chatServiceClient.AddProfile(profile1);

            Profile profile2 = CreateRandomProfile();
            await _chatServiceClient.AddProfile(profile2);

            var messageResponse = CreateRandomPostMessageResponse(profile1.Username);

            string[] participants   = { profile1.Username, profile2.Username };
            string   conversationId = ParticipantsToId(participants);
            await _messageStore.AddMessage(messageResponse, conversationId);

            var messageRequest = new PostMessageRequest
            {
                Id             = messageResponse.Id,
                Text           = messageResponse.Text,
                SenderUsername = profile1.Username
            };
            var conversationRequest = CreateRandomPostConversationRequest(messageRequest, participants);
            var fetchedConversation = await _chatServiceClient.AddConversation(conversationRequest);

            Assert.Equal(fetchedConversation.Id, conversationId);
        }
Пример #2
0
        public async Task <ApiResponse> Create(MessageDto messageDto)
        {
            _logger.LogDebug("Adding message: {@messageDto}", messageDto);
            var message = await _messageStore.AddMessage(messageDto);

            return(new ApiResponse(Status200OK, "Created Message", message));
        }
Пример #3
0
        public async Task <Message> AddMessage(string conversationId, AddMessageRequestBody addMessageRequestBody)
        {
            using (_logger.BeginScope("{ConversationId}", conversationId))
            {
                var message = new Message
                {
                    Id             = addMessageRequestBody.Id,
                    SenderUsername = addMessageRequestBody.SenderUsername,
                    Text           = addMessageRequestBody.Text,
                    UnixTime       = DateTimeOffset.Now.ToUnixTimeMilliseconds()
                };
                ThrowBadRequestIfMessageInvalid(message);
                try
                {
                    var stopWatch = Stopwatch.StartNew();
                    await _messageStore.AddMessage(conversationId, message);

                    _telemetryClient.TrackMetric("MessageStore.AddMessage.Time", stopWatch.ElapsedMilliseconds);
                    _telemetryClient.TrackEvent("MessageCreated");
                }
                catch (MessageAlreadyExistsException e)
                {
                    message = await _messageStore.GetMessage(conversationId, message.Id);

                    return(message);
                }

                await _conversationStore.UpdateConversation(message.UnixTime, conversationId);

                return(message);
            }
        }
Пример #4
0
        public async Task <AddConversationResponse> AddConversation(AddConversationRequestBody addConversationRequestBody)
        {
            var id           = "m_" + addConversationRequestBody.Participants[0] + "_" + addConversationRequestBody.Participants[1];
            var conversation = new Conversation
            {
                Id                   = id,
                Participants         = addConversationRequestBody.Participants,
                LastModifiedUnixTime = DateTimeOffset.Now.ToUnixTimeMilliseconds()
            };
            var addConversationResponse = new AddConversationResponse
            {
                Id = addConversationRequestBody.Participants[0] + "_" + addConversationRequestBody.Participants[1],
                CreatedUnixTime = conversation.LastModifiedUnixTime
            };

            using (_logger.BeginScope("{ConversationId}", id))
            {
                var stopWatch = Stopwatch.StartNew();
                await _conversationStore.AddConversation(conversation);

                _telemetryClient.TrackMetric("ConversationStore.AddConversation.Time", stopWatch.ElapsedMilliseconds);
                _telemetryClient.TrackEvent("ConversationCreated");
                var message = new Message
                {
                    Id             = addConversationRequestBody.FirstMessage["Id"],
                    Text           = addConversationRequestBody.FirstMessage["Text"],
                    SenderUsername = addConversationRequestBody.FirstMessage["SenderUsername"],
                    UnixTime       = DateTimeOffset.Now.ToUnixTimeMilliseconds()
                };
                await _messageStore.AddMessage(id.Remove(0, 2), message);

                return(addConversationResponse);
            }
        }
Пример #5
0
 public async Task ReceiveLobbyMessage(Guid lobbyId, Message message)
 {
     // We are in the lobby
     if (lobbyStore.SelectedLobby.Id == lobbyId)
     {
         await messageStore.AddMessage(message);
     }
 }
Пример #6
0
 public async Task ReceiveMatchMessage(Guid matchId, Message message)
 {
     // We are in the match
     if (matchStore.SelectedMatch.Id == matchId)
     {
         await messageStore.AddMessage(message);
     }
 }
Пример #7
0
 private void OnMessageCreated(Guid sender, string message)
 {
     Console.WriteLine("{0} says {1}", sender, message);
     lock (_syncRoot)
     {
         _clientPool.Broadcast(sender, message);
         _store.AddMessage(sender, message);
     }
 }
Пример #8
0
 public void Enqueue(T message)
 {
     _enqueueLocker.AtomWrite(() => {
         _messageStore.AddMessage(Name, message);
         _queue.Add(message);
         if (Logger.IsDebugEnabled)
         {
             Logger.DebugFormat("{0} enqueued, id:{1}", message.ToString(), message.Id);
         }
     });
 }
        public async Task <PostMessageResponse> PostMessage(string conversationId, PostMessageRequest postMessageRequest)
        {
            using (_logger.BeginScope("{MessageId}", postMessageRequest.Id))
            {
                PostMessageResponse message = new PostMessageResponse
                {
                    Id             = postMessageRequest.Id,
                    Text           = postMessageRequest.Text,
                    SenderUsername = postMessageRequest.SenderUsername,
                    UnixTime       = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()
                };
                var stopWatch      = Stopwatch.StartNew();
                var fetchedMessage = await _messageStore.AddMessage(message, conversationId);

                await _conversationStore.UpdateConversation(conversationId, fetchedMessage.UnixTime);

                _telemetryClient.TrackMetric("MessageStore.AddMessage.Time", stopWatch.ElapsedMilliseconds);
                _telemetryClient.TrackEvent("MessageAdded");
                return(fetchedMessage);
            }
        }
Пример #10
0
        private async Task <UserMessage> CreateMessageInternalAsync(UserMessage newMessage, CancellationToken cancellationToken)
        {
            try
            {
                await messageStore.AddMessage(newMessage, cancellationToken);

                await hubContext.Clients.All.ReceiveNewMessage(newMessage);

                return(newMessage);
            }
            catch (Exception)
            {
                throw;
            }
        }
Пример #11
0
 private void OnMessageReceived(ISmtp4devMessage message)
 {
     _messageStore.AddMessage(message);
 }
Пример #12
0
 public void Handle(CarRequest message)
 {
     Thread.Sleep(2000);
     _logger.LogWarning("{Handler} : Brand = {CarBrand}, Model = {CarModel}, Color = {CarColor}", this.GetType().Name, message.Brand, message.Model, message.Color);
     _messageStore.AddMessage(this.GetType().Name, message.ToString());
 }