Пример #1
0
 public OrbisCtrl(TargetDevicePS4 Device, ILogger Logger, IDeploymentSession Callback, CancellationToken Token)
 {
     this.Device        = Device;
     this.Logger        = Logger;
     this.Callback      = Callback;
     this.Token         = Token;
     this.OrbisCtrlPath = Path.Combine(Environment.ExpandEnvironmentVariables("%SCE_ROOT_DIR%"), @"ORBIS\Tools\Target Manager Server\bin\orbis-ctrl.exe");
 }
        private bool UploadDirectory(IDeploymentSession Callback, SftpClient Sftp, string SourcePath, string DestinationPath, string DirSearchPattern)
        {
            if (Token.IsCancellationRequested)
            {
                return(false);
            }

            var SourceDirectories = Directory.GetDirectories(SourcePath, DirSearchPattern, SearchOption.TopDirectoryOnly);

            foreach (var SourceDirectory in SourceDirectories)
            {
                try
                {
                    DirectoryInfo SourceDirectoryInfo  = new DirectoryInfo(SourceDirectory);
                    string        DestinationDirectory = Path.Combine(DestinationPath, SourceDirectoryInfo.Name).Replace("\\", "/");
                    Sftp.CreateDirectory(DestinationDirectory);

                    var SourceFiles = Directory.GetFiles(SourceDirectory, "*.*", SearchOption.TopDirectoryOnly);
                    foreach (var SourceFile in SourceFiles)
                    {
                        if (Token.IsCancellationRequested)
                        {
                            return(false);
                        }

                        DirectoryInfo SourceFileInfo = new DirectoryInfo(SourceFile);
                        string        UploadFilePath = Path.Combine(DestinationDirectory, SourceFileInfo.Name).Replace("\\", "/");

                        using (var UploadFileStream = System.IO.File.OpenRead(SourceFile))
                        {
                            Sftp.UploadFile(UploadFileStream, UploadFilePath, true);

                            Logger.Info(string.Format(@"Copying file to {0}/{1}", Address, UploadFilePath));

                            Callback.OnFileDeployed(this, SourceFile);
                        }
                    }

                    if (!UploadDirectory(Callback, Sftp, SourceDirectory, DestinationDirectory, "*"))
                    {
                        return(false);
                    }
                }
                catch (Exception e)
                {
                    Logger.Error(string.Format("Upload directory threw an exception during file transfer '{0}'. Ex: {1}", SourceDirectory, e.Message));

                    return(false);
                }
            }

            return(true);
        }
Пример #3
0
        public override bool DeployBuild(BuildNode Build, IDeploymentSession Callback, CancellationToken Token)
        {
            this.Build    = Build;
            this.Callback = Callback;
            this.Token    = Token;

            try
            {
                if (!ResetProgress())
                {
                    return(CheckCancelationRequestAndReport());
                }

                if (!StopProcesses())
                {
                    return(CheckCancelationRequestAndReport());
                }

                if (!DeployBuild())
                {
                    return(CheckCancelationRequestAndReport());
                }

                // Only start downloaded servers automatically
                if (Build.Role.Equals(RoleType.Server.ToString()) && !StartProcess())
                {
                    return(CheckCancelationRequestAndReport());
                }

                Logger.Info(string.Format("Build {0} successfully deployed to Win64 machine {1}", Build.Number, Address));

                Callback.OnBuildDeployed(this, Build);

                return(true);
            }
            catch (Exception e)
            {
                Logger.Error(string.Format("Failed to deploy Win64 build {0} to device {1}. {2}", Build.Number, Address, e.Message));
            }

            return(CheckCancelationRequestAndReport());
        }
        private bool DeployBuild(BuildNode InBuild, IDeploymentSession Callback, CancellationToken Token)
        {
            foreach (var Device in Devices)
            {
                var Build = new BuildNode(InBuild.UseBuild, InBuild.Number, InBuild.Timestamp, InBuild.Path, InBuild.Platform, InBuild.Solution, InBuild.Role, InBuild.AutomatedTestStatus);

                Device.Build = Build;
                Build.Status = "Waiting for Device";

                ThreadHelperClass.DeployBuild(WinForm, DeviceView, Device);
            }

            foreach (var Device in Devices)
            {
                Device.ProjectConfig = WinForm.GetProject(Device.Build);
                Device.DeployBuild(Device.Build, Callback, Token);
            }

            return(true);
        }
        public override bool DeployBuild(BuildNode Build, IDeploymentSession Callback, CancellationToken Token)
        {
            this.Build    = Build;
            this.Callback = Callback;
            this.Token    = Token;

            try
            {
                if (!ResetProgress())
                {
                    return(CheckCancelationRequestAndReport());
                }

                if (!StopProcesses())
                {
                    return(CheckCancelationRequestAndReport());
                }

                if (!InstallBuild())
                {
                    return(CheckCancelationRequestAndReport());
                }

                if (!StartProcess())
                {
                    return(CheckCancelationRequestAndReport());
                }

                Logger.Info(string.Format("Build {0} successfully deployed to Linux machine {1}", Build.Number, Address));

                Callback.OnBuildDeployed(this, Build);

                return(true);
            }
            catch (Exception e)
            {
                Logger.Error(string.Format("Deploy build {0} failed with error {1}", Build.Number, e.Message));
            }

            return(CheckCancelationRequestAndReport());
        }
Пример #6
0
 public virtual bool DeployBuild(BuildNode Build, IDeploymentSession Callback, CancellationToken Token)
 {
     throw new NotImplementedException();
 }
        public override bool DeployBuild(BuildNode Build, IDeploymentSession Callback, CancellationToken Token)
        {
            try
            {
                this.Build    = Build;
                this.Callback = Callback;
                this.Token    = Token;

                OrbisCtrlProc = new OrbisCtrl(this, Logger, Callback, Token);

                if (!ResetProgress())
                {
                    return(CheckCancelationRequestAndReport());
                }

                Build.Progress++;

                // Add PS4 to Neighborhood.
                ITarget Target = TargetManager.AddTarget(Address);

                SetMappedDirectory(Target);

                LogDeviceDetails(Target);

                Build.Progress++;

                if (Target.PowerStatus != ePowerStatus.POWER_STATUS_ON)
                {
                    Target.PowerOn();
                }

                if (!OrbisCtrlProc.Execute("pkill"))
                {
                    return(false);
                }

                int ExitCode = 0;
                while (!OrbisCtrlProc.HasExited(out ExitCode))
                {
                    if (Token.IsCancellationRequested)
                    {
                        OrbisCtrlProc.Kill();

                        Callback.OnBuildDeployedAborted(this, Build);

                        return(false);
                    }

                    Logger.Info(string.Format("Waiting for PS4 process to exit on PS4 device {0}", Address));
                }

                Build.Progress++;

                if (!InstallPackage())
                {
                    return(CheckCancelationRequestAndReport());
                }

                Build.Progress++;

                Callback.OnBuildDeployed(this, Build);
            }
            catch (Exception e)
            {
                Callback.OnBuildDeployedError(this, Build, e.Message);

                Logger.Error(string.Format("Failed to deploy build to PS4 device '{0}'. Ex: {1}", Address, e.Message));
            }
            return(false);
        }