Files
Ivazovsky/plugins/EasyXMLParser/Source/EasyXMLParser/Private/EasyXMLAsyncLoadFromString.cpp
T
2023-02-06 17:17:44 +05:00

51 lines
1.2 KiB
C++

// Copyright 2019 ayumax. All Rights Reserved.
#include "EasyXMLAsyncLoadFromString.h"
#include "Engine/World.h"
#include "TimerManager.h"
#include "Async/Async.h"
#include "Utils/CustomXMLParser.h"
UEasyXMLAsyncLoadFromString::UEasyXMLAsyncLoadFromString(const FObjectInitializer& ObjectInitializer)
:Super(ObjectInitializer)
{
}
UEasyXMLAsyncLoadFromString* UEasyXMLAsyncLoadFromString::AsyncLoadFromString(UObject* WorldContextObject, const FString& XMLString)
{
auto Action = NewObject<UEasyXMLAsyncLoadFromString>();
Action->RegisterWithGameInstance(WorldContextObject);
Action->_XMLString = XMLString;
return Action;
}
void UEasyXMLAsyncLoadFromString::Activate()
{
AsyncTask(ENamedThreads::AnyBackgroundThreadNormalTask, [this]()
{
CustomXMLParser parser;
FString _errorMessage;
auto rootElement = parser.Parse(_XMLString, _errorMessage);
if (rootElement != nullptr)
{
AsyncTask(ENamedThreads::GameThread, [this, rootElement]()
{
Successed.Broadcast(rootElement, TEXT(""));
SetReadyToDestroy();
});
}
else
{
AsyncTask(ENamedThreads::GameThread, [this, _errorMessage]()
{
Failed.Broadcast(nullptr, _errorMessage);
SetReadyToDestroy();
});
}
});
}