Exemple #1
0
        private const int RETRYCOUNTERCOUNT = 5;               // 5 retries per chunk

        public void Execute()
        {
            // Create a request for the URL.
            //string requestStr = "http://online-live1.services.u-blox.com/GetOnlineData.ashx?token=hKeEq-6GYkOIoPGNWt1z9w;gnss=gps,glo;datatype=alm";
            string     requestStr = "http://online-live1.services.u-blox.com/GetOnlineData.ashx?token=hKeEq-6GYkOIoPGNWt1z9w;gnss=gps,glo;datatype=eph,alm";
            WebRequest request    = WebRequest.Create(requestStr);
            // Get the response.
            WebResponse response   = request.GetResponse();
            string      status     = ((HttpWebResponse)response).StatusDescription;
            Stream      dataStream = response.GetResponseStream();

            // convert to byte array
            MemoryStream ms = new MemoryStream();

            dataStream.CopyTo(ms);
            byte[] array = ms.ToArray();
            ms.Close();
            response.Close();

            // TEST
            //FileStream f = new FileStream("miki.bin", FileMode.Create);
            //f.Write(array, 0, array.Length);
            //f.Close();

            AssistArray = array;
            assistPhase = eAssistPhase.START;
        }
Exemple #2
0
        public byte[] Update(int nextChunkToSend)
        {
            byte[] toSend = null;

            switch (assistPhase)
            {
            case eAssistPhase.IDLE:
                // do nothing
                break;

            case eAssistPhase.START:
                // Init transfer
                ChunkIndex   = 0;
                RetryCounter = RETRYCOUNTERCOUNT;
                assistPhase  = eAssistPhase.SENDCHUNK;
                break;

            case eAssistPhase.SENDCHUNK:
                // send chunk
                int numOfChunks = (int)Math.Ceiling((double)AssistArray.Length / BYTESPERCHUNK);
                if (ChunkIndex < numOfChunks)
                {
                    toSend      = SendChunk(ChunkIndex);
                    RetryTimer  = RETRYTIMERCOUNT;
                    assistPhase = eAssistPhase.WAIT;
                }
                else
                {
                    // DONE
                    assistPhase = eAssistPhase.END;
                }
                break;

            case eAssistPhase.WAIT:
                if (nextChunkToSend == (ChunkIndex + 1))  // chunk processed?
                {
                    // send next
                    ChunkIndex++;
                    RetryCounter = RETRYCOUNTERCOUNT;
                    assistPhase  = eAssistPhase.SENDCHUNK;
                }
                else if (--RetryTimer <= 0)
                {
                    RetryCounter--;
                    if (RetryCounter >= 0)
                    {
                        // resend
                        assistPhase = eAssistPhase.SENDCHUNK;
                    }
                    else
                    {
                        // error/fail
                        assistPhase = eAssistPhase.FAIL;
                    }
                }
                break;

            case eAssistPhase.END:
                // DONE
                break;


            case eAssistPhase.FAIL:
                // error
                break;
            }

            return(toSend);
        }