private static void OnCDNAuthTokenCallback(SteamApps.CDNAuthTokenCallback callback, JobID jobID) { ManifestJob request; lock (ManifestJobs) { request = ManifestJobs.Find(r => r.JobID == jobID); } if (request == null) { return; } if (callback.Result != EResult.OK) { lock (ManifestJobs) { ManifestJobs.Remove(request); } return; } request.CDNToken = callback.Token; request.JobID = Steam.Instance.Apps.GetDepotDecryptionKey(request.DepotID, request.ParentAppID); }
private void OnCDNAuthTokenCallback(SteamApps.CDNAuthTokenCallback callback) { JobAction job; if (!JobManager.TryRemoveJob(callback.JobID, out job)) { return; } var request = job.ManifestJob; if (callback.Result != EResult.OK) { if (FileDownloader.IsImportantDepot(request.DepotID)) { Log.WriteError("Depot Processor", "Failed to get CDN auth token for depot {0} (parent {1} - server {2}) - {3} (#{4})", request.DepotID, request.ParentAppID, request.Server, callback.Result, request.Tries); } if (--request.Tries >= 0) { request.Server = GetContentServer(request.Tries); JobManager.AddJob(() => Steam.Instance.Apps.GetCDNAuthToken(request.DepotID, request.Server), request); return; } RemoveLock(request.DepotID); return; } request.CDNToken = callback.Token; // TODO: Using tasks makes every manifest download timeout // TODO: which seems to be bug with mono's threadpool implementation /*TaskManager.Run(() => DownloadManifest(request)).ContinueWith(task => * { * RemoveLock(request.DepotID); * * Log.WriteDebug("Depot Processor", "Processed depot {0} ({1} depot locks left)", request.DepotID, DepotLocks.Count); * });*/ try { DownloadManifest(request); } catch (Exception) { RemoveLock(request.DepotID); } }