예제 #1
0
        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); });
        }
예제 #2
0
        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);
        }
예제 #3
0
            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);
            }
예제 #4
0
        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); });
        }
예제 #5
0
        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);
            }
        }