Inheritance: Gwupe.Cloud.Messaging.API.UserToUserRequest
Example #1
0
 private void ProcessChats()
 {
     while (true)
     {
         while (_chatQueue.Count > 0)
         {
             SelfChatElement chatElement;
             if (_chatQueue.TryPeek(out chatElement))
             {
                 chatElement.DeliveryState = ChatDeliveryState.Trying;
                 var chatMessageRq = new ChatMessageRq()
                     {
                         message = chatElement.Message,
                         username = _to,
                         interactionId = _engagement.Interactions.CurrentOrNewInteraction.Id,
                         chatId = _threadId ?? (_threadId = Util.getSingleton().generateString(6))
                     };
                 try
                 {
                     Response response = _appContext.ConnectionManager.Connection.Request<ChatMessageRq, ChatMessageRs>(chatMessageRq);
                     chatElement.DeliveryState = ChatDeliveryState.Delivered;
                     _chatQueue.TryDequeue(out chatElement);
                 }
                 catch (Exception e)
                 {
                     Logger.Error("Failed to send chat message to " + _to + " : " + e.Message, e);
                     // Set all pending to still trying
                     foreach (SelfChatElement element in _chatQueue.ToArray())
                     {
                         element.DeliveryState = ChatDeliveryState.FailedTrying;
                     }
                     Thread.Sleep(1000);
                 }
             }
             else
             {
                 Logger.Error("Failed to peek into the chat queue, cannot process message");
                 // Failed to dequeue, wait a second
                 Thread.Sleep(1000);
             }
         }
         lock (_chatQueue)
         {
             while (_chatQueue.Count == 0)
             {
                 Monitor.Wait(_chatQueue);
             }
         }
     }
 }