Ejemplo n.º 1
0
        public void RequestDepotKey(uint depotId, uint appid = 0)
        {
            if (DepotKeys.ContainsKey(depotId) || bAborted)
            {
                return;
            }

            Action <SteamApps.DepotKeyCallback, JobID> cbMethod = (depotKey, jobId) =>
            {
                Console.WriteLine("Got depot key for {0} result: {1}", depotKey.DepotID, depotKey.Result);

                if (depotKey.Result != EResult.OK)
                {
                    Abort();
                    return;
                }

                DepotKeys[depotKey.DepotID] = depotKey.DepotKey;
            };

            using (var depotKeyCallback = new JobCallback <SteamApps.DepotKeyCallback>(cbMethod, callbacks, steamApps.GetDepotDecryptionKey(depotId, appid)))
            {
                do
                {
                    WaitForCallbacks();
                }while (!depotKeyCallback.Completed && !bAborted);
            }
        }
Ejemplo n.º 2
0
    /// <summary>
    /// Creates a job. Only to be called on the main thread.
    /// </summary>
    /// <param name="action">The function to be run in the background thread.</param>
    /// <param name="callback">The callback to be called once the job is completed.</param>
    /// <typeparam name="T">The type of the data returned by the job.</typeparam>
    public static void CreateJob <T>(Func <T> action, JobCallback <T> callback)
    {
#if UNITY_WEBGL && !UNITY_EDITOR
        callback(false, action());
#else
        if (Application.isPlaying)
        {
            if (_instance == null)
            {
                GameObject go = GameObject.Find("Gridlike");
                if (go == null)
                {
                    go = new GameObject("Gridlike");
                }

                ThreadManager man = go.AddComponent <ThreadManager> ();
                _instance       = man;
                _instanceExists = true;
                _mainThread     = Thread.CurrentThread;
            }

            Job <T> job = new Job <T>();

            job.OnComplete(callback);

            job.Process(action);
        }
        else
        {
            callback(false, action());
        }
#endif
    }
Ejemplo n.º 3
0
    /// <summary>
    /// Adds a new callback to invoke if the job is completed successfully or has an error.
    /// </summary>
    /// <param name="callback">The callback to invoke.</param>
    /// <returns>The job so additional calls can be chained together.</returns>
    public IJob <T> OnComplete(JobCallback <T> callback)
    {
        if (_state == JobState.Success)
        {
            if (ThreadManager.isMainThread)
            {
                callback(false, value);
            }
            else
            {
                ThreadManager.InvokeAsync(() => callback(false, value));
            }
        }
        else if (_state == JobState.Error)
        {
            if (ThreadManager.isMainThread)
            {
                callback(true, value);
            }
            else
            {
                ThreadManager.InvokeAsync(() => callback(true, value));
            }
        }
        else
        {
            this.callback = callback;
        }

        return(this);
    }
Ejemplo n.º 4
0
        public void RequestPackageInfo(IEnumerable <uint> packageIds)
        {
            List <uint> packages = packageIds.ToList();

            packages.RemoveAll(pid => PackageInfo.ContainsKey(pid));

            if (packages.Count == 0 || bAborted)
            {
                return;
            }

            Action <SteamApps.PICSProductInfoCallback, JobID> cbMethod = (packageInfo, jobId) =>
            {
                Debug.Assert(packageInfo.ResponsePending == false);

                foreach (var package_value in packageInfo.Packages)
                {
                    var package = package_value.Value;
                    PackageInfo.Add(package.ID, package);
                }

                foreach (var package in packageInfo.UnknownPackages)
                {
                    PackageInfo.Add(package, null);
                }
            };

            using (JobCallback <SteamApps.PICSProductInfoCallback> packageInfoCallback = new JobCallback <SteamApps.PICSProductInfoCallback>(cbMethod, callbacks, steamApps.PICSGetProductInfo(new List <uint>(), packages)))
            {
                do
                {
                    WaitForCallbacks();
                }while (!packageInfoCallback.Completed && !bAborted);
            }
        }
Ejemplo n.º 5
0
        public void RequestAppTicket(uint appId)
        {
            if (AppTickets.ContainsKey(appId) || bAborted)
            {
                return;
            }

            Action <SteamApps.AppOwnershipTicketCallback, JobID> cbMethod = (appTicket, jobId) =>
            {
                if (appTicket.Result != EResult.OK)
                {
                    Console.WriteLine("Unable to get appticket for {0}: {1}", appTicket.AppID, appTicket.Result);
                    Abort();
                }
                else
                {
                    Console.WriteLine("Got appticket for {0}!", appTicket.AppID);
                    AppTickets[appTicket.AppID] = appTicket.Ticket;
                }
            };

            using (JobCallback <SteamApps.AppOwnershipTicketCallback> appTicketCallback = new JobCallback <SteamApps.AppOwnershipTicketCallback>(cbMethod, callbacks, steamApps.GetAppOwnershipTicket(appId)))
            {
                do
                {
                    WaitForCallbacks();
                }while (!appTicketCallback.Completed && !bAborted);
            }
        }
Ejemplo n.º 6
0
        public void RequestPackageInfo(uint packageId)
        {
            if (PackageInfo.ContainsKey(packageId))
            {
                return;
            }

            if (packageInfoCallback != null)
            {
                do
                {
                    WaitForCallbacks();
                }while (!packageInfoCallback.Completed && !bAborted);

                if (PackageInfo.ContainsKey(packageId))
                {
                    return;
                }
            }

            using (var singlePackageInfoCallback = new JobCallback <SteamApps.PackageInfoCallback>(PackageInfoCallback, callbacks, steamApps.GetPackageInfo(packageId)))
            {
                do
                {
                    WaitForCallbacks();
                }while (!singlePackageInfoCallback.Completed && !bAborted);
            }
        }
        internal static void QueueParseJob(ProjectDom db, JobCallback callback, string file)
        {
            ParsingJob job = new ParsingJob();

            job.ParseCallback = callback;
            job.File          = file;
            job.Database      = db;
            lock (parseQueueLock)
            {
                RemoveParseJob(file);
                parseQueueIndex [file] = job;
                parseQueue.Enqueue(job);
                parseEvent.Set();

                if (parseQueueIndex.Count == 1)
                {
                    queueEmptied.Reset();
                }
            }
        }
Ejemplo n.º 8
0
        private void LicenseListCallback(SteamApps.LicenseListCallback licenseList)
        {
            if (licenseList.Result != EResult.OK)
            {
                Console.WriteLine("Unable to get license list: {0} ", licenseList.Result);
                Abort();

                return;
            }

            Console.WriteLine("Got {0} licenses for account!", licenseList.LicenseList.Count);
            Licenses = licenseList.LicenseList;

            IEnumerable <uint> licenseQuery = Licenses.Select(lic =>
            {
                return(lic.PackageID);
            });

            Console.WriteLine("Licenses: {0}", string.Join(", ", licenseQuery));

            packageInfoCallback = new JobCallback <SteamApps.PackageInfoCallback>(PackageInfoCallback, callbacks, steamApps.GetPackageInfo(licenseQuery));
        }
Ejemplo n.º 9
0
        public void RequestAppInfo(uint appId)
        {
            if (AppInfo.ContainsKey(appId) || bAborted)
            {
                return;
            }

            Action <SteamApps.AppInfoCallback, JobID> cbMethod = (appInfo, jobId) =>
            {
                foreach (var app in appInfo.Apps)
                {
                    Console.WriteLine("Got AppInfo for {0}: {1}", app.AppID, app.Status);
                    AppInfo.Add(app.AppID, app);

                    if (app.Status == SteamApps.AppInfoCallback.App.AppInfoStatus.Unknown)
                    {
                        continue;
                    }

                    KeyValue depots;
                    if (app.Sections.TryGetValue(EAppInfoSection.Depots, out depots))
                    {
                        if (depots[app.AppID.ToString()]["OverridesCDDB"].AsBoolean(false))
                        {
                            AppInfoOverridesCDR[app.AppID] = true;
                        }
                    }
                }
            };

            using (JobCallback <SteamApps.AppInfoCallback> appInfoCallback = new JobCallback <SteamApps.AppInfoCallback>(cbMethod, callbacks, steamApps.GetAppInfo(appId)))
            {
                do
                {
                    WaitForCallbacks();
                }while (!appInfoCallback.Completed && !bAborted);
            }
        }
Ejemplo n.º 10
0
        public void RequestAppTicket(uint appId)
        {
            if (AppTickets.ContainsKey(appId) || bAborted)
                return;

            Action<SteamApps.AppOwnershipTicketCallback, ulong> cbMethod = (appTicket, jobId) =>
            {
                if (appTicket.Result != EResult.OK)
                {
                    Console.WriteLine("Unable to get appticket for {0}: {1}", appTicket.AppID, appTicket.Result);
                    Abort();
                }
                else
                {
                    Console.WriteLine("Got appticket for {0}!", appTicket.AppID);
                    AppTickets[appTicket.AppID] = appTicket.Ticket;
                }
            };

            using (JobCallback<SteamApps.AppOwnershipTicketCallback> appTicketCallback = new JobCallback<SteamApps.AppOwnershipTicketCallback>(cbMethod, callbacks, steamApps.GetAppOwnershipTicket(appId)))
            {
                do
                {
                    WaitForCallbacks();
                }
                while (!appTicketCallback.Completed && !bAborted);
            }
        }
Ejemplo n.º 11
0
        public void RequestAppInfo(uint appId)
        {
            if (AppInfo.ContainsKey(appId) || bAborted)
                return;

            Action<SteamApps.AppInfoCallback, ulong> cbMethod = (appInfo, jobId) =>
            {
                foreach (var app in appInfo.Apps)
                {
                    Console.WriteLine("Got AppInfo for {0}: {1}", app.AppID, app.Status);
                    AppInfo.Add(app.AppID, app);

                    KeyValue depots;
                    if (app.Sections.TryGetValue(EAppInfoSection.Depots, out depots))
                    {
                        if (depots[app.AppID.ToString()]["OverridesCDDB"].AsBoolean(false))
                        {
                            AppInfoOverridesCDR[app.AppID] = true;
                        }
                    }
                }
            };

            using (JobCallback<SteamApps.AppInfoCallback> appInfoCallback = new JobCallback<SteamApps.AppInfoCallback>(cbMethod, callbacks, steamApps.GetAppInfo(appId)))
            {
                do
                {
                    WaitForCallbacks();
                }
                while (!appInfoCallback.Completed && !bAborted);
            }
        }
Ejemplo n.º 12
0
        public void RequestPackageInfo(IEnumerable<uint> packageIds)
        {
            List<uint> packages = packageIds.ToList();
            packages.RemoveAll(pid => PackageInfo.ContainsKey(pid));

            if (packages.Count == 0 || bAborted)
                return;

            Action<SteamApps.PICSProductInfoCallback, JobID> cbMethod = (packageInfo, jobId) =>
            {
                Debug.Assert( packageInfo.ResponsePending == false );

                foreach (var package_value in packageInfo.Packages)
                {
                    var package = package_value.Value;
                    PackageInfo.Add(package.ID, package);
                }

                foreach (var package in packageInfo.UnknownPackages)
                {
                    PackageInfo.Add(package, null);
                }
            };

            using (JobCallback<SteamApps.PICSProductInfoCallback> packageInfoCallback = new JobCallback<SteamApps.PICSProductInfoCallback>(cbMethod, callbacks, steamApps.PICSGetProductInfo(new List<uint>(), packages)))
            {
                do
                {
                    WaitForCallbacks();
                }
                while (!packageInfoCallback.Completed && !bAborted);
            }
        }
Ejemplo n.º 13
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);

                    KeyValue depots = ContentDownloader.GetSteam3AppSection((int)app.ID, EAppInfoSection.Depots);
                    if (depots != null)
                    {
                        if (depots["OverridesCDDB"].AsBoolean(false))
                        {
                            AppInfoOverridesCDR[app.ID] = true;
                        }
                    }
                }

                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);
            }
        }
Ejemplo n.º 14
0
        private void LicenseListCallback(SteamApps.LicenseListCallback licenseList)
        {
            if (licenseList.Result != EResult.OK)
            {
                Console.WriteLine("Unable to get license list: {0} ", licenseList.Result);
                Abort();

                return;
            }

            Console.WriteLine("Got {0} licenses for account!", licenseList.LicenseList.Count);
            Licenses = licenseList.LicenseList;

            IEnumerable<uint> licenseQuery = Licenses.Select(lic =>
            {
                return lic.PackageID;
            });

            Console.WriteLine("Licenses: {0}", string.Join(", ", licenseQuery));

            packageInfoCallback = new JobCallback<SteamApps.PackageInfoCallback>(PackageInfoCallback, callbacks, steamApps.GetPackageInfo(licenseQuery));
        }
 internal void QueueParseJob(JobCallback callback, object data)
 {
     ParsingJob job = new ParsingJob ();
     job.ParseCallback = callback;
     job.Data = data;
     lock (parseQueue)
     {
         parseQueue.Enqueue (job);
         parseEvent.Set ();
     }
 }
		internal static void QueueParseJob (ProjectDom db, JobCallback callback, string file)
		{
			ParsingJob job = new ParsingJob ();
			job.ParseCallback = callback;
			job.File = file;
			job.Database = db;
			lock (parseQueueLock)
			{
				RemoveParseJob (file);
				parseQueueIndex [file] = job;
				parseQueue.Enqueue (job);
				parseEvent.Set ();
				
				if (parseQueueIndex.Count == 1)
					queueEmptied.Reset ();
			}
		}
Ejemplo n.º 17
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);
            }
        }
Ejemplo n.º 18
0
        public void RequestDepotKey(uint depotId, uint appid = 0)
        {
            if (DepotKeys.ContainsKey(depotId) || bAborted)
                return;

            Action<SteamApps.DepotKeyCallback, ulong> cbMethod = (depotKey, jobId) =>
            {
                Console.WriteLine("Got depot key for {0} result: {1}", depotKey.DepotID, depotKey.Result);

                if (depotKey.Result != EResult.OK)
                {
                    Abort();
                    return;
                }

                DepotKeys[depotKey.DepotID] = depotKey.DepotKey;
            };

            using ( var depotKeyCallback = new JobCallback<SteamApps.DepotKeyCallback>( cbMethod, callbacks, steamApps.GetDepotDecryptionKey( depotId, appid ) ) )
            {
                do
                {
                    WaitForCallbacks();
                }
                while ( !depotKeyCallback.Completed && !bAborted );
            }
        }
Ejemplo n.º 19
0
 public JobManager(JobCallback callback, JobUnitCallback jobUnitCallback)
 {
     this.callback        = callback;
     this.jobUnitCallback = jobUnitCallback;
 }
Ejemplo n.º 20
0
        public void RequestPackageInfo(uint packageId)
        {
            if (PackageInfo.ContainsKey(packageId))
                return;

            if (packageInfoCallback != null)
            {
                do
                {
                    WaitForCallbacks();
                }
                while (!packageInfoCallback.Completed && !bAborted);

                if (PackageInfo.ContainsKey(packageId))
                    return;
            }

            using (var singlePackageInfoCallback = new JobCallback<SteamApps.PackageInfoCallback>(PackageInfoCallback, callbacks, steamApps.GetPackageInfo(packageId)))
            {
                do
                {
                    WaitForCallbacks();
                }
                while (!singlePackageInfoCallback.Completed && !bAborted);
            }
        }