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); } } } }
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); } }
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(); } } }
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; } }
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); } }