Exemplo n.º 1
0
        // work threads

        private void PoolWorkerJob(object o)
        {
            PollServiceHttpRequest req = o as PollServiceHttpRequest;

            if (req == null)
            {
                return;
            }
            try
            {
                if (!req.Request.Context.CanSend())
                {
                    req.PollServiceArgs.Drop(req.RequestID, req.PollServiceArgs.Id);
                    return;
                }

                if (!m_running)
                {
                    req.DoHTTPstop();
                    return;
                }

                if (req.Request.Context.IsSending())
                {
                    ReQueueEvent(req);
                    return;
                }

                if (req.PollServiceArgs.HasEvents(req.RequestID, req.PollServiceArgs.Id))
                {
                    try
                    {
                        Hashtable responsedata = req.PollServiceArgs.GetEvents(req.RequestID, req.PollServiceArgs.Id);
                        req.DoHTTPGruntWork(responsedata);
                    }
                    catch { }
                }
                else
                {
                    if ((Environment.TickCount - req.RequestTime) > req.PollServiceArgs.TimeOutms)
                    {
                        try
                        {
                            req.DoHTTPGruntWork(req.PollServiceArgs.NoEvents(req.RequestID, req.PollServiceArgs.Id));
                        }
                        catch { }
                    }
                    else
                    {
                        ReQueueEvent(req);
                    }
                }
            }
            catch (Exception e)
            {
                m_log.ErrorFormat("Exception in poll service thread: " + e.ToString());
            }
        }