Пример #1
0
 private void HandleOneRequest(OnDemandData request)
 {
     waiting = true;
     byte[] data = null;
     if (clientInstance.caches[0] != null)
     {
         data = clientInstance.caches[request.dataType + 1].decompress((int)request.id);
     }
     if (!crcMatches(versions[request.dataType][request.id],
                     crcs[request.dataType][request.id], data))
     {
         data = null;
     }
     lock (mandatoryRequests)
     {
         if (data == null)
         {
             unrequested.pushBack(request);
         }
         else
         {
             request.InitializeBuffer(data);
             lock (complete)
             {
                 complete.pushBack(request);
             }
         }
     }
 }
Пример #2
0
        public void passiveRequest(int id, int type)
        {
            if (clientInstance.caches[0] == null)
            {
                return;
            }
            if (versions[type][id] == 0)
            {
                return;
            }
            if (filePriorities[type][id] == 0)
            {
                return;
            }
            if (highestPriority == 0)
            {
                return;
            }
            OnDemandData onDemandData = new OnDemandData();

            onDemandData.dataType   = type;
            onDemandData.id         = id;
            onDemandData.incomplete = false;
            lock (passiveRequests)
            {
                passiveRequests.pushBack(onDemandData);
            }
        }
Пример #3
0
        protected void checkReceived()
        {
            OnDemandData request;

            lock (mandatoryRequests)
            {
                request = (OnDemandData)mandatoryRequests.popFront();
            }

            while (request != null)
            {
                waiting = true;
                byte[] data = null;
                if (clientInstance.caches[0] != null)
                {
                    data = clientInstance.caches[request.dataType + 1].decompress((int)request.id);
                }
                if (!crcMatches(versions[request.dataType][request.id],
                                crcs[request.dataType][request.id], data))
                {
                    data = null;
                }
                lock (mandatoryRequests)
                {
                    if (data == null)
                    {
                        unrequested.pushBack(request);
                    }
                    else
                    {
                        request.InitializeBuffer(data);
                        lock (complete)
                        {
                            complete.pushBack(request);
                        }
                    }

                    request = (OnDemandData)mandatoryRequests.popFront();
                }
            }
        }
Пример #4
0
        private void handleFailed()
        {
            uncompletedCount = 0;
            completedCount   = 0;
            for (OnDemandData onDemandData = (OnDemandData)requested
                                             .peekFront();
                 onDemandData != null;
                 onDemandData = (OnDemandData)requested.getPrevious())
            {
                if (onDemandData.incomplete)
                {
                    uncompletedCount++;
                }
                else
                {
                    completedCount++;
                }
            }

            while (uncompletedCount < 10)
            {
                OnDemandData onDemandData_1 = (OnDemandData)unrequested.popFront();
                if (onDemandData_1 == null)
                {
                    break;
                }
                if (filePriorities[onDemandData_1.dataType][onDemandData_1.id] != 0)
                {
                    filesLoaded++;
                }
                filePriorities[onDemandData_1.dataType][onDemandData_1.id] = 0;
                requested.pushBack(onDemandData_1);
                uncompletedCount++;
                closeRequest(onDemandData_1);
                waiting = true;
            }
        }
Пример #5
0
        public void request(int i, int j)
        {
            if (i < 0 || i > versions.Length || j < 0 || j > versions[i].Length)
            {
                throw new InvalidOperationException($"Failed to request map chunk: {i},{j}");
            }

            if (versions[i][j] == 0)
            {
                throw new InvalidOperationException($"Failed to request map chunk: {i},{j} Versions are 0");
            }

            lock (nodeSubList)
            {
                for (OnDemandData onDemandData = (OnDemandData)nodeSubList
                                                 .peek();
                     onDemandData != null;
                     onDemandData = (OnDemandData)nodeSubList
                                    .getNext())
                {
                    if (onDemandData.dataType == i && onDemandData.id == j)
                    {
                        return;
                    }
                }

                OnDemandData onDemandData_1 = new OnDemandData();
                onDemandData_1.dataType   = i;
                onDemandData_1.id         = j;
                onDemandData_1.incomplete = true;
                lock (mandatoryRequests)
                {
                    mandatoryRequests.pushBack(onDemandData_1);
                }

                nodeSubList.push(onDemandData_1);
            }
        }