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); } } } }
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); }
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); } }
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); }
public static CallResult <T> Create(CallResult <T> .APIDispatchDelegate func = null) { return(new CallResult <T>(func)); }
public CallResult(CallResult <T> .APIDispatchDelegate func = null) { this.m_Func = func; this.BuildCCallbackBase(); }
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)); } }