Files
UnrealEngine/Engine/Source/Developer/TargetDeviceServices/Private/Services/TargetDeviceServiceManager.h
2025-05-18 13:04:45 +08:00

146 lines
3.9 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "CoreTypes.h"
#include "Containers/Map.h"
#include "Containers/UnrealString.h"
#include "Delegates/Delegate.h"
#include "HAL/CriticalSection.h"
#include "ITargetDeviceServiceManager.h"
class IMessageBus;
class ITargetDeviceService;
/**
* Implements a target device service manager.
*
* Services that were running at the
*/
class FTargetDeviceServiceManager
: public ITargetDeviceServiceManager
{
public:
/** Default constructor. */
FTargetDeviceServiceManager();
/** Destructor. */
~FTargetDeviceServiceManager();
public:
//~ ITargetDeviceServiceManager interface
virtual bool AddStartupService(const FString& DeviceName) override;
virtual int32 GetServices(TArray<TSharedPtr<ITargetDeviceService, ESPMode::ThreadSafe>>& OutServices) override;
virtual void RemoveStartupService(const FString& DeviceName) override;
DECLARE_DERIVED_EVENT(FTargetDeviceServiceManager, ITargetDeviceServiceManager::FOnTargetDeviceServiceAdded, FOnTargetDeviceServiceAdded);
virtual FOnTargetDeviceServiceAdded& OnServiceAdded() override
{
return ServiceAddedDelegate;
}
DECLARE_DERIVED_EVENT(FTargetDeviceServiceManager, ITargetDeviceServiceManager::FOnTargetDeviceServiceRemoved, FOnTargetDeviceServiceRemoved);
virtual FOnTargetDeviceServiceRemoved& OnServiceRemoved() override
{
return ServiceRemovedDelegate;
}
protected:
/**
* Adds a device service for the given device.
*
* @param DeviceName The name to of the device to add.
* @return the created or preexisting service, nullptr if creation failed.
*/
TSharedPtr<ITargetDeviceService, ESPMode::ThreadSafe> AddService(const FString& DeviceName);
/**
* Adds a target device, a device service will be created if needed.
*
* @param InDevice The target device to add
* @return true if the device was added to the device service, false if the service failed to create.
*/
bool AddTargetDevice(ITargetDevicePtr InDevice);
/**
* Initializes target platforms callbacks.
*
* @see ShutdownTargetPlatforms
*/
void InitializeTargetPlatforms();
/**
* Loads all settings from disk.
*
* @see SaveSettings
*/
void LoadSettings();
/**
* Removes the device service for the given target device.
*
* @param DeviceName The name of the device to remove the service for.
*/
void RemoveService(const FString& DeviceName);
/**
* Removes the given target device, if that is the last target device in the device service the entire service is removed.
*
* @param InDevice The target device to remove.
*/
void RemoveTargetDevice(ITargetDevicePtr InDevice);
/**
* Saves all settings to disk.
*
* @see LoadSettings
*/
void SaveSettings();
/**
* Shuts down target platforms callbacks.
*
* @see InitializeTargetPlatforms
*/
void ShutdownTargetPlatforms();
private:
/** Callback for handling message bus shutdowns. */
void HandleMessageBusShutdown();
/** Callback for discovered target devices. */
void HandleTargetPlatformDeviceDiscovered(ITargetDeviceRef DiscoveredDevice);
/** Callback for lost target devices. */
void HandleTargetPlatformDeviceLost(ITargetDeviceRef LostDevice);
private:
/** Holds a critical section object. */
FCriticalSection CriticalSection;
/** Holds the list of locally managed device services. */
TMap<FString, TSharedPtr<ITargetDeviceService, ESPMode::ThreadSafe>> DeviceServices;
/** Holds a weak pointer to the message bus. */
TWeakPtr<IMessageBus, ESPMode::ThreadSafe> MessageBusPtr;
/** Holds the collection of identifiers for devices that start automatically (shared/unshared). */
TMap<FString, bool> StartupServices;
private:
/** Holds a delegate that is invoked when a target device service was added. */
FOnTargetDeviceServiceAdded ServiceAddedDelegate;
/** Holds a delegate that is invoked when a target device service was removed. */
FOnTargetDeviceServiceRemoved ServiceRemovedDelegate;
};