コード例 #1
0
        public override async Task <IResponseMessage> Process(ProjectPackagePushRequest requestMessage)
        {
            try {
                if (!PhotonServer.Instance.Sessions.TryGet(requestMessage.ServerSessionId, out var session))
                {
                    throw new Exception($"Agent Session ID '{requestMessage.ServerSessionId}' not found!");
                }

                var metadata = await ProjectPackageTools.GetMetadataAsync(requestMessage.Filename);

                if (metadata == null)
                {
                    throw new ApplicationException("No metadata found!");
                }

                await PhotonServer.Instance.ProjectPackages.Add(requestMessage.Filename);

                session.PushedProjectPackageList.Add(new PackageReference(metadata.Id, metadata.Version));
            }
            finally {
                try { File.Delete(requestMessage.Filename); }
                catch {}
            }

            return(new ProjectPackagePushResponse());
        }
コード例 #2
0
        public async Task Add(string filename)
        {
            var metadata = await ProjectPackageTools.GetMetadataAsync(filename);

            if (metadata == null)
            {
                throw new Exception("No metadata file found in package!");
            }

            await base.Add(filename, metadata);
        }
コード例 #3
0
ファイル: ProjectPackageCache.cs プロジェクト: wlclass/Photon
        private async Task <ProjectPackage> LoadItem(string packageId, string version)
        {
            var packageMgr = PhotonServer.Instance.ProjectPackages;

            if (!packageMgr.TryGet(packageId, version, out var filename))
            {
                throw new ApplicationException($"Package '{packageId}' version '{version}' not found!");
            }

            return(await ProjectPackageTools.GetMetadataAsync(filename));
        }
コード例 #4
0
ファイル: ServerSessionBase.cs プロジェクト: lulzzz/Photon
        private void PackageClient_OnPushProjectPackage(string filename, RemoteTaskCompletionSource taskHandle)
        {
            Task.Run(async() => {
                var metadata = await ProjectPackageTools.GetMetadataAsync(filename);
                if (metadata == null)
                {
                    throw new ApplicationException($"Invalid Project Package '{filename}'! No metadata found.");
                }

                await projectPackages.Add(filename);
                PushedProjectPackageList.Add(new PackageReference(metadata.Id, metadata.Version));
            }).ContinueWith(taskHandle.FromTask);
        }
コード例 #5
0
        public override async Task <HttpHandlerResult> PostAsync(CancellationToken token)
        {
            var qProjectId            = GetQuery("project");
            var projectPackageId      = GetQuery("package");
            var projectPackageVersion = GetQuery("version");
            var environmentName       = GetQuery("env");

            if (string.IsNullOrWhiteSpace(projectPackageId))
            {
                return(Response.BadRequest().SetText("'package' is undefined!"));
            }

            if (string.IsNullOrWhiteSpace(projectPackageVersion))
            {
                return(Response.BadRequest().SetText("'version' is undefined!"));
            }

            try {
                if (!PhotonServer.Instance.ProjectPackages.TryGet(projectPackageId, projectPackageVersion, out var packageFilename))
                {
                    return(Response.BadRequest().SetText($"Project Package '{projectPackageId}.{projectPackageVersion}' was not found!"));
                }

                var metadata = await ProjectPackageTools.GetMetadataAsync(packageFilename);

                var projectId = metadata.ProjectId;

                if (!string.IsNullOrEmpty(qProjectId))
                {
                    projectId = qProjectId;
                }

                if (string.IsNullOrEmpty(projectId))
                {
                    throw new ApplicationException("'project' is undefined!");
                }

                if (!PhotonServer.Instance.Projects.TryGet(projectId, out var project))
                {
                    return(Response.BadRequest().SetText($"Project '{projectId}' was not found!"));
                }

                var deployment = await project.StartNewDeployment();

                deployment.PackageId       = projectPackageId;
                deployment.PackageVersion  = projectPackageVersion;
                deployment.EnvironmentName = environmentName;
                //deployment.ScriptName = ?;

                var session = new ServerDeploySession {
                    Project                = project.Description,
                    Deployment             = deployment,
                    ProjectPackageId       = projectPackageId,
                    ProjectPackageVersion  = projectPackageVersion,
                    ProjectPackageFilename = packageFilename,
                    EnvironmentName        = environmentName,
                };

                deployment.ServerSessionId = session.SessionId;

                PhotonServer.Instance.Sessions.BeginSession(session);
                PhotonServer.Instance.Queue.Add(session);

                var response = new HttpDeployStartResponse {
                    SessionId = session.SessionId,
                };

                return(Response.Json(response));
            }
            catch (Exception error) {
                Log.Error($"Deployment of Project Package '{projectPackageId}.{projectPackageVersion}' has failed!", error);
                return(Response.Exception(error));
            }
        }