50 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
		
		
			
		
	
	
			50 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| 
								 | 
							
								#include "CSAsyncActionBase.h"
							 | 
						|||
| 
								 | 
							
								#include "UnrealSharpAsync.h"
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								void UCSAsyncActionBase::Destroy()
							 | 
						|||
| 
								 | 
							
								{
							 | 
						|||
| 
								 | 
							
									if (UGameInstance* GameInstance = GetWorld()->GetGameInstance())
							 | 
						|||
| 
								 | 
							
									{
							 | 
						|||
| 
								 | 
							
										GameInstance->UnregisterReferencedObject(this);
							 | 
						|||
| 
								 | 
							
									}
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
									ManagedCallback.Dispose();
							 | 
						|||
| 
								 | 
							
									MarkAsGarbage();
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								void UCSAsyncActionBase::InvokeManagedCallback(bool bDispose)
							 | 
						|||
| 
								 | 
							
								{
							 | 
						|||
| 
								 | 
							
									InvokeManagedCallback(this, bDispose);
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								void UCSAsyncActionBase::InvokeManagedCallback(UObject* WorldContextObject, bool bDispose)
							 | 
						|||
| 
								 | 
							
								{
							 | 
						|||
| 
								 | 
							
								    ManagedCallback.Invoke(WorldContextObject, bDispose);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    if (bDispose)
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								        Destroy();
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								void UCSAsyncActionBase::InitializeManagedCallback(FGCHandleIntPtr Callback)
							 | 
						|||
| 
								 | 
							
								{
							 | 
						|||
| 
								 | 
							
									ManagedCallback = FGCHandle(Callback, GCHandleType::WeakHandle);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
									if (UGameInstance* GameInstance = GetWorld()->GetGameInstance())
							 | 
						|||
| 
								 | 
							
									{
							 | 
						|||
| 
								 | 
							
										GameInstance->RegisterReferencedObject(this);
							 | 
						|||
| 
								 | 
							
									}
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								void UUCSAsyncBaseExporter::InitializeAsyncObject(UCSAsyncActionBase* AsyncAction, FGCHandleIntPtr Callback)
							 | 
						|||
| 
								 | 
							
								{
							 | 
						|||
| 
								 | 
							
									if (!IsValid(AsyncAction))
							 | 
						|||
| 
								 | 
							
									{
							 | 
						|||
| 
								 | 
							
										UE_LOG(LogUnrealSharpAsync, Warning, TEXT("UUCSAsyncBaseExporter::InitializeAsyncObject: AsyncAction is null"));
							 | 
						|||
| 
								 | 
							
										return;
							 | 
						|||
| 
								 | 
							
									}
							 | 
						|||
| 
								 | 
							
									
							 | 
						|||
| 
								 | 
							
									AsyncAction->InitializeManagedCallback(Callback);
							 | 
						|||
| 
								 | 
							
								}
							 |