Files
UnrealEngine/Engine/Plugins/Online/OnlineSubsystemApple/Source/Private/OnlineSubsystemAppleModule.cpp
2025-05-18 13:04:45 +08:00

89 lines
2.2 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#include "OnlineSubsystemAppleModule.h"
#include "OnlineSubsystem.h"
#include "OnlineSubsystemApple.h"
IMPLEMENT_MODULE(FOnlineSubsystemAppleModule, OnlineSubsystemApple);
/**
* Class responsible for creating instance(s) of the subsystem
*/
class FOnlineFactoryApple : public IOnlineFactory
{
private:
/** Single instantiation of the Apple interface */
static FOnlineSubsystemApplePtr AppleSingleton;
virtual void DestroySubsystem()
{
if (AppleSingleton.IsValid())
{
AppleSingleton->Shutdown();
AppleSingleton = nullptr;
}
}
public:
FOnlineFactoryApple() {}
virtual ~FOnlineFactoryApple()
{
DestroySubsystem();
}
virtual IOnlineSubsystemPtr CreateSubsystem(FName InstanceName)
{
if (!AppleSingleton.IsValid())
{
AppleSingleton = MakeShared<FOnlineSubsystemApple, ESPMode::ThreadSafe>(InstanceName);
if (AppleSingleton->IsEnabled())
{
if(!AppleSingleton->Init())
{
UE_LOG_ONLINE(Warning, TEXT("FOnlineSubsystemAppleModule failed to initialize!"));
DestroySubsystem();
}
}
else
{
UE_LOG_ONLINE(Warning, TEXT("FOnlineSubsystemAppleModule was disabled"));
DestroySubsystem();
}
return AppleSingleton;
}
UE_LOG_ONLINE(Warning, TEXT("Can't create more than one instance of Apple online subsystem!"));
return nullptr;
}
};
FOnlineSubsystemApplePtr FOnlineFactoryApple::AppleSingleton = nullptr;
void FOnlineSubsystemAppleModule::StartupModule()
{
SCOPED_BOOT_TIMING("FOnlineSubsystemAppleModule::StartupModule");
UE_LOG_ONLINE(Display, TEXT("FOnlineSubsystemAppleModule::StartupModule()"));
AppleFactory = new FOnlineFactoryApple();
// Create and register our singleton factory with the main online subsystem for easy access
FOnlineSubsystemModule& OSS = FModuleManager::GetModuleChecked<FOnlineSubsystemModule>("OnlineSubsystem");
OSS.RegisterPlatformService(APPLE_SUBSYSTEM, AppleFactory);
}
void FOnlineSubsystemAppleModule::ShutdownModule()
{
UE_LOG_ONLINE(Display, TEXT("FOnlineSubsystemAppleModule::ShutdownModule()"));
FOnlineSubsystemModule& OSS = FModuleManager::GetModuleChecked<FOnlineSubsystemModule>("OnlineSubsystem");
OSS.UnregisterPlatformService(APPLE_SUBSYSTEM);
delete AppleFactory;
AppleFactory = nullptr;
}