void CSteamBase::RunCallbacks() { std::vector<SteamAPIResult_t>::iterator iter; for (iter = _results.begin(); iter < _results.end(); iter++) { SteamAPIResult_t result = *iter; if (_resultHandlers.find(result.call) != _resultHandlers.end()) { _resultHandlers[result.call]->Run(result.data, false, result.call); } std::vector<CCallbackBase*>::iterator cbiter; for (cbiter = _callbacks.begin(); cbiter < _callbacks.end(); cbiter++) { CCallbackBase* cb = *cbiter; if (cb && cb->GetICallback() == result.type) { cb->Run(result.data, false, 0); } } if (result.data) { free(result.data); } } _results.clear(); }
void CallbackManager::RunAPICallbacks(HSteamPipe pipe, SteamAPICallCompleted_t *call) { SteamAPICall_t apicall = call->m_hAsyncCall; APICallsMap::const_iterator iter = apicalls.find(apicall); if(iter == apicalls.end()) return; CCallbackBase *callback = iter->second; int size = callback->GetCallbackSizeBytes(); void *data = malloc(size); bool failed = false; bool iok = provider.Steam_GetAPICallResult(pipe, apicall, data, size, callback->GetICallback(), &failed); callback->Run(data, (!iok || failed), apicall); free(data); }