Exemple #1
0
        public bool UpdateConversation(ConversationRequest conversationRequest)
        {
            if (conversationRequest.requestTime == null)
            {
                conversationRequest.requestTime = DateTime.Now;
            }

            var queueItem = new ConversationQueueItem {
                ConversationName = conversationRequest.name, RequestTime = conversationRequest.requestTime
            };

            if (!ConversationTracker.requestQueue.Any(i => i.ConversationName == queueItem.ConversationName && i.RequestTime == queueItem.RequestTime))
            {
                ConversationTracker.requestQueue.Enqueue(queueItem);
            }

            ConversationQueueItem peekedQueueItem;

            if (ConversationTracker.requestQueue.TryPeek(out peekedQueueItem))
            {
                if (peekedQueueItem.ConversationName == queueItem.ConversationName && peekedQueueItem.RequestTime == queueItem.RequestTime)
                {
                    var updated = updateDatabasesService.UpdateDatabases(conversationRequest);
                    ConversationTracker.requestQueue.TryDequeue(out peekedQueueItem);
                    return(updated);
                }
                CleanQueue();
            }

            return(Task.Delay(queueDelay).ContinueWith((task) => { return UpdateConversation(conversationRequest); }).Result);
        }
Exemple #2
0
        public ChatResponse GetResponse(ResponseRequest responseRequest)
        {
            if (responseRequest.requestTime == null)
            {
                responseRequest.requestTime = DateTime.Now;
            }

            var queueItem = new ConversationQueueItem {
                ConversationName = responseRequest.conversationName, RequestTime = responseRequest.requestTime
            };

            if (!ConversationTracker.requestQueue.Any(i => i.ConversationName == queueItem.ConversationName && i.RequestTime == queueItem.RequestTime))
            {
                ConversationTracker.requestQueue.Enqueue(queueItem);
            }

            ConversationQueueItem peekedQueueItem;

            if (ConversationTracker.requestQueue.TryPeek(out peekedQueueItem))
            {
                if (peekedQueueItem.ConversationName == queueItem.ConversationName && peekedQueueItem.RequestTime == queueItem.RequestTime)
                {
                    var conversation = conversationService.GetConversation(responseRequest.conversationName, responseRequest.type);
                    var response     = botService.GetChatResponse(conversation, responseRequest.exclusiveTypes, responseRequest.requiredProperyMatches, responseRequest.excludedTypes, responseRequest.subjectGoals);
                    ConversationTracker.requestQueue.TryDequeue(out peekedQueueItem);

                    return(response);
                }
                CleanQueue();
            }
            return(Task.Delay(queueDelay).ContinueWith((task) => { return GetResponse(responseRequest); }).Result);
        }