Files
UnrealEngineUWP/Engine/Source/Developer/TargetDeviceServices/Private/TargetDeviceService.cpp

516 lines
14 KiB
C++
Raw Normal View History

// Copyright 1998-2017 Epic Games, Inc. All Rights Reserved.
Copying //UE4/Dev-Build to //UE4/Dev-Main (Source: //UE4/Dev-Build @ 3209340) #lockdown Nick.Penwarden #rb none ========================== MAJOR FEATURES + CHANGES ========================== Change 3209340 on 2016/11/23 by Ben.Marsh Convert UE4 codebase to an "include what you use" model - where every header just includes the dependencies it needs, rather than every source file including large monolithic headers like Engine.h and UnrealEd.h. Measured full rebuild times around 2x faster using XGE on Windows, and improvements of 25% or more for incremental builds and full rebuilds on most other platforms. * Every header now includes everything it needs to compile. * There's a CoreMinimal.h header that gets you a set of ubiquitous types from Core (eg. FString, FName, TArray, FVector, etc...). Most headers now include this first. * There's a CoreTypes.h header that sets up primitive UE4 types and build macros (int32, PLATFORM_WIN64, etc...). All headers in Core include this first, as does CoreMinimal.h. * Every .cpp file includes its matching .h file first. * This helps validate that each header is including everything it needs to compile. * No engine code includes a monolithic header such as Engine.h or UnrealEd.h any more. * You will get a warning if you try to include one of these from the engine. They still exist for compatibility with game projects and do not produce warnings when included there. * There have only been minor changes to our internal games down to accommodate these changes. The intent is for this to be as seamless as possible. * No engine code explicitly includes a precompiled header any more. * We still use PCHs, but they're force-included on the compiler command line by UnrealBuildTool instead. This lets us tune what they contain without breaking any existing include dependencies. * PCHs are generated by a tool to get a statistical amount of coverage for the source files using it, and I've seeded the new shared PCHs to contain any header included by > 15% of source files. Tool used to generate this transform is at Engine\Source\Programs\IncludeTool. [CL 3209342 by Ben Marsh in Main branch]
2016-11-23 15:48:37 -05:00
#include "TargetDeviceService.h"
#include "HAL/PlatformProcess.h"
#include "HAL/FileManager.h"
#include "Misc/Paths.h"
#include "Misc/ConfigCacheIni.h"
#include "Interfaces/ITargetPlatform.h"
#include "Helpers/MessageEndpointBuilder.h"
#include "TargetDeviceServiceMessages.h"
#include "PlatformInfo.h"
/* Local helpers
*****************************************************************************/
struct FVariantSortCallback
{
FORCEINLINE bool operator()(const ITargetDeviceWeakPtr& A, const ITargetDeviceWeakPtr& B) const
{
ITargetDevicePtr APtr = A.Pin();
ITargetDevicePtr BPtr = B.Pin();
return APtr->GetTargetPlatform().GetVariantPriority() > BPtr->GetTargetPlatform().GetVariantPriority();
}
};
/* FTargetDeviceService structors
*****************************************************************************/
Copying //UE4/Dev-Sequencer to //UE4/Dev-Main (Source: //UE4/Dev-Sequencer @ 3178529) #lockdown Nick.Penwarden #rb none ========================== MAJOR FEATURES + CHANGES ========================== Change 3149443 on 2016/10/03 by Max.Preussner MediaAssets: Better parameter names for MediaPlayer BP functions Change 3149756 on 2016/10/03 by Max.Chen Sequence Recorder: Set some settings to be clamped at 0 (sequence length, recording delay, audio gain, audio input buffer size, nearby actor recording proximity) #jira UE-35233 Change 3149795 on 2016/10/03 by Max.Chen Curve Editor: Set tangent to user when flattening or straightening tangents only when the tangent mode is auto and the interp mode is cubic. #jira UE-36734 Change 3150378 on 2016/10/04 by Max.Preussner PS4Media: Made video buffer sizes for file and HLS sources configurable (UE-36807) #jira UE-36807 Change 3151414 on 2016/10/05 by Max.Chen Sequencer: Fix case where restoring the last view target was getting skipped. It should always restore if the camera object and the unlock if camera actor object is null. #jira UE-35285 Change 3152038 on 2016/10/05 by Max.Preussner UdpMessaging: Code & documentation modernization pass Change 3152471 on 2016/10/05 by Max.Chen Cine Camera: Don't enable/disable actor ticking based soley on actor tracking since actor ticking is needed for other purposes. Instead, always enable actor ticking and only update actor tracking on tick if necessary. This fixes a bug where the cine camera actor won't tick if you hook in event tick. #jira UE-36625 Change 3152692 on 2016/10/05 by Max.Preussner Messaging: API code & documentation modernization pass Mostly removed shared pointer/ref typedefs as they prevent forward declarations and increase include complexity. Change 3153824 on 2016/10/06 by Max.Preussner Messaging: Renamed IConnectionBasedMessagingModule to ITcpMessagingModule and moved it into TcpMessaging I recommend that we refactor this API. The dependency should be reversed, i.e. instead of AndroidDeviceDiscovery depending on the TcpMessaging plug-in module, the Engine should provide a central registry that device discovery modules can notify, and that message transport plug-ins can register with and listen to OnConnectionAdded/Removed events etc. That way it supports an arbitrary number of transport plug-ins, and the Engine is not coupled to any of them. This functionality is not necessarily related to messaging, and the Messaging API is transport agnostic anyway. I'll think about this some more. Change 3153826 on 2016/10/06 by Max.Preussner Messaging: Removed remaining typedefs in IMessageTracer to enable forward declaration and reduce include dependencies Change 3153857 on 2016/10/06 by Max.Chen Sequencer: Set snap time to dragged key on by default. Change 3153980 on 2016/10/06 by Max.Preussner SessionServices: Removed typedefs; code and documentation modernization pass Change 3154313 on 2016/10/06 by Max.Chen Sequencer: Set the paste keys time to the current time, rather than the mouse time. Change 3154332 on 2016/10/06 by Max.Chen Sequencer: Remove click to rename shot functionality in the shot thumbnail. Added rename shot to the shot context menu. Change 3154377 on 2016/10/07 by Max.Chen Sequencer: Add ability to step to beginning and ends of sections/shots using the hotkeys: , and . Change 3154788 on 2016/10/07 by Max.Chen Sequencer: Fix offsets that created when moving multiple sections. The offsets were being created because section bounds were being generated for all sections except for the current section. Instead, they should be computed for all sections except for any that aren't being moved. #jira UE-29152 Change 3159274 on 2016/10/11 by Max.Preussner Core: Documentation fixes Change 3159275 on 2016/10/11 by Max.Preussner UdpMessaging: Added missing header Change 3160746 on 2016/10/12 by Max.Preussner MediaAssets: Added BP functions to query width, height, and aspect ratio of UMediaTexture instances #jira UE-37241 Change 3160975 on 2016/10/12 by Max.Preussner PS4Media: Better logging for SetRate failures Change 3160995 on 2016/10/12 by Max.Preussner MediaPlayerEditor: Fixed Media player selection is ignored if media specifies player overrides (UE-37248) #jira UE-37248 Change 3161066 on 2016/10/12 by Max.Preussner PS4Media: Enforcing minimum 8 byte alignment for media allocations Change 3161069 on 2016/10/12 by Max.Preussner PS4Media: Fixed log spam when setting play rate to current rate Change 3162567 on 2016/10/13 by Max.Preussner PS4Media: Made track switching code more readable Change 3163447 on 2016/10/14 by Max.Preussner PS4Media: Fixed array out of bounds assertions Change 3163772 on 2016/10/14 by Max.Preussner MfMedia: Fixed a number of timing related issues Change 3163980 on 2016/10/15 by Max.Chen Sequencer: Remove folder name numeric padding so that the naming convention is similar to creating objects in the level. Change 3164581 on 2016/10/17 by Andrew.Rodham Sequencer: Ensure global pre-animated state is restored in reverse order Change 3164582 on 2016/10/17 by Andrew.Rodham Sequencer: Ensure pre animated state is restored for all actor components before saving default state Change 3164583 on 2016/10/17 by Andrew.Rodham Sequencer: Re-enabled support for pre and post roll Change 3165464 on 2016/10/17 by Max.Chen Sequencer: Default number frame handles to 0 so that there's no change in behavior when rendering out a master sequence of shots. Handle frames need to enabled explicitly by the user. Copy from Release-4.14 #jira UE-37416 Change 3165483 on 2016/10/17 by Max.Chen Sequencer: Enable restore state for attach section completion Change 3165771 on 2016/10/18 by Andrew.Rodham Sequencer: Force evaluate when rendering thumbnails #jira UE-37321 Change 3166057 on 2016/10/18 by Andrew.Rodham Sequencer: Only set defaults for tracks that have no keys, and where the requested default has changed #jira UE-37285 Change 3166218 on 2016/10/18 by Max.Preussner MediaPlayerEditor: Failure opening media, even though it opened successfully (UE-37470) #jira UE-37470 Change 3166247 on 2016/10/18 by Max.Preussner WmfMedia: Showing progress bar while media is being resolved Change 3166289 on 2016/10/18 by Max.Preussner MfMedia: Showing progress bar while media is being resolved Change 3166993 on 2016/10/18 by Max.Preussner MfMedia: Fixed info string not reset on media close. Change 3166999 on 2016/10/19 by Max.Preussner Media: Fixed NV12 and NV21 support Change 3167008 on 2016/10/19 by Max.Preussner Media: Removed vertical NV12 alignment Change 3167029 on 2016/10/19 by Max.Preussner WmfMedia: Temp fix for RGB32 encoded AVIs rendering upside-down and too bright (UE-37505) #jira UE-37505 Change 3168593 on 2016/10/19 by Max.Chen Sequencer: Change paste at time to local time, so that the paste happens in the local time of the sequence rather than the global time if pasting in a shot level sequence. Change 3168626 on 2016/10/19 by Max.Chen Sequencer: Clamp to view bounds should snap to frame if frame snapping is on. Change 3168627 on 2016/10/19 by Max.Chen Sequencer: Initialize working and view range to be 10% larger than playback range. Change 3168760 on 2016/10/20 by Max.Preussner Media: Revamped media texture buffer management to support padded frames Added support for Windows bitmap buffers. Fixed a number of format, conversion and/or looping issues in WmfMedia and MfMedia. Not all shaders have been updated yet. Change 3169640 on 2016/10/20 by Max.Chen Sequencer: Add current camera to FLevelSequencePlayerSnapshot. Adjust DefaultBurnIn to include a few more parameters like focal length and focus distance. #jira UE-37407 Change 3170677 on 2016/10/21 by Max.Chen Movie Scene Capture: Add toggle to override engine scalability settings to cinematic scalability. #jira UE-36560 Change 3170710 on 2016/10/21 by Max.Preussner Media: Optimized handling of RGB input Change 3170712 on 2016/10/21 by Max.Preussner Media: Fixed NV21 conversion shader scaling Change 3170923 on 2016/10/21 by Max.Preussner UBT: Copied XboxOne project generator fix from Fortnite CL# 3170868 Change 3171494 on 2016/10/23 by Max.Chen Sequencer: Fix fbx export from master sequence not finding bound objects. #jira UE-35752 Change 3171506 on 2016/10/23 by Max.Chen Sequencer: Draw where in and out points of the shot section are, just like subsequences do. Change to only draw the green starting line if StartOffset is negative. #jira UE-35473 Change 3171743 on 2016/10/24 by Andrew.Rodham Editor: Added support for detail customizations on root structs - Also added the ability to add external struct data onto a detail category builder, and property type customization. Change 3171752 on 2016/10/24 by Andrew.Rodham Sequencer: Fixed spawnable ownership - Spawnables are no longer destroyed when the cursor leaves the master playback range. - Spawnable ownership now operates as it previously did before the evaluation rework. - bIgnoreOwnershipInEditor has been removed since its existence was a work around for when we didn't evaluate sub sequences from the master sequence. - FMovieSceneSequenceID is now a struct so that it can be used in array properties - Meta data now exists for each segment of an evaluation field. Currently this only includes the sub sequence IDs that exist at that time, but it may be expanded to include all evaluation entities (tracks + sections) in future so we don't have to calculate that at runtime. Change 3171756 on 2016/10/24 by Andrew.Rodham Sequencer: Added ability to trigger events with parameters - It's now possible to supply an event payload on event track keys which are to be passed to a given event. The structure must match the signature of the event, or a warning will be emitted. - Added a templated TGenericKeyArea, TKeyFrameManipulator and TCurveInterface that allow to generic manipulation of keyframe section data. In time we will port the other key areas over to this representation. - This new architecture affords the common manipulation of time-based keyframes in a value-agnostic manner. Change 3172935 on 2016/10/24 by Max.Preussner MediaPlayerEditor: Fixed MediaPlayer asset not being dirtied when creating media sound wave or texture for it Change 3173947 on 2016/10/25 by Max.Preussner SlateRemote: Disabled plug-in, but enabled server by default Change 3174510 on 2016/10/26 by Max.Chen Sequencer: Fix slomo track crash #jira UE-37802 Change 3174698 on 2016/10/26 by Andrew.Rodham UMG: Fixed objects bound to a panel slot animating their slot's content instead of the slot itself #jira UE-37775 Change 3174780 on 2016/10/26 by Max.Preussner MediaAssets: Accepting decoder defined buffer dimensions for RGB buffers Change 3174789 on 2016/10/26 by Max.Preussner MediaPlayerEditor: Showing desired player name instead of current player name if no media loaded Change 3174817 on 2016/10/26 by Max.Preussner WmfMedia: Added support for Motion JPEG (MJPG) Change 3174825 on 2016/10/26 by Max.Preussner WmfMedia: Added support for non-RGB32 uncompressed formats Change 3174834 on 2016/10/26 by Max.Preussner MediaPlayerAssets: Allow pausing while buffering media Change 3174886 on 2016/10/26 by Andrew.Rodham Core: Fixed range test that was testing incorrect behavior Change 3174889 on 2016/10/26 by Andrew.Rodham Sequencer: Fixed AssignActor behavior - Also ensure that cached object state is invalidated when playback context changes #jira UE-37798 Change 3174905 on 2016/10/26 by Andrew.Rodham Sequencer: Changed assert when failing to create an audio component to a log message - Audio no longer plays when GEngine->UseSound() is false #jira UE-37772 Change 3174980 on 2016/10/26 by Andrew.Rodham Sequencer: Remove warning when event endpoint could not be found for a given context #jira UE-37824 Change 3175001 on 2016/10/26 by Andrew.Rodham Sequencer: Evaluate sequence with EMovieScenePlaybackStatus::Jumping on Pause. - Also protect Pause() against reentrancy when being called from an event Change 3175012 on 2016/10/26 by Max.Chen Sequence Recorder: Fixes an empty working and view range after recording. On StopRecording() update playback range after nullifying the current sequence so that the playback range isn't empty. Added SetViewRange and SetWorkingRange. #jira UE-34191 Change 3177760 on 2016/10/28 by Max.Chen Sequence Recorder: Don't update the current sequence name if it's already set. This fixes a bug where if you pass in a sequence name to record to, it gets reset to the name in the sequence recorder settings. #jira UE-37808 Change 3178529 on 2016/10/28 by Max.Chen Matinee to Level Sequence: Added interface to extend the matinee to level sequence converter #jira UE-37328 #2864 [CL 3178562 by Max Chen in Main branch]
2016-10-28 15:04:38 -04:00
FTargetDeviceService::FTargetDeviceService(const FString& InDeviceName, const TSharedRef<IMessageBus, ESPMode::ThreadSafe>& InMessageBus)
: DeviceName(InDeviceName)
, Running(false)
, Shared(false)
{
// initialize messaging
MessageEndpoint = FMessageEndpoint::Builder(FName(*FString::Printf(TEXT("FTargetDeviceService (%s)"), *DeviceName)), InMessageBus)
.Handling<FTargetDeviceClaimDenied>(this, &FTargetDeviceService::HandleClaimDeniedMessage)
.Handling<FTargetDeviceClaimed>(this, &FTargetDeviceService::HandleClaimedMessage)
.Handling<FTargetDeviceServiceDeployCommit>(this, &FTargetDeviceService::HandleDeployCommitMessage)
.Handling<FTargetDeviceServiceDeployFile>(this, &FTargetDeviceService::HandleDeployFileMessage)
.Handling<FTargetDeviceServiceLaunchApp>(this, &FTargetDeviceService::HandleLaunchAppMessage)
.Handling<FTargetDeviceServicePing>(this, &FTargetDeviceService::HandlePingMessage)
.Handling<FTargetDeviceServicePowerOff>(this, &FTargetDeviceService::HandlePowerOffMessage)
.Handling<FTargetDeviceServicePowerOn>(this, &FTargetDeviceService::HandlePowerOnMessage)
.Handling<FTargetDeviceServiceReboot>(this, &FTargetDeviceService::HandleRebootMessage)
.Handling<FTargetDeviceServiceRunExecutable>(this, &FTargetDeviceService::HandleRunExecutableMessage)
.Handling<FTargetDeviceUnclaimed>(this, &FTargetDeviceService::HandleUnclaimedMessage);
if (MessageEndpoint.IsValid())
{
MessageEndpoint->Subscribe<FTargetDeviceClaimed>();
MessageEndpoint->Subscribe<FTargetDeviceUnclaimed>();
MessageEndpoint->Subscribe<FTargetDeviceServicePing>();
}
}
FTargetDeviceService::~FTargetDeviceService()
{
Stop();
FMessageEndpoint::SafeRelease(MessageEndpoint);
}
/* ITargetDeviceService interface
*****************************************************************************/
void FTargetDeviceService::AddTargetDevice(ITargetDevicePtr InDevice)
{
if (!InDevice.IsValid())
{
return;
}
FName Variant = FName(InDevice->GetTargetPlatform().PlatformName().GetCharArray().GetData());
if (DevicePlatformName == NAME_None)
{
// If this seems nasty your right!
// This is just one more nastiness in this class due to the fact that we intend to refactor the target platform stuff as a separate task.
const PlatformInfo::FPlatformInfo& Info = InDevice->GetTargetPlatform().GetPlatformInfo();
DevicePlatformName = Info.PlatformInfoName;
const PlatformInfo::FPlatformInfo* VanillaInfo = PlatformInfo::FindVanillaPlatformInfo(Info.VanillaPlatformName);
DevicePlatformDisplayName = VanillaInfo->DisplayName.ToString();
// Sigh the hacks... Should be able to remove if platform info gets cleaned up.... Windows doesn't have a reasonable vanilla platform.
const FString VariableSplit(TEXT("("));
FString Full = VanillaInfo->DisplayName.ToString();
FString Left;
FString Right;
bool bSplit = Full.Split(VariableSplit, &Left, &Right);
DevicePlatformDisplayName = bSplit ? Left.Trim() : Full;
}
// double add, which due to the async nature of some device discovery can't be easily avoided.
if (!(TargetDevicePtrs.FindRef(Variant).IsValid()))
{
TargetDevicePtrs.Add(Variant, InDevice);
// sort and choose cache the default
TargetDevicePtrs.ValueSort(FVariantSortCallback());
auto DeviceIterator = TargetDevicePtrs.CreateIterator();
if (DeviceIterator)
{
DefaultDevicePtr = (*DeviceIterator).Value;
}
else
{
DefaultDevicePtr = nullptr;
}
}
}
bool FTargetDeviceService::CanStart(FName InFlavor) const
{
ITargetDevicePtr TargetDevice = GetDevice(InFlavor);
if (TargetDevice.IsValid())
{
return TargetDevice->IsConnected();
}
return false;
}
ITargetDevicePtr FTargetDeviceService::GetDevice(FName InVariant) const
{
ITargetDevicePtr TargetDevice;
if (InVariant == NAME_None)
{
TargetDevice = DefaultDevicePtr.Pin();
}
else
{
const ITargetDeviceWeakPtr * WeakTargetDevicePtr = TargetDevicePtrs.Find(InVariant);
if (WeakTargetDevicePtr != nullptr)
{
TargetDevice = WeakTargetDevicePtr->Pin();
}
}
return TargetDevice;
}
void FTargetDeviceService::RemoveTargetDevice(ITargetDevicePtr InDevice)
{
if (!InDevice.IsValid())
{
return;
}
FName Variant = FName(InDevice->GetTargetPlatform().PlatformName().GetCharArray().GetData());
TargetDevicePtrs.Remove(Variant);
// Cache the default
auto DeviceIterator = TargetDevicePtrs.CreateIterator();
if (DeviceIterator)
{
DefaultDevicePtr = (*DeviceIterator).Value;
}
else
{
DefaultDevicePtr = nullptr;
}
}
bool FTargetDeviceService::Start()
{
if (!Running && MessageEndpoint.IsValid())
{
// notify other services
ClaimAddress = MessageEndpoint->GetAddress();
ClaimHost = FPlatformProcess::ComputerName();
ClaimUser = FPlatformProcess::UserName(false);
MessageEndpoint->Publish(new FTargetDeviceClaimed(DeviceName, ClaimHost, ClaimUser));
Running = true;
}
return true;
}
void FTargetDeviceService::Stop()
{
if (Running)
{
MessageEndpoint->Publish(new FTargetDeviceUnclaimed(DeviceName, FPlatformProcess::ComputerName(), FPlatformProcess::UserName(false)));
Merging //UE4/Release-4.11 to //UE4/Main (up to CL#2852902) ========================== MAJOR FEATURES + CHANGES ========================== Change 2835191 on 2016/01/19 by Nick.Whiting Invert the y-axis on the SteamVR controllers to match the convention of the engine and the rest of the gamepads #jira UE-22705 Change 2835686 on 2016/01/20 by Gareth.Martin Fixed landscape material instances not being updated if holes are painted on a landscape that doesn't have the landscape visibility mask node in the material and then the visibility mask node is added to the material later. #jira UE-18187 Change 2835767 on 2016/01/20 by Richard.Hinckley #jira UE-25499 Added a cursor to TopDown template (C++ version) to match the BP version. Change 2835772 on 2016/01/20 by Richard.Hinckley #jira UE-25499 Adding the material asset for the C++ TopDown template's cursor. Change 2835811 on 2016/01/20 by Taizyd.Korambayil #jira UE-25699 Added Validity Checks in BP logic, unchecked CDO for Pixel Ship, to Fix Log Warnings #jira UE-25704 Adjusted Matinee to happen at Box Location #jira UE-25688 Adjusted Player Starts #jira UE-25693 Adjusted Player Starts Change 2835863 on 2016/01/20 by Gareth.Martin Fixed crash in the landscape ramp and mirror tools if the streaming level containing the landscape is hidden (or possibly if the landscape actor is deleted) #jira UE-24883 Change 2835889 on 2016/01/20 by Taizyd.Korambayil #jira UE-25698 Enabled V-sync, also fixed up player Respawn Issue Change 2835995 on 2016/01/20 by Jamie.Dale The output log now hard-wraps lines to prevent long lines causing performance issues #jira UE-24187 Change 2836052 on 2016/01/20 by Taizyd.Korambayil #jira UE-25675 Added Blocking Volume to prevent Player from Falling off map #jira UE-25676 Added Blocking Volumes so that the Player doesn't get stucl at awkward corners under the Bridge Change 2836137 on 2016/01/20 by Chad.Taylor Vehicle and VehicleAdv template content fixes for new VR camera #jira UE-25507 Change 2836166 on 2016/01/20 by Gareth.Martin Fixed hiding a streaming level containing a landscape causing the landscape editor to switch to the "New Landscape" tool instead of exiting #jira UE-25093 Change 2836174 on 2016/01/20 by Chad.Taylor IHeadMountedDisplay crash fix associated with accessing a dangling pointer. #jira UE-25272 Change 2836179 on 2016/01/20 by Jamie.Dale Optimized FShapedGlyphSequence reverse look-up There's now a reverse look-up map of cluster indices to their glyph data in order to avoid brute force looping #jira UE-24187 Change 2836286 on 2016/01/20 by Chris.Babcock Update Qualcomm TextureConverter for OSX #jira UE-22092 #ue4 #android Change 2836328 on 2016/01/20 by Nick.Darnell Fixing a problem with widget components crashing on destruction with the render commands to pre/post render for window render commands needing access to the policy, but it potentially being deleted. Inserting a NoOp command that keeps the shared ptr alive through the RHI render process. #jira UE-25752 Change 2836342 on 2016/01/20 by Nick.Darnell Depending on shutdown order, the Slate Renderer may go away, and then render data handles may not be collected correctly because they are trying to reference a pointer that's no longer valid and cause a crash on exit. The correct approach would be to have render handles actually have a pointer back to who owns them, in this case the RHI Resource Manager, which is still alive and well at this point in the pipeline. Then if the resource manager is collected, it forces all handles to get cleaned up correctly, or if the handles are collected first, they can be sure they've got a valid pointer back to the resource manager. #jira UE-25753 Change 2836358 on 2016/01/20 by Taizyd.Korambayil #jira UE-25710 Replaced Deprecated Nodes Change 2836510 on 2016/01/20 by Taizyd.Korambayil #jira UE-25718 Adjsuted BP to make pointer decal rotate in the direction of surface Change 2836564 on 2016/01/20 by Taizyd.Korambayil #jira UE-25716 Added bool to store last Moved Direction Change 2836697 on 2016/01/20 by Taizyd.Korambayil #jira UE-25740 Removed unused VR Nodes to remove Log errors on Mac Change 2836725 on 2016/01/20 by Peter.Sauerbrei workaround for thread race when trying to release the TargetDeviceService endpoint after an unclaim message is sent #jira UE-25123 Change 2836782 on 2016/01/20 by Jamie.Dale Added FTextLayout::AddLines This is similar to AddLine, however it allows you to add multiple lines in a single call, thus avoiding the re-justification cost associated with each call to AddLine. AddLine has also been changed to take the same structure type as AddLines (which takes an array of these structures), and the existing version of AddLine has been deprecated. #jira UE-24187 Change 2836801 on 2016/01/20 by Jeff.Campeau [CL 2857187 by Matthew Griffin in Main branch]
2016-02-05 11:54:00 -05:00
FPlatformProcess::SleepNoStats(0.01);
Merging //UE4/Release-4.11 to //UE4/Main (up to CL#2852902) ========================== MAJOR FEATURES + CHANGES ========================== Change 2835191 on 2016/01/19 by Nick.Whiting Invert the y-axis on the SteamVR controllers to match the convention of the engine and the rest of the gamepads #jira UE-22705 Change 2835686 on 2016/01/20 by Gareth.Martin Fixed landscape material instances not being updated if holes are painted on a landscape that doesn't have the landscape visibility mask node in the material and then the visibility mask node is added to the material later. #jira UE-18187 Change 2835767 on 2016/01/20 by Richard.Hinckley #jira UE-25499 Added a cursor to TopDown template (C++ version) to match the BP version. Change 2835772 on 2016/01/20 by Richard.Hinckley #jira UE-25499 Adding the material asset for the C++ TopDown template's cursor. Change 2835811 on 2016/01/20 by Taizyd.Korambayil #jira UE-25699 Added Validity Checks in BP logic, unchecked CDO for Pixel Ship, to Fix Log Warnings #jira UE-25704 Adjusted Matinee to happen at Box Location #jira UE-25688 Adjusted Player Starts #jira UE-25693 Adjusted Player Starts Change 2835863 on 2016/01/20 by Gareth.Martin Fixed crash in the landscape ramp and mirror tools if the streaming level containing the landscape is hidden (or possibly if the landscape actor is deleted) #jira UE-24883 Change 2835889 on 2016/01/20 by Taizyd.Korambayil #jira UE-25698 Enabled V-sync, also fixed up player Respawn Issue Change 2835995 on 2016/01/20 by Jamie.Dale The output log now hard-wraps lines to prevent long lines causing performance issues #jira UE-24187 Change 2836052 on 2016/01/20 by Taizyd.Korambayil #jira UE-25675 Added Blocking Volume to prevent Player from Falling off map #jira UE-25676 Added Blocking Volumes so that the Player doesn't get stucl at awkward corners under the Bridge Change 2836137 on 2016/01/20 by Chad.Taylor Vehicle and VehicleAdv template content fixes for new VR camera #jira UE-25507 Change 2836166 on 2016/01/20 by Gareth.Martin Fixed hiding a streaming level containing a landscape causing the landscape editor to switch to the "New Landscape" tool instead of exiting #jira UE-25093 Change 2836174 on 2016/01/20 by Chad.Taylor IHeadMountedDisplay crash fix associated with accessing a dangling pointer. #jira UE-25272 Change 2836179 on 2016/01/20 by Jamie.Dale Optimized FShapedGlyphSequence reverse look-up There's now a reverse look-up map of cluster indices to their glyph data in order to avoid brute force looping #jira UE-24187 Change 2836286 on 2016/01/20 by Chris.Babcock Update Qualcomm TextureConverter for OSX #jira UE-22092 #ue4 #android Change 2836328 on 2016/01/20 by Nick.Darnell Fixing a problem with widget components crashing on destruction with the render commands to pre/post render for window render commands needing access to the policy, but it potentially being deleted. Inserting a NoOp command that keeps the shared ptr alive through the RHI render process. #jira UE-25752 Change 2836342 on 2016/01/20 by Nick.Darnell Depending on shutdown order, the Slate Renderer may go away, and then render data handles may not be collected correctly because they are trying to reference a pointer that's no longer valid and cause a crash on exit. The correct approach would be to have render handles actually have a pointer back to who owns them, in this case the RHI Resource Manager, which is still alive and well at this point in the pipeline. Then if the resource manager is collected, it forces all handles to get cleaned up correctly, or if the handles are collected first, they can be sure they've got a valid pointer back to the resource manager. #jira UE-25753 Change 2836358 on 2016/01/20 by Taizyd.Korambayil #jira UE-25710 Replaced Deprecated Nodes Change 2836510 on 2016/01/20 by Taizyd.Korambayil #jira UE-25718 Adjsuted BP to make pointer decal rotate in the direction of surface Change 2836564 on 2016/01/20 by Taizyd.Korambayil #jira UE-25716 Added bool to store last Moved Direction Change 2836697 on 2016/01/20 by Taizyd.Korambayil #jira UE-25740 Removed unused VR Nodes to remove Log errors on Mac Change 2836725 on 2016/01/20 by Peter.Sauerbrei workaround for thread race when trying to release the TargetDeviceService endpoint after an unclaim message is sent #jira UE-25123 Change 2836782 on 2016/01/20 by Jamie.Dale Added FTextLayout::AddLines This is similar to AddLine, however it allows you to add multiple lines in a single call, thus avoiding the re-justification cost associated with each call to AddLine. AddLine has also been changed to take the same structure type as AddLines (which takes an array of these structures), and the existing version of AddLine has been deprecated. #jira UE-24187 Change 2836801 on 2016/01/20 by Jeff.Campeau [CL 2857187 by Matthew Griffin in Main branch]
2016-02-05 11:54:00 -05:00
// Only stop the device if we care about device claiming
GConfig->GetBool(TEXT("/Script/Engine.Engine"), TEXT("DisableDeviceClaiming"), Running, GEngineIni);
}
}
/* FTargetDeviceService implementation
*****************************************************************************/
bool FTargetDeviceService::StoreDeployedFile(FArchive* FileReader, const FString& TargetFileName) const
{
if (FileReader == nullptr)
{
return false;
}
// create target file
FArchive* FileWriter = IFileManager::Get().CreateFileWriter(*TargetFileName);
if (FileWriter == nullptr)
{
return false;
}
FileReader->Seek(0);
// copy file contents
int64 BytesRemaining = FileReader->TotalSize();
int32 BufferSize = 128 * 1024;
if (BytesRemaining < BufferSize)
{
BufferSize = BytesRemaining;
}
void* Buffer = FMemory::Malloc(BufferSize);
while (BytesRemaining > 0)
{
FileReader->Serialize(Buffer, BufferSize);
FileWriter->Serialize(Buffer, BufferSize);
BytesRemaining -= BufferSize;
if (BytesRemaining < BufferSize)
{
BufferSize = BytesRemaining;
}
}
// clean up
FMemory::Free(Buffer);
delete FileWriter;
return true;
}
/* FTargetDeviceService callbacks
*****************************************************************************/
void FTargetDeviceService::HandleClaimDeniedMessage(const FTargetDeviceClaimDenied& Message, const IMessageContextRef& Context)
{
// HACK: Disabling claim denied message. Allows the editor to always claim a device and should prevent cases where instances of the
// editor running on other machines can steal a device from us - which is undesirable on some platforms.
// Also see FTargetDeviceProxyManager::HandlePongMessage()
#if 0
if (Running && (Message.DeviceName == DeviceName))
{
Stop();
ClaimAddress = Context->GetSender();
ClaimHost = Message.HostName;
ClaimUser = Message.HostUser;
}
#endif
}
void FTargetDeviceService::HandleClaimedMessage(const FTargetDeviceClaimed& Message, const IMessageContextRef& Context)
{
if (Message.DeviceName != DeviceName)
{
return;
}
if (Running)
{
if (Context->GetSender() != MessageEndpoint->GetAddress())
{
MessageEndpoint->Send(new FTargetDeviceClaimDenied(DeviceName, FPlatformProcess::ComputerName(), FPlatformProcess::UserName(false)), Context->GetSender());
}
}
else
{
ClaimAddress = Context->GetSender();
ClaimHost = Message.HostName;
ClaimUser = Message.HostUser;
}
}
void FTargetDeviceService::HandleUnclaimedMessage(const FTargetDeviceUnclaimed& Message, const IMessageContextRef& Context)
{
if (Message.DeviceName == DeviceName)
{
if (Context->GetSender() == ClaimAddress)
{
ClaimAddress.Invalidate();
ClaimHost.Empty();
ClaimUser.Empty();
}
}
}
void FTargetDeviceService::HandleDeployFileMessage(const FTargetDeviceServiceDeployFile& Message, const IMessageContextRef& Context)
{
if (!Running)
{
return;
}
Copying //UE4/Dev-Sequencer to //UE4/Dev-Main (Source: //UE4/Dev-Sequencer @ 3178529) #lockdown Nick.Penwarden #rb none ========================== MAJOR FEATURES + CHANGES ========================== Change 3149443 on 2016/10/03 by Max.Preussner MediaAssets: Better parameter names for MediaPlayer BP functions Change 3149756 on 2016/10/03 by Max.Chen Sequence Recorder: Set some settings to be clamped at 0 (sequence length, recording delay, audio gain, audio input buffer size, nearby actor recording proximity) #jira UE-35233 Change 3149795 on 2016/10/03 by Max.Chen Curve Editor: Set tangent to user when flattening or straightening tangents only when the tangent mode is auto and the interp mode is cubic. #jira UE-36734 Change 3150378 on 2016/10/04 by Max.Preussner PS4Media: Made video buffer sizes for file and HLS sources configurable (UE-36807) #jira UE-36807 Change 3151414 on 2016/10/05 by Max.Chen Sequencer: Fix case where restoring the last view target was getting skipped. It should always restore if the camera object and the unlock if camera actor object is null. #jira UE-35285 Change 3152038 on 2016/10/05 by Max.Preussner UdpMessaging: Code & documentation modernization pass Change 3152471 on 2016/10/05 by Max.Chen Cine Camera: Don't enable/disable actor ticking based soley on actor tracking since actor ticking is needed for other purposes. Instead, always enable actor ticking and only update actor tracking on tick if necessary. This fixes a bug where the cine camera actor won't tick if you hook in event tick. #jira UE-36625 Change 3152692 on 2016/10/05 by Max.Preussner Messaging: API code & documentation modernization pass Mostly removed shared pointer/ref typedefs as they prevent forward declarations and increase include complexity. Change 3153824 on 2016/10/06 by Max.Preussner Messaging: Renamed IConnectionBasedMessagingModule to ITcpMessagingModule and moved it into TcpMessaging I recommend that we refactor this API. The dependency should be reversed, i.e. instead of AndroidDeviceDiscovery depending on the TcpMessaging plug-in module, the Engine should provide a central registry that device discovery modules can notify, and that message transport plug-ins can register with and listen to OnConnectionAdded/Removed events etc. That way it supports an arbitrary number of transport plug-ins, and the Engine is not coupled to any of them. This functionality is not necessarily related to messaging, and the Messaging API is transport agnostic anyway. I'll think about this some more. Change 3153826 on 2016/10/06 by Max.Preussner Messaging: Removed remaining typedefs in IMessageTracer to enable forward declaration and reduce include dependencies Change 3153857 on 2016/10/06 by Max.Chen Sequencer: Set snap time to dragged key on by default. Change 3153980 on 2016/10/06 by Max.Preussner SessionServices: Removed typedefs; code and documentation modernization pass Change 3154313 on 2016/10/06 by Max.Chen Sequencer: Set the paste keys time to the current time, rather than the mouse time. Change 3154332 on 2016/10/06 by Max.Chen Sequencer: Remove click to rename shot functionality in the shot thumbnail. Added rename shot to the shot context menu. Change 3154377 on 2016/10/07 by Max.Chen Sequencer: Add ability to step to beginning and ends of sections/shots using the hotkeys: , and . Change 3154788 on 2016/10/07 by Max.Chen Sequencer: Fix offsets that created when moving multiple sections. The offsets were being created because section bounds were being generated for all sections except for the current section. Instead, they should be computed for all sections except for any that aren't being moved. #jira UE-29152 Change 3159274 on 2016/10/11 by Max.Preussner Core: Documentation fixes Change 3159275 on 2016/10/11 by Max.Preussner UdpMessaging: Added missing header Change 3160746 on 2016/10/12 by Max.Preussner MediaAssets: Added BP functions to query width, height, and aspect ratio of UMediaTexture instances #jira UE-37241 Change 3160975 on 2016/10/12 by Max.Preussner PS4Media: Better logging for SetRate failures Change 3160995 on 2016/10/12 by Max.Preussner MediaPlayerEditor: Fixed Media player selection is ignored if media specifies player overrides (UE-37248) #jira UE-37248 Change 3161066 on 2016/10/12 by Max.Preussner PS4Media: Enforcing minimum 8 byte alignment for media allocations Change 3161069 on 2016/10/12 by Max.Preussner PS4Media: Fixed log spam when setting play rate to current rate Change 3162567 on 2016/10/13 by Max.Preussner PS4Media: Made track switching code more readable Change 3163447 on 2016/10/14 by Max.Preussner PS4Media: Fixed array out of bounds assertions Change 3163772 on 2016/10/14 by Max.Preussner MfMedia: Fixed a number of timing related issues Change 3163980 on 2016/10/15 by Max.Chen Sequencer: Remove folder name numeric padding so that the naming convention is similar to creating objects in the level. Change 3164581 on 2016/10/17 by Andrew.Rodham Sequencer: Ensure global pre-animated state is restored in reverse order Change 3164582 on 2016/10/17 by Andrew.Rodham Sequencer: Ensure pre animated state is restored for all actor components before saving default state Change 3164583 on 2016/10/17 by Andrew.Rodham Sequencer: Re-enabled support for pre and post roll Change 3165464 on 2016/10/17 by Max.Chen Sequencer: Default number frame handles to 0 so that there's no change in behavior when rendering out a master sequence of shots. Handle frames need to enabled explicitly by the user. Copy from Release-4.14 #jira UE-37416 Change 3165483 on 2016/10/17 by Max.Chen Sequencer: Enable restore state for attach section completion Change 3165771 on 2016/10/18 by Andrew.Rodham Sequencer: Force evaluate when rendering thumbnails #jira UE-37321 Change 3166057 on 2016/10/18 by Andrew.Rodham Sequencer: Only set defaults for tracks that have no keys, and where the requested default has changed #jira UE-37285 Change 3166218 on 2016/10/18 by Max.Preussner MediaPlayerEditor: Failure opening media, even though it opened successfully (UE-37470) #jira UE-37470 Change 3166247 on 2016/10/18 by Max.Preussner WmfMedia: Showing progress bar while media is being resolved Change 3166289 on 2016/10/18 by Max.Preussner MfMedia: Showing progress bar while media is being resolved Change 3166993 on 2016/10/18 by Max.Preussner MfMedia: Fixed info string not reset on media close. Change 3166999 on 2016/10/19 by Max.Preussner Media: Fixed NV12 and NV21 support Change 3167008 on 2016/10/19 by Max.Preussner Media: Removed vertical NV12 alignment Change 3167029 on 2016/10/19 by Max.Preussner WmfMedia: Temp fix for RGB32 encoded AVIs rendering upside-down and too bright (UE-37505) #jira UE-37505 Change 3168593 on 2016/10/19 by Max.Chen Sequencer: Change paste at time to local time, so that the paste happens in the local time of the sequence rather than the global time if pasting in a shot level sequence. Change 3168626 on 2016/10/19 by Max.Chen Sequencer: Clamp to view bounds should snap to frame if frame snapping is on. Change 3168627 on 2016/10/19 by Max.Chen Sequencer: Initialize working and view range to be 10% larger than playback range. Change 3168760 on 2016/10/20 by Max.Preussner Media: Revamped media texture buffer management to support padded frames Added support for Windows bitmap buffers. Fixed a number of format, conversion and/or looping issues in WmfMedia and MfMedia. Not all shaders have been updated yet. Change 3169640 on 2016/10/20 by Max.Chen Sequencer: Add current camera to FLevelSequencePlayerSnapshot. Adjust DefaultBurnIn to include a few more parameters like focal length and focus distance. #jira UE-37407 Change 3170677 on 2016/10/21 by Max.Chen Movie Scene Capture: Add toggle to override engine scalability settings to cinematic scalability. #jira UE-36560 Change 3170710 on 2016/10/21 by Max.Preussner Media: Optimized handling of RGB input Change 3170712 on 2016/10/21 by Max.Preussner Media: Fixed NV21 conversion shader scaling Change 3170923 on 2016/10/21 by Max.Preussner UBT: Copied XboxOne project generator fix from Fortnite CL# 3170868 Change 3171494 on 2016/10/23 by Max.Chen Sequencer: Fix fbx export from master sequence not finding bound objects. #jira UE-35752 Change 3171506 on 2016/10/23 by Max.Chen Sequencer: Draw where in and out points of the shot section are, just like subsequences do. Change to only draw the green starting line if StartOffset is negative. #jira UE-35473 Change 3171743 on 2016/10/24 by Andrew.Rodham Editor: Added support for detail customizations on root structs - Also added the ability to add external struct data onto a detail category builder, and property type customization. Change 3171752 on 2016/10/24 by Andrew.Rodham Sequencer: Fixed spawnable ownership - Spawnables are no longer destroyed when the cursor leaves the master playback range. - Spawnable ownership now operates as it previously did before the evaluation rework. - bIgnoreOwnershipInEditor has been removed since its existence was a work around for when we didn't evaluate sub sequences from the master sequence. - FMovieSceneSequenceID is now a struct so that it can be used in array properties - Meta data now exists for each segment of an evaluation field. Currently this only includes the sub sequence IDs that exist at that time, but it may be expanded to include all evaluation entities (tracks + sections) in future so we don't have to calculate that at runtime. Change 3171756 on 2016/10/24 by Andrew.Rodham Sequencer: Added ability to trigger events with parameters - It's now possible to supply an event payload on event track keys which are to be passed to a given event. The structure must match the signature of the event, or a warning will be emitted. - Added a templated TGenericKeyArea, TKeyFrameManipulator and TCurveInterface that allow to generic manipulation of keyframe section data. In time we will port the other key areas over to this representation. - This new architecture affords the common manipulation of time-based keyframes in a value-agnostic manner. Change 3172935 on 2016/10/24 by Max.Preussner MediaPlayerEditor: Fixed MediaPlayer asset not being dirtied when creating media sound wave or texture for it Change 3173947 on 2016/10/25 by Max.Preussner SlateRemote: Disabled plug-in, but enabled server by default Change 3174510 on 2016/10/26 by Max.Chen Sequencer: Fix slomo track crash #jira UE-37802 Change 3174698 on 2016/10/26 by Andrew.Rodham UMG: Fixed objects bound to a panel slot animating their slot's content instead of the slot itself #jira UE-37775 Change 3174780 on 2016/10/26 by Max.Preussner MediaAssets: Accepting decoder defined buffer dimensions for RGB buffers Change 3174789 on 2016/10/26 by Max.Preussner MediaPlayerEditor: Showing desired player name instead of current player name if no media loaded Change 3174817 on 2016/10/26 by Max.Preussner WmfMedia: Added support for Motion JPEG (MJPG) Change 3174825 on 2016/10/26 by Max.Preussner WmfMedia: Added support for non-RGB32 uncompressed formats Change 3174834 on 2016/10/26 by Max.Preussner MediaPlayerAssets: Allow pausing while buffering media Change 3174886 on 2016/10/26 by Andrew.Rodham Core: Fixed range test that was testing incorrect behavior Change 3174889 on 2016/10/26 by Andrew.Rodham Sequencer: Fixed AssignActor behavior - Also ensure that cached object state is invalidated when playback context changes #jira UE-37798 Change 3174905 on 2016/10/26 by Andrew.Rodham Sequencer: Changed assert when failing to create an audio component to a log message - Audio no longer plays when GEngine->UseSound() is false #jira UE-37772 Change 3174980 on 2016/10/26 by Andrew.Rodham Sequencer: Remove warning when event endpoint could not be found for a given context #jira UE-37824 Change 3175001 on 2016/10/26 by Andrew.Rodham Sequencer: Evaluate sequence with EMovieScenePlaybackStatus::Jumping on Pause. - Also protect Pause() against reentrancy when being called from an event Change 3175012 on 2016/10/26 by Max.Chen Sequence Recorder: Fixes an empty working and view range after recording. On StopRecording() update playback range after nullifying the current sequence so that the playback range isn't empty. Added SetViewRange and SetWorkingRange. #jira UE-34191 Change 3177760 on 2016/10/28 by Max.Chen Sequence Recorder: Don't update the current sequence name if it's already set. This fixes a bug where if you pass in a sequence name to record to, it gets reset to the name in the sequence recorder settings. #jira UE-37808 Change 3178529 on 2016/10/28 by Max.Chen Matinee to Level Sequence: Added interface to extend the matinee to level sequence converter #jira UE-37328 #2864 [CL 3178562 by Max Chen in Main branch]
2016-10-28 15:04:38 -04:00
TSharedPtr<IMessageAttachment, ESPMode::ThreadSafe> Attachment = Context->GetAttachment();
if (Attachment.IsValid())
{
FArchive* FileReader = Attachment->CreateReader();
if (FileReader != nullptr)
{
FString DeploymentFolder = FPaths::EngineIntermediateDir() / TEXT("Deploy") / Message.TransactionId.ToString();
FString TargetPath = DeploymentFolder / Message.TargetFileName;
StoreDeployedFile(FileReader, TargetPath);
delete FileReader;
}
}
}
void FTargetDeviceService::HandleDeployCommitMessage(const FTargetDeviceServiceDeployCommit& Message, const IMessageContextRef& Context)
{
if (!Running)
{
return;
}
ITargetDevicePtr TargetDevice = GetDevice(Message.Variant);
if (TargetDevice.IsValid())
{
FString SourceFolder = FPaths::EngineIntermediateDir() / TEXT("Deploy") / Message.TransactionId.ToString();
FString OutAppId;
bool Succeeded = TargetDevice->Deploy(SourceFolder, OutAppId);
IFileManager::Get().DeleteDirectory(*SourceFolder, false, true);
MessageEndpoint->Send(new FTargetDeviceServiceDeployFinished(Message.Variant, OutAppId, Succeeded, Message.TransactionId), Context->GetSender());
}
}
void FTargetDeviceService::HandleLaunchAppMessage(const FTargetDeviceServiceLaunchApp& Message, const IMessageContextRef& Context)
{
if (!Running)
{
return;
}
ITargetDevicePtr TargetDevice = GetDevice(Message.Variant);
if (TargetDevice.IsValid())
{
uint32 ProcessId;
bool Succeeded = TargetDevice->Launch(Message.AppID, (EBuildConfigurations::Type)Message.BuildConfiguration, EBuildTargets::Game, Message.Params, &ProcessId);
if (MessageEndpoint.IsValid())
{
MessageEndpoint->Send(new FTargetDeviceServiceLaunchFinished(Message.AppID, ProcessId, Succeeded), Context->GetSender());
}
}
}
void FTargetDeviceService::HandlePingMessage(const FTargetDeviceServicePing& InMessage, const IMessageContextRef& Context)
{
if (!Running)
{
return;
}
if (!Shared && (InMessage.HostUser != FPlatformProcess::UserName(false)))
{
return;
}
ITargetDevicePtr DefaultDevice = GetDevice(); // Default Device is needed here!
if (DefaultDevice.IsValid())
{
const FString& PlatformName = DefaultDevice->GetTargetPlatform().PlatformName();
const PlatformInfo::FPlatformInfo* VanillaInfo = PlatformInfo::FindVanillaPlatformInfo(FName(*PlatformName));
FTargetDeviceServicePong* Message = new FTargetDeviceServicePong();
Message->Name = DefaultDevice->GetName();
Message->Type = TargetDeviceTypes::ToString(DefaultDevice->GetDeviceType());
Message->HostName = FPlatformProcess::ComputerName();
Message->HostUser = FPlatformProcess::UserName(false);
Message->Connected = DefaultDevice->IsConnected();
Message->Make = TEXT("@todo");
Message->Model = TEXT("@todo");
DefaultDevice->GetUserCredentials(Message->DeviceUser, Message->DeviceUserPassword);
Message->Shared = Shared;
Message->SupportsMultiLaunch = DefaultDevice->SupportsFeature(ETargetDeviceFeatures::MultiLaunch);
Message->SupportsPowerOff = DefaultDevice->SupportsFeature(ETargetDeviceFeatures::PowerOff);
Message->SupportsPowerOn = DefaultDevice->SupportsFeature(ETargetDeviceFeatures::PowerOn);
Message->SupportsReboot = DefaultDevice->SupportsFeature(ETargetDeviceFeatures::Reboot);
Message->SupportsVariants = DefaultDevice->GetTargetPlatform().SupportsVariants();
Message->DefaultVariant = FName(DefaultDevice->GetTargetPlatform().PlatformName().GetCharArray().GetData());
// Add the data for all the flavors
Message->Variants.SetNumZeroed(TargetDevicePtrs.Num());
int Index = 0;
for (auto TargetDeviceIt = TargetDevicePtrs.CreateIterator(); TargetDeviceIt; ++TargetDeviceIt, ++Index)
{
const ITargetDevicePtr& TargetDevice = TargetDeviceIt.Value().Pin();
const PlatformInfo::FPlatformInfo& Info = TargetDevice->GetTargetPlatform().GetPlatformInfo();
FTargetDeviceVariant& Variant = Message->Variants[Index];
Variant.DeviceID = TargetDevice->GetId().ToString();
Variant.VariantName = TargetDeviceIt.Key();
Variant.TargetPlatformName = TargetDevice->GetTargetPlatform().PlatformName();
Variant.TargetPlatformId = Info.TargetPlatformName;
Variant.VanillaPlatformId = Info.VanillaPlatformName;
Variant.PlatformDisplayName = Info.DisplayName.ToString();
}
MessageEndpoint->Send(Message, Context->GetSender());
}
}
void FTargetDeviceService::HandlePowerOffMessage( const FTargetDeviceServicePowerOff& Message, const IMessageContextRef& Context )
{
if (!Running)
{
return;
}
ITargetDevicePtr TargetDevice = GetDevice(); // Any Device is fine here
if (TargetDevice.IsValid())
{
TargetDevice->PowerOff(Message.Force);
}
}
void FTargetDeviceService::HandlePowerOnMessage( const FTargetDeviceServicePowerOn& Message, const IMessageContextRef& Context )
{
if (!Running)
{
return;
}
ITargetDevicePtr TargetDevice = GetDevice(); // Any Device is fine here
if (TargetDevice.IsValid())
{
TargetDevice->PowerOn();
}
}
void FTargetDeviceService::HandleRebootMessage( const FTargetDeviceServiceReboot& Message, const IMessageContextRef& Context )
{
if (!Running)
{
return;
}
ITargetDevicePtr TargetDevice = GetDevice(); // Any Device is fine here
if (TargetDevice.IsValid())
{
TargetDevice->Reboot();
}
}
void FTargetDeviceService::HandleRunExecutableMessage(const FTargetDeviceServiceRunExecutable& Message, const IMessageContextRef& Context)
{
if (!Running)
{
return;
}
ITargetDevicePtr TargetDevice = GetDevice(Message.Variant);
if (TargetDevice.IsValid())
{
uint32 OutProcessId;
bool Succeeded = TargetDevice->Run(Message.ExecutablePath, Message.Params, &OutProcessId);
MessageEndpoint->Send(new FTargetDeviceServiceRunFinished(Message.Variant, Message.ExecutablePath, OutProcessId, Succeeded), Context->GetSender());
}
}