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

85 lines
2.1 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "CoreMinimal.h"
#include "HAL/Runnable.h"
#include "CookOnTheFlyNetServerBase.h"
class ITargetPlatform;
/**
* This class wraps the server thread and network connection.
*
* It uses ITargetDeviceSocket to exchanging data with the connected targets.
* This interface is an abstraction for direct pc-target communication as provided
* by the platforms. IPlatformHostCommunication/IPlatformHostSocket are the
* corresponding interfaces used on the game side.
*
* This implementation is based on FNetworkFileServer (the TCP-based server).
*/
class FCookOnTheFlyServerPlatformProtocol
: public FRunnable
, public FCookOnTheFlyNetworkServerBase
{
public:
/**
* Creates and initializes a new instance.
*
* @param InFileServerOptions Network file server options
*/
FCookOnTheFlyServerPlatformProtocol(const TArray<ITargetPlatform*>& TargetPlatforms);
/**
* Destructor.
*/
~FCookOnTheFlyServerPlatformProtocol();
public:
//~ Begin FRunnable Interface
virtual uint32 Run() override;
virtual void Stop() override;
virtual void Exit() override;
//~ End FRunnable Interface
public:
//~ Begin ICookOnTheFlyNetworkServer Interface
virtual bool IsReadyToAcceptConnections() const override;
virtual bool GetAddressList(TArray<TSharedPtr<FInternetAddr> >& OutAddresses) const override;
virtual FString GetSupportedProtocol() const override;
virtual int32 NumConnections() const override;
virtual bool Start() override;
//~ End ICookOnTheFlyNetworkServer Interface
private:
void UpdateConnections();
void AddConnectionsForNewDevices();
void AddConnectionsForNewDevices(ITargetPlatform* TargetPlatform);
void RemoveClosedConnections();
class FConnectionThreaded;
// File server options
TArray<ITargetPlatform*> TargetPlatforms;
// Holds the server thread object.
FRunnableThread* Thread;
// Holds the list of all client connections.
TArray<FConnectionThreaded*> Connections;
// Holds a flag indicating whether the thread should stop executing
std::atomic<bool> StopRequested;
// Is the Listener thread up and running.
std::atomic<bool> Running;
};