// Copyright Epic Games, Inc. All Rights Reserved.
using System;
using System.Collections.Generic;
using System.IO;
using AutomationTool;
using UnrealBuildTool;
using System.Text.RegularExpressions;
namespace Gauntlet
{
class NullAppInstance : IAppInstance
{
public NullAppInstance(ITargetDevice InDevice)
{
Device = InDevice;
HasExited = true;
}
public string ArtifactPath
{
get
{
return Globals.TempDir;
}
}
public string CommandLine { get { return ""; } }
public ITargetDevice Device { get; protected set; }
public bool HasExited { get; protected set; }
public bool WasKilled { get; protected set; }
public string StdOut { get { return ""; } }
public ILogStreamReader GetLogReader() { return new DynamicStringReader(() => ""); }
public ILogStreamReader GetLogBufferReader() { return new DynamicStringReader(() => ""); }
public bool WriteOutputToFile(string FilePath) { return false; }
public int ExitCode { get { return 0; }}
public void Kill(bool GenerateDump)
{
if (!HasExited)
{
WasKilled = true;
HasExited = true;
}
}
public int WaitForExit()
{
HasExited = true;
return 0;
}
}
class NullAppInstall : IAppInstall
{
public ITargetDevice Device { get; protected set; }
public string Name { get; protected set; }
public string CommandLine { get; protected set; }
public NullAppInstall(string InName, TargetDeviceNull InDevice, string InCommandLine)
{
Name = InName;
Device = InDevice;
CommandLine = InCommandLine;
}
public IAppInstance Run()
{
return Device.Run(this);
}
}
public class NullDeviceFactory : IDeviceFactory
{
public bool CanSupportPlatform(UnrealTargetPlatform? Platform)
{
return Platform == null;
}
public ITargetDevice CreateDevice(string InRef, string InCachePath, string InParam = null)
{
return new TargetDeviceNull(InRef);
}
}
///
/// Win32/64 implementation of a device to run applications
///
public class TargetDeviceNull : ITargetDevice
{
public string Name { get; protected set; }
protected Dictionary LocalDirectoryMappings { get; set; }
public TargetDeviceNull(string InName)
{
Name = InName;
LocalDirectoryMappings = new Dictionary();
}
#region IDisposable Support
private bool disposedValue = false; // To detect redundant calls
protected virtual void Dispose(bool disposing)
{
if (!disposedValue)
{
if (disposing)
{
// TODO: dispose managed state (managed objects).
}
// TODO: free unmanaged resources (unmanaged objects) and override a finalizer below.
// TODO: set large fields to null.
disposedValue = true;
}
}
// This code added to correctly implement the disposable pattern.
public void Dispose()
{
// Do not change this code. Put cleanup code in Dispose(bool disposing) above.
Dispose(true);
// TODO: uncomment the following line if the finalizer is overridden above.
// GC.SuppressFinalize(this);
}
#endregion
public CommandUtils.ERunOptions RunOptions { get; set; }
public IAppInstance Run(IAppInstall App)
{
NullAppInstall NullApp = App as NullAppInstall;
if (NullApp == null)
{
throw new DeviceException("AppInstance is of incorrect type!");
}
Log.Info("Launching {0} on {1}", App.Name, ToString());
Log.Info("\t{0}", NullApp.CommandLine);
return new NullAppInstance(this);
}
public IAppInstall InstallApplication(UnrealAppConfig AppConfig)
{
return new NullAppInstall(AppConfig.Name, this, AppConfig.CommandLine);
}
public void FullClean()
{
}
public void CleanArtifacts(UnrealAppConfig AppConfig = null)
{
}
public string LocalCachePath => null;
public void InstallBuild(UnrealAppConfig AppConfiguration)
{
}
public IAppInstall CreateAppInstall(UnrealAppConfig AppConfig)
{
return null;
}
public void CopyAdditionalFiles(IEnumerable FilesToCopy)
{
}
public UnrealTargetPlatform? Platform { get { return null; } }
public bool IsAvailable { get { return true; } }
public bool IsConnected { get { return true; } }
public bool IsOn { get { return true; } }
public bool PowerOn() { return true; }
public bool PowerOff() { return true; }
public bool Reboot() { return true; }
public bool Connect() { return true; }
public bool Disconnect(bool bForce = false) { return true; }
public override string ToString()
{
return Name;
}
public Dictionary GetPlatformDirectoryMappings()
{
if (LocalDirectoryMappings.Count == 0)
{
Log.Warning("Platform directory mappings have not been populated for this platform! This should be done within InstallApplication()");
}
return LocalDirectoryMappings;
}
}
}