Files
UnrealEngine/Engine/Plugins/Media/PixelStreaming2/Source/PixelStreaming2Servers/Private/ServerBase.h
2025-05-18 13:04:45 +08:00

63 lines
2.1 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "PixelStreaming2Servers.h"
#include "Tickable.h"
namespace UE::PixelStreaming2Servers
{
// Base class for all servers, provides functionality for servers to be polled for readiness while they start up.
class FServerBase : public IServer, public FTickableGameObject
{
public:
virtual ~FServerBase() = default;
/* Begin IServer */
virtual void Stop() = 0;
virtual bool HasLaunched() override;
virtual bool Launch(FLaunchArgs& InLaunchArgs) override;
virtual bool IsReady() override;
virtual bool IsTimedOut() override;
virtual void GetNumStreamers(TFunction<void(uint16)> OnNumStreamersReceived) = 0;
/* End IServer */
/* Begin FTickableGameObject */
virtual bool IsTickableWhenPaused() const override;
virtual bool IsTickableInEditor() const override;
virtual void Tick(float DeltaTime) override;
virtual bool IsAllowedToTick() const override;
TStatId GetStatId() const { RETURN_QUICK_DECLARE_CYCLE_STAT(PixelStreaming2Servers, STATGROUP_Tickables); }
/* End FTickableGameObject */
protected:
/**
* Implemented by derived types. Implementation specific but somehow the server has been tested to see if it ready for connections.
* @return True if the server is able to be connected to.
**/
virtual bool TestConnection() = 0;
/**
* Implemented by derived types. The actual implementation of how this specified server is launched.
* @param LaunchArgs The launch arguments to use.
* @param OutEndpoints The output endpoints the user can expect to use with this server.
* @return True if the server was able to launch.
**/
virtual bool LaunchImpl(FLaunchArgs& InLaunchArgs, TMap<EEndpoint, FURL>& OutEndpoints) = 0;
protected:
FLaunchArgs LaunchArgs;
bool bHasLaunched = false;
TMap<EEndpoint, FURL> Endpoints;
FThreadSafeBool bIsReady = false;
float PollingStartedSeconds = 0.0f;
float LastReconnectionTimeSeconds = 0.0f;
bool bAllowedToTick = true;
bool bTimedOut = false;
bool bPollUntilReady = false;
};
} // UE::PixelStreaming2Servers