protected void checkReceived(bool handleMultipleRequests = true) { OnDemandData request; lock (mandatoryRequests) { request = (OnDemandData)mandatoryRequests.popFront(); } while (request != null) { HandleOneRequest(request); //If multiple requests aren't to be handled then we should just break here. if (!handleMultipleRequests) { break; } lock (mandatoryRequests) { request = (OnDemandData)mandatoryRequests.popFront(); } } }
private 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(); } } }
public OnDemandData getNextNode() { OnDemandData onDemandData; lock (complete) { onDemandData = (OnDemandData)complete.popFront(); } if (onDemandData == null) { return(null); } lock (nodeSubList) { onDemandData.unlinkCacheable(); } if (onDemandData.buffer == null) { return(onDemandData); } int i = 0; try { GZipStream gzipinputstream = new GZipStream(new MemoryStream(onDemandData.buffer), CompressionMode.Decompress); do { if (i == gzipInputBuffer.Length) { throw new Exception("buffer overflow!"); } int k = gzipinputstream.Read(gzipInputBuffer, i, gzipInputBuffer.Length - i); if (k == -1 || k == 0) //This was causing a hang here, different return value in C#. RS2Sharp made this change, but did not document it. { break; } i += k; } while(true); } catch (Exception _ex) { throw new Exception("error unzipping", _ex); } onDemandData.InitializeBuffer(new byte[i]); System.Buffer.BlockCopy(gzipInputBuffer, 0, onDemandData.buffer, 0, i); return(onDemandData); }
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; } }
private void method568() { while (uncompletedCount == 0 && completedCount < 10) { if (highestPriority == 0) { break; } OnDemandData onDemandData; lock (passiveRequests) { onDemandData = (OnDemandData)passiveRequests.popFront(); } while (onDemandData != null) { if (filePriorities[onDemandData.dataType][onDemandData.id] != 0) { filePriorities[onDemandData.dataType][onDemandData.id] = 0; requested.pushBack(onDemandData); closeRequest(onDemandData); waiting = true; if (filesLoaded < totalFiles) { filesLoaded++; } statusString = "Loading extra files - " + (filesLoaded * 100) / totalFiles + "%"; completedCount++; if (completedCount == 10) { return; } } lock (passiveRequests) { onDemandData = (OnDemandData)passiveRequests.popFront(); } } for (int j = 0; j < 4; j++) { byte[] abyte0 = filePriorities[j]; int k = abyte0.Length; for (int l = 0; l < k; l++) { if (abyte0[l] == highestPriority) { abyte0[l] = 0; OnDemandData onDemandData_1 = new OnDemandData(); onDemandData_1.dataType = j; onDemandData_1.id = l; onDemandData_1.incomplete = false; requested.pushBack(onDemandData_1); closeRequest(onDemandData_1); waiting = true; if (filesLoaded < totalFiles) { filesLoaded++; } statusString = "Loading extra files - " + (filesLoaded * 100) / totalFiles + "%"; completedCount++; if (completedCount == 10) { return; } } } } highestPriority--; } }