public async Task <LongPollingResponse> GetTaskEightData([FromBody] LongPollingRequest request)
        {
            UpdateDto update = null;

            UniversityDto[] dtos            = null;
            int             iterationsCount = ITERATIONS_COUNT;

            do
            {
                update = await updatesService.GetUniversitiesListUpdate(request.TimeStamp);

                if (update.NeedUpdate)
                {
                    dtos = universitiesService.GetUniversitiesAboveRating(VSU_RATING);
                    break;
                }

                if (iterationsCount == 0)
                {
                    await NoContent().ExecuteResultAsync(ControllerContext);

                    return(null);
                }

                iterationsCount--;
                await Task.Delay(MS_DELAY);
            }while (!update.NeedUpdate);

            return(new LongPollingResponse()
            {
                IsFinished = update.IsFinished,
                TimeStamp = update.TimeStamp,
                Universities = dtos
            });
        }
        public override void Send(
            ITransportListener listener,
            IList <IMutableMessage> messages,
            int requestTimeout = 1200)
        {
            //Console.WriteLine();
            //Console.WriteLine("send({0} message(s))", messages.Count);
            var url = Url;

            if (_appendMessageType && messages.Count == 1 && messages[0].Meta)
            {
                var type = messages[0].Channel.Substring(ChannelFields.META.Length);
                if (url.EndsWith("/"))
                {
                    url = url.Substring(0, url.Length - 1);
                }

                url += type;
            }

            var request = (HttpWebRequest)WebRequest.Create(url);

            request.Method      = "POST";
            request.ContentType = "application/json;charset=UTF-8";

            if (request.CookieContainer == null)
            {
                request.CookieContainer = new CookieContainer();
            }

            request.CookieContainer.Add(GetCookieCollection());

            if (request.Headers == null)
            {
                request.Headers = new WebHeaderCollection();
            }

            request.Headers.Add(GetHeaderCollection());

            var content = JsonConvert.SerializeObject(ObjectConverter.ToListOfDictionary(messages));

            _logger?.LogDebug($"Send: {content}");

            var longPollingRequest = new LongPollingRequest(listener, messages, request, requestTimeout);

            var exchange = new TransportExchange(this, listener, messages, longPollingRequest)
            {
                Content = content,
                Request = request
            };

            lock (this)
            {
                _exchanges.Add(exchange);
            }

            longPollingRequest.Exchange = exchange;
            AddRequest(longPollingRequest);
        }
        public void removeRequest(LongPollingRequest request)
        {
            lock (this)
            {
                transmissions.Remove(request);
            }

            performNextRequest();
        }
        public void addRequest(LongPollingRequest request)
        {
            lock (this)
            {
                transportQueue.Add(request);
            }

            performNextRequest();
        }
        public void RemoveRequest(LongPollingRequest request)
        {
            lock (_lockObject)
            {
                _transmissions.Remove(request);
            }

            PerformNextRequest();
        }
        public void AddRequest(LongPollingRequest request)
        {
            lock (_lockObject)
            {
                _transportQueue.Add(request);
            }

            PerformNextRequest();
        }
 public TransportExchange(LongPollingTransport _parent, ITransportListener _listener, IList <IMutableMessage> _messages,
                          LongPollingRequest _lprequest)
 {
     parent    = _parent;
     listener  = _listener;
     messages  = _messages;
     request   = null;
     lprequest = _lprequest;
     isSending = true;
 }
Example #8
0
 public TransportExchange(LongPollingTransport parent, ITransportListener listener, IList <IMutableMessage> messages,
                          LongPollingRequest lprequest)
 {
     _parent   = parent;
     Listener  = listener;
     Messages  = messages;
     Request   = null;
     LpRequest = lprequest;
     IsSending = true;
 }
        public override void send(ITransportListener listener, IList <IMutableMessage> messages)
        {
            //Console.WriteLine();
            //Console.WriteLine("send({0} message(s))", messages.Count);
            String url = getURL();

            if (_appendMessageType && messages.Count == 1 && messages[0].Meta)
            {
                String type = messages[0].Channel.Substring(Channel_Fields.META.Length);
                if (url.EndsWith("/"))
                {
                    url = url.Substring(0, url.Length - 1);
                }
                url += type;
            }

            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);

            request.Method      = "POST";
            request.ContentType = "application/json;charset=UTF-8";

#if !SILVERLIGHT
            if (request.CookieContainer == null)
            {
                request.CookieContainer = new CookieContainer();
            }
            request.CookieContainer.Add(getCookieCollection());
#endif

#if !SILVERLIGHT
            JavaScriptSerializer jsonParser = new JavaScriptSerializer();
            String content = jsonParser.Serialize(ObjectConverter.ToListOfDictionary(messages));
#endif

#if SILVERLIGHT
            String content = JsonConvert.SerializeObject(ObjectConverter.ToListOfDictionary(messages));
#endif

            LongPollingRequest longPollingRequest = new LongPollingRequest(listener, messages, request);

            TransportExchange exchange = new TransportExchange(this, listener, messages, longPollingRequest);
            exchange.content = content;
            exchange.request = request;
            lock (this)
            {
                _exchanges.Add(exchange);
            }

            longPollingRequest.exchange = exchange;
            addRequest(longPollingRequest);
        }
        private void performNextRequest()
        {
            bool ok = false;
            LongPollingRequest nextRequest = null;

            lock (this)
            {
                if (transportQueue.Count > 0 && transmissions.Count <= 1)
                {
                    ok          = true;
                    nextRequest = transportQueue[0];
                    transportQueue.Remove(nextRequest);
                    transmissions.Add(nextRequest);
                }
            }

            if (ok && nextRequest != null)
            {
                nextRequest.send();
            }
        }
Example #11
0
        private void PerformNextRequest()
        {
            var ok = false;
            LongPollingRequest nextRequest = null;

            lock (this)
            {
                if (_transportQueue.Count > 0 && _transmissions.Count <= 1)
                {
                    ok          = true;
                    nextRequest = _transportQueue[0];
                    _transportQueue.Remove(nextRequest);
                    _transmissions.Add(nextRequest);
                }
            }

            if (ok)
            {
                nextRequest?.Send();
            }
        }
 public TransportExchange(LongPollingTransport _parent, ITransportListener _listener, IList<IMutableMessage> _messages,
         LongPollingRequest _lprequest)
 {
     parent = _parent;
     listener = _listener;
     messages = _messages;
     request = null;
     lprequest = _lprequest;
     isSending = true;
 }
        public override void send(ITransportListener listener, IList<IMutableMessage> messages)
        {
            //Console.WriteLine();
            //Console.WriteLine("send({0} message(s))", messages.Count);
            String url = getURL();

            if (_appendMessageType && messages.Count == 1 && messages[0].Meta)
            {
                String type = messages[0].Channel.Substring(Channel_Fields.META.Length);
                if (url.EndsWith("/"))
                    url = url.Substring(0, url.Length - 1);
                url += type;
            }

            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
            request.Method = "POST";
            request.ContentType = "application/json;charset=UTF-8";

            if (request.CookieContainer == null)
                request.CookieContainer = new CookieContainer();
            request.CookieContainer.Add(getCookieCollection());

            JavaScriptSerializer jsonParser = new JavaScriptSerializer();
            String content = jsonParser.Serialize(ObjectConverter.ToListOfDictionary(messages));

            LongPollingRequest longPollingRequest = new LongPollingRequest(listener, messages, request);

            TransportExchange exchange = new TransportExchange(this, listener, messages, longPollingRequest);
            exchange.content = content;
            exchange.request = request;
            lock (this)
            {
                _exchanges.Add(exchange);
            }

            longPollingRequest.exchange = exchange;
            addRequest(longPollingRequest);
        }
        public void removeRequest(LongPollingRequest request)
        {
            lock (this)
            {
                transmissions.Remove(request);
            }

            performNextRequest();
        }
        public void addRequest(LongPollingRequest request)
        {
            lock (this)
            {
                transportQueue.Add(request);
            }

            performNextRequest();
        }