void FHttpManager::RemoveRequest(const TSharedRef<IHttpRequest>& Request) { FScopeLock ScopeLock(&RequestLock); // Keep track of requests that have been removed to be destroyed later PendingDestroyRequests.AddUnique(FRequestPendingDestroy(DeferredDestroyDelay,Request)); Requests.Remove(Request); }
// note that we cannot call parent implementation because lock might be possible non-multiple void FCurlHttpManager::RemoveRequest(const TSharedRef<class IHttpRequest>& Request) { FScopeLock ScopeLock(&RequestLock); // Keep track of requests that have been removed to be destroyed later PendingDestroyRequests.AddUnique(FRequestPendingDestroy(DeferredDestroyDelay,Request)); FCurlHttpRequest* CurlRequest = static_cast< FCurlHttpRequest* >( &Request.Get() ); HandlesToRequests.Remove(CurlRequest->GetEasyHandle()); Requests.Remove(Request); }
bool FHttpManager::Tick(float DeltaSeconds) { FScopeLock ScopeLock(&RequestLock); // Tick each active request for (TArray<TSharedRef<IHttpRequest>>::TIterator It(Requests); It; ++It) { TSharedRef<IHttpRequest> Request = *It; Request->Tick(DeltaSeconds); } // Tick any pending destroy objects for (int Idx=0; Idx < PendingDestroyRequests.Num(); Idx++) { FRequestPendingDestroy& Request = PendingDestroyRequests[Idx]; Request.TimeLeft -= DeltaSeconds; if (Request.TimeLeft <= 0) { PendingDestroyRequests.RemoveAt(Idx--); } } TArray<IHttpThreadedRequest*> CompletedThreadedRequests; Thread->GetCompletedRequests(CompletedThreadedRequests); // Finish and remove any completed requests for (IHttpThreadedRequest* CompletedRequest : CompletedThreadedRequests) { // Keep track of requests that have been removed to be destroyed later PendingDestroyRequests.AddUnique(FRequestPendingDestroy(DeferredDestroyDelay,CompletedRequest->AsShared())); CompletedRequest->FinishRequest(); Requests.Remove(CompletedRequest->AsShared()); } // keep ticking return true; }