internal static void Unregister(SteamAPICall_t asyncCall, CallResult cr)
 {
     lock (m_sync) {
         List <CallResult> callResultsList;
         if (m_registeredCallResults.TryGetValue((ulong)asyncCall, out callResultsList))
         {
             callResultsList.Remove(cr);
             if (callResultsList.Count == 0)
             {
                 m_registeredCallResults.Remove((ulong)asyncCall);
             }
         }
     }
 }
 internal static void Unregister(SteamAPICall_t asyncCall, CallResult cr)
 {
     lock (m_sync)
     {
         if (m_registeredCallResults.TryGetValue((ulong)asyncCall, out var value))
         {
             value.Remove(cr);
             if (value.Count == 0)
             {
                 m_registeredCallResults.Remove((ulong)asyncCall);
             }
         }
     }
 }
Exemple #3
0
        public static Task <RemoteStorageSubscribePublishedFileResult> SubscribeItemAsync(PublishedFileId item)
        {
            var tcs  = new TaskCompletionSource <RemoteStorageSubscribePublishedFileResult>();
            var call = SubscribeItem(item);

            var result = new CallResult <RemoteStorageSubscribePublishedFileResult>((t, failure) =>
            {
                tcs.SetResult(t);
            });

            result.Set(call);

            return(tcs.Task);
        }
Exemple #4
0
 public void Set(SteamAPICall_t hAPICall, CallResult <T> .APIDispatchDelegate func = null)
 {
     if (func != null)
     {
         this.m_Func = func;
     }
     if (this.m_Func == null)
     {
         throw new Exception("CallResult function was null, you must either set it in the CallResult Constructor or in Set()");
     }
     if (this.m_hAPICall != SteamAPICall_t.Invalid)
     {
         NativeMethods.SteamAPI_UnregisterCallResult(this.m_pCCallbackBase.AddrOfPinnedObject(), (ulong)this.m_hAPICall);
     }
     this.m_hAPICall = hAPICall;
     if (hAPICall != SteamAPICall_t.Invalid)
     {
         NativeMethods.SteamAPI_RegisterCallResult(this.m_pCCallbackBase.AddrOfPinnedObject(), (ulong)hAPICall);
     }
 }
Exemple #5
0
        public static Task <SteamUGCDetails[]> QueryAllUGCAsync(UGCQuery eQueryType, MatchingUGCType eMatchingeMatchingUGCTypeFileType, AppId creatorAppId, AppId consumerAppId, uint unPage)
        {
            var tcs         = new TaskCompletionSource <SteamUGCDetails[]>();
            var queryHandle = SteamUGC.CreateQueryAllUGCRequest(eQueryType, eMatchingeMatchingUGCTypeFileType, creatorAppId, consumerAppId, unPage);

            var call = SteamUGC.SendQueryUGCRequest(queryHandle);

            var callback = new CallResult <SteamUGCQueryCompleted>();

            callback.Set(call, (a, b) =>
            {
                var results = new SteamUGCDetails[a.ResultsCount];
                for (uint i = 0; i < a.ResultsCount; i++)
                {
                    SteamUGCDetails details;
                    GetQueryUGCResult(queryHandle, i, out details);
                    results[i] = details;
                }
                tcs.SetResult(results);
            });

            return(tcs.Task);
        }
Exemple #6
0
 public static CallResult <T> Create(CallResult <T> .APIDispatchDelegate func = null)
 {
     return(new CallResult <T>(func));
 }
Exemple #7
0
 public CallResult(CallResult <T> .APIDispatchDelegate func = null)
 {
     this.m_Func = func;
     this.BuildCCallbackBase();
 }
Exemple #8
0
    private IEnumerator UpdateLeaderboard(int timeInMilliseconds, string leaderboardName)
    {
        Debug.Log("updating leaderboard");
        if (!SteamManager.Initialized)
        {
            Debug.Log("steammanager not initialized");
            yield break;
        }

        bool findLeaderboardCallCompleted = false;
        bool error = false;
        bool uploadedScoreCallCompleted = false;

        Steamworks.SteamLeaderboard_t         speedrunLeaderboard = new Steamworks.SteamLeaderboard_t();
        Steamworks.LeaderboardScoreUploaded_t leaderboardScore    = new Steamworks.LeaderboardScoreUploaded_t();

        Steamworks.SteamAPICall_t speedrunLeaderboardSearch = Steamworks.SteamUserStats.FindLeaderboard(leaderboardName);
        Steamworks.CallResult <Steamworks.LeaderboardFindResult_t> findLeaderboardCallResult = Steamworks.CallResult <Steamworks.LeaderboardFindResult_t> .Create();

        findLeaderboardCallResult.Set(speedrunLeaderboardSearch, (leaderboardFindResult, failure) =>
        {
            if (!failure && leaderboardFindResult.m_bLeaderboardFound == 1)
            {
                speedrunLeaderboard = leaderboardFindResult.m_hSteamLeaderboard;
                Debug.Log("speedrunLeaderboard found");
            }
            else
            {
                error = true;
            }

            findLeaderboardCallCompleted = true;
        });

        while (!findLeaderboardCallCompleted)
        {
            yield return(null);
        }

        if (error)
        {
            Debug.Log("Error finding High Score leaderboard.");
            yield break;
        }

        Steamworks.SteamAPICall_t uploadedScoreCall = Steamworks.SteamUserStats.UploadLeaderboardScore(speedrunLeaderboard, Steamworks.ELeaderboardUploadScoreMethod.k_ELeaderboardUploadScoreMethodKeepBest, timeInMilliseconds, new int[0], 0);
        Steamworks.CallResult <Steamworks.LeaderboardScoreUploaded_t> leaderboardScoreUploadedCallResult = Steamworks.CallResult <Steamworks.LeaderboardScoreUploaded_t> .Create();

        leaderboardScoreUploadedCallResult.Set(uploadedScoreCall, (scoreUploadedResult, failure) =>
        {
            if (!failure && scoreUploadedResult.m_bSuccess == 1)
            {
                leaderboardScore = scoreUploadedResult;
                Debug.Log("leaderboardScore found");
            }
            else
            {
                error = true;
            }

            uploadedScoreCallCompleted = true;
        });

        while (!uploadedScoreCallCompleted)
        {
            yield return(null);
        }

        if (error)
        {
            Debug.Log("Error uploading to High Score leaderboard.");
            yield break;
        }

        if (leaderboardScore.m_bScoreChanged == 1)
        {
            Debug.Log(String.Format("New high score! Global rank #{0}.", leaderboardScore.m_nGlobalRankNew));
        }
        else
        {
            Debug.Log(String.Format("A previous score was better. Global rank #{0}.", leaderboardScore.m_nGlobalRankNew));
        }
    }