// 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& 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 >& 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 TargetPlatforms; // Holds the server thread object. FRunnableThread* Thread; // Holds the list of all client connections. TArray Connections; // Holds a flag indicating whether the thread should stop executing std::atomic StopRequested; // Is the Listener thread up and running. std::atomic Running; };