/// <summary>
        /// Long polling wait loop, incoming requests are slept until timeout or a new message
        /// </summary>
        /// <param name="topic">Message topic</param>
        /// <param name="endDateTime">Ending time of sleep operation</param>
        /// <param name="lastReceivedMsgDT">UTC DateTime value of the last send message</param>
        /// <returns></returns>
        private List <PushMessage> Internal_HandleRequest(string topic, DateTime endDateTime, DateTime?lastReceivedMsgDT)
        {
            lock (_waitHandleTransitionLock)
            {
                // Waitfor proper _waitHandle transition to avoid stackoverflow
            }

            var messages = _persistanceService.Get(topic, lastReceivedMsgDT);

            if ((messages != null) && (messages.Count > 0))
            {
                return(messages);
            }
            else
            {
                int remaingWaitMiliseconds = (int)endDateTime.Subtract(DateTime.UtcNow).TotalMilliseconds;
                if (remaingWaitMiliseconds == 0)
                {
                    return(_persistanceService.Get(topic, lastReceivedMsgDT));
                }
                else if (remaingWaitMiliseconds < 0)
                {
                    return(new List <DTOs.PushMessage>());
                }

                // Wait for any signal
                _waitHandle.WaitOne(remaingWaitMiliseconds);

                return(Internal_HandleRequest(topic, endDateTime, lastReceivedMsgDT));
            }
        }