/** * Helper function that loads a given platform service module if it isn't already loaded * * @param SubsystemName Name of the requested platform service to load * @return The module interface of the requested platform service, NULL if the service doesn't exist */ static TSharedPtr<IModuleInterface> LoadSubsystemModule(const FString& SubsystemName) { #if !UE_BUILD_SHIPPING && !UE_BUILD_SHIPPING_WITH_EDITOR // Early out if we are overriding the module load bool bAttemptLoadModule = !FParse::Param(FCommandLine::Get(), *FString::Printf(TEXT("no%s"), *SubsystemName)); if (bAttemptLoadModule) #endif { FName ModuleName; FModuleManager& ModuleManager = FModuleManager::Get(); ModuleName = GetOnlineModuleName(SubsystemName); if (!ModuleManager.IsModuleLoaded(ModuleName)) { // Attempt to load the module ModuleManager.LoadModule(ModuleName); } if (ModuleManager.IsModuleLoaded(ModuleName)) { // Now return the module itself return ModuleManager.GetModuleInterfaceRef(ModuleName); } } return NULL; }
bool FOnlineSubsystemModule::IsOnlineSubsystemLoaded(const FName InSubsystemName) const { bool bIsLoaded = false; FName SubsystemName, InstanceName; ParseOnlineSubsystemName(InSubsystemName, SubsystemName, InstanceName); if (SubsystemName != NAME_None) { if (FModuleManager::Get().IsModuleLoaded(GetOnlineModuleName(SubsystemName.ToString()))) { bIsLoaded = true; } } return bIsLoaded; }
/** * Unload and cleanup all registered online subsystems */ void FOnlineSubsystemModule::ShutdownOnlineSubsystem() { FModuleManager& ModuleManager = FModuleManager::Get(); // Unload all the supporting factories for (TMap<FName, IOnlineSubsystem*>::TIterator It(PlatformServices); It; ++It) { UE_LOG(LogOnline, Display, TEXT("Unloading online subsystem: %s"), *It.Key().ToString()); // Unloading the module will do proper cleanup FName ModuleName = GetOnlineModuleName(It.Key().ToString()); const bool bIsShutdown = true; ModuleManager.UnloadModule(ModuleName, bIsShutdown); } //ensure(PlatformServices.Num() == 0); }
/** * Determine if a subsystem is loaded by the OSS module * * @param SubsystemName - name of subsystem as referenced by consumers * @return true if module for the subsystem is loaded */ bool FOnlineSubsystemModule::IsOnlineSubsystemLoaded(const FName InSubsystemName) const { bool bIsLoaded = false; FName SubsystemName = InSubsystemName; if (SubsystemName == NAME_None) { SubsystemName = DefaultPlatformService; } if (SubsystemName != NAME_None) { if (FModuleManager::Get().IsModuleLoaded(GetOnlineModuleName(SubsystemName.ToString()))) { bIsLoaded = true; } } return bIsLoaded; }