Example #1
0
        public static void RegisterCallResult(ICallResultBase callback, SteamAPICall_t hAPICall)
        {
            List <ICallResultBase> callResultList;

            if (m_RegisteredCallResults.TryGetValue(hAPICall, out callResultList))
            {
                callResultList.Add(callback);
            }
            else
            {
                callResultList = new List <ICallResultBase>();
                callResultList.Add(callback);
                m_RegisteredCallResults.Add(hAPICall, callResultList);
            }
        }
Example #2
0
        public static void UnregisterCallResult(ICallResultBase callback, SteamAPICall_t hAPICall)
        {
            List <ICallResultBase> callResultList;

            if (m_RegisteredCallResults.TryGetValue(hAPICall, out callResultList))
            {
                foreach (ICallResultBase c in callResultList)
                {
                    if (c == callback)
                    {
                        callResultList.Remove(c);
                        break;
                    }
                }

                if (callResultList.Count == 0)
                {
                    m_RegisteredCallResults.Remove(hAPICall);
                }
            }
        }
Example #3
0
        public static void RunCallResult(SteamAPICallCompleted_t apicall)
        {
            List <ICallResultBase> callResultList;

            if (!m_RegisteredCallResults.TryGetValue(apicall.m_hAsyncCall, out callResultList))
            {
                return;
            }

            if (callResultList.Count == 0)
            {
                // This should never ever happen? Jankyness.
                m_RegisteredCallResults.Remove(apicall.m_hAsyncCall);
                return;
            }

            IntPtr pData = IntPtr.Zero;
            bool   bFailed;

            try {
                ICallResultBase apiCallback = callResultList[0];
                pData = Marshal.AllocHGlobal(apiCallback.GetCallbackSizeBytes());

                if (!NativeMethods.Steam_GetAPICallResult(m_LastActivePipe, apicall.m_hAsyncCall, pData, apiCallback.GetCallbackSizeBytes(), apiCallback.GetICallback(), out bFailed))
                {
                    return;
                }

                foreach (ICallResultBase c in callResultList)
                {
                    c.Run(pData, bFailed);
                }
            }
            finally {
                // Unregister all
                m_RegisteredCallResults.Remove(apicall.m_hAsyncCall);

                Marshal.FreeHGlobal(pData);
            }
        }