public void RequestPackageInfo(IEnumerable <uint> packageIds) { List <uint> packages = packageIds.ToList(); packages.RemoveAll(pid => PackageInfo.ContainsKey(pid)); if (packages.Count == 0 || bAborted) { return; } bool completed = false; Action <SteamApps.PICSProductInfoCallback> cbMethod = (packageInfo) => { completed = !packageInfo.ResponsePending; foreach (var package_value in packageInfo.Packages) { var package = package_value.Value; PackageInfo[package.ID] = package; } foreach (var package in packageInfo.UnknownPackages) { PackageInfo[package] = null; } }; var packageRequests = new List <SteamApps.PICSRequest>(); foreach (var package in packages) { var request = new SteamApps.PICSRequest(package); if (PackageTokens.TryGetValue(package, out var token)) { request.AccessToken = token; request.Public = false; } packageRequests.Add(request); } WaitUntilCallback(() => { callbacks.Subscribe(steamApps.PICSGetProductInfo(new List <SteamApps.PICSRequest>(), packageRequests), cbMethod); }, () => { return(completed); }); }
private Task <bool> RequestPICSProductInfo(uint appId) { var tsc = new TaskCompletionSource <bool>(); SteamApps.PICSRequest request = new SteamApps.PICSRequest(appId); if (AppTokens.ContainsKey(appId)) { request.AccessToken = AppTokens[appId]; request.Public = false; } IDisposable subscription = null; Action <SteamApps.PICSProductInfoCallback> cbMethod = (appInfo) => { subscription.Dispose(); foreach (var app_value in appInfo.Apps) { var app = app_value.Value; DebugLog.WriteLine("Steam3Session", "Got AppInfo for " + app.ID); if (AppInfo.ContainsKey(app.ID)) { DebugLog.WriteLine("Steam3Session", "AppInfo already stored " + app.ID); continue; } AppInfo.Add(app.ID, app); } foreach (var app in appInfo.UnknownApps) { AppInfo.Add(app, null); } DebugLog.WriteLine("Steam3Session", "Response pending: " + appInfo.ResponsePending); tsc.SetResult(!appInfo.ResponsePending); }; subscription = callbacks.Subscribe(steamApps.PICSGetProductInfo(new List <SteamApps.PICSRequest>() { request }, new List <SteamApps.PICSRequest>() { }), cbMethod); return(tsc.Task); }
public void RequestAppInfo(uint appid, AppCallback callback) { // Callback for Application Information Action <SteamApps.PICSProductInfoCallback> AppCallback = (appinfo) => { var returnData = appinfo.Apps.Where(x => x.Key == appid); if (returnData.Count() == 1) { // Return successful data callback(returnData.First().Value); return; } callback(null); }; // Callback for Token Action <SteamApps.PICSTokensCallback> TokenCallback = (apptoken) => { // Check if our token was returned var ourToken = apptoken.AppTokens.Where(x => x.Key == appid); if (ourToken.Count() != 1) { return; } // Use our token to request the app information var Request = new SteamApps.PICSRequest(appid) { AccessToken = ourToken.First().Value, Public = false }; _CManager.Subscribe(_Apps.PICSGetProductInfo(new List <SteamApps.PICSRequest>() { Request }, new List <SteamApps.PICSRequest>()), AppCallback); }; // Fire Token Callback _CManager.Subscribe(_Apps.PICSGetAccessTokens(new List <uint>() { appid }, new List <uint>()), TokenCallback); }
public void RequestAppInfo(uint appId, bool bForce = false) { if ((AppInfo.ContainsKey(appId) && !bForce) || bAborted) { return; } bool completed = false; Action <SteamApps.PICSTokensCallback> cbMethodTokens = (appTokens) => { completed = true; if (appTokens.AppTokensDenied.Contains(appId)) { Log.Info("Insufficient privileges to get access token for app {0}", appId); } foreach (var token_dict in appTokens.AppTokens) { this.AppTokens[token_dict.Key] = token_dict.Value; } }; WaitUntilCallback(() => { callbacks.Subscribe(steamApps.PICSGetAccessTokens(new List <uint>() { appId }, new List <uint>() { }), cbMethodTokens); }, () => { return(completed); }); completed = false; Action <SteamApps.PICSProductInfoCallback> cbMethod = (appInfo) => { completed = !appInfo.ResponsePending; foreach (var app_value in appInfo.Apps) { var app = app_value.Value; Log.Info("Got AppInfo for {0}", app.ID); AppInfo[app.ID] = app; } foreach (var app in appInfo.UnknownApps) { AppInfo[app] = null; } }; SteamApps.PICSRequest request = new SteamApps.PICSRequest(appId); if (AppTokens.ContainsKey(appId)) { request.AccessToken = AppTokens[appId]; request.Public = false; } WaitUntilCallback(() => { callbacks.Subscribe(steamApps.PICSGetProductInfo(new List <SteamApps.PICSRequest>() { request }, new List <SteamApps.PICSRequest>() { }), cbMethod); }, () => { return(completed); }); }
public void RequestAppInfo(uint appId) { if (AppInfo.ContainsKey(appId) || bAborted) { return; } Action <SteamApps.PICSTokensCallback, JobID> cbMethodTokens = (appTokens, jobId) => { if (appTokens.AppTokensDenied.Contains(appId)) { Console.WriteLine("Insufficient privileges to get access token for app {0}", appId); } foreach (var token_dict in appTokens.AppTokens) { this.AppTokens.Add(token_dict.Key, token_dict.Value); } }; using (JobCallback <SteamApps.PICSTokensCallback> appTokensCallback = new JobCallback <SteamApps.PICSTokensCallback>(cbMethodTokens, callbacks, steamApps.PICSGetAccessTokens(new List <uint>() { appId }, new List <uint>() { }))) { do { WaitForCallbacks(); }while (!appTokensCallback.Completed && !bAborted); } Action <SteamApps.PICSProductInfoCallback, JobID> cbMethod = (appInfo, jobId) => { Debug.Assert(appInfo.ResponsePending == false); foreach (var app_value in appInfo.Apps) { var app = app_value.Value; Console.WriteLine("Got AppInfo for {0}", app.ID); AppInfo.Add(app.ID, app); } foreach (var app in appInfo.UnknownApps) { AppInfo.Add(app, null); } }; SteamApps.PICSRequest request = new SteamApps.PICSRequest(appId); if (AppTokens.ContainsKey(appId)) { request.AccessToken = AppTokens[appId]; request.Public = false; } using (JobCallback <SteamApps.PICSProductInfoCallback> appInfoCallback = new JobCallback <SteamApps.PICSProductInfoCallback>(cbMethod, callbacks, steamApps.PICSGetProductInfo(new List <SteamApps.PICSRequest>() { request }, new List <SteamApps.PICSRequest>() { }))) { do { WaitForCallbacks(); }while (!appInfoCallback.Completed && !bAborted); } }