Ejemplo n.º 1
0
void FOnlineAsyncMsgSteam::Destroy()
{
	if (ResponseBuffer)
	{
		UFunction* Function = (*ResponseMessage)->OwnerFunc.Get();
		if (Function)
		{
			// Destroy the parameters.
			// warning: highly dependent on UObject::ProcessEvent freeing of parms!
			for(UProperty* Destruct = Function->DestructorLink; Destruct; Destruct = Destruct->DestructorLinkNext)
			{
				if(Destruct->IsInContainer(Function->ParmsSize))
				{
					Destruct->DestroyValue_InContainer(ResponseBuffer);
				}
			}
		}
        else
        {
            UE_LOG_ONLINE(Warning, TEXT("MsgDestroy: UFunction missing, unable to free buffer.")); 
        }

		delete [] ResponseBuffer;
		ResponseBuffer = NULL;
	}

	GProtoPool.ReturnToPool(Message);
	GProtoPool.ReturnToPool(ResponseMessage);
	ActorPtr = NULL;
}