Files
UnrealEngineUWP/Engine/Source/Developer/CookOnTheFlyNetServer/Private/PlatformProtocolServer.h
CarlMagnus Nordin 0282a5aef6 Unified Zen and legacy COTF network protocols.
*Reduces code duplication
*Enables the same ODSC flow to be used for both COTF variants
*The client will now autodetect if it should run in Zen mode or not
#rb pj.kack,per.larsson
#preflight 628c79bdf057b981ca479b3e

[CL 20344832 by CarlMagnus Nordin in ue5-main branch]
2022-05-24 02:50:39 -04:00

85 lines
2.2 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, const FString& InZenProjectName);
/**
* 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;
};