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, 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 static bool HasAppToken(uint id) => AppTokens.ContainsKey(id);
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); } }