功能修改

This commit is contained in:
npc0-hue
2026-07-20 16:42:33 +08:00
parent 48b8ad8d6c
commit a0e69417db
224 changed files with 22015 additions and 884 deletions
+63 -1
View File
@@ -525,6 +525,64 @@ func findRuntimeClientManagerProfile(plugin domain.GamePlugin, profileKey string
return domain.RuntimeClientManagerProfile{}, repo.ErrNotFound
}
func clientManagerCompanionConfigInput(plugin domain.GamePlugin, profile domain.RuntimeClientManagerProfile, installation domain.ClientManagerInstallation, artifactID, version, revision string) (*domain.ClientManagerCompanionConfigInput, error) {
companion := plugin.GameClientBridge.Companion
if companion == (domain.GameClientBridgeCompanionDeclaration{}) {
return nil, nil
}
if companion.ProfileKey == "" {
return nil, validationError("client-manager companion declaration is incomplete")
}
if companion.ProfileKey != installation.ProfileKey {
return nil, nil
}
var configTemplate domain.RuntimeConfigTemplate
found := false
for _, candidate := range profile.ConfigTemplates {
if candidate.Key == companion.ConfigTemplateKey {
configTemplate = candidate
found = true
break
}
}
if !found || strings.TrimSpace(configTemplate.TemplateRef) == "" || configTemplate.OutputRef != "config.yaml" {
return nil, validationError("client-manager companion config template is unavailable")
}
config := domain.ClientManagerCompanionConfigInput{
SchemaVersion: domain.ClientManagerCompanionConfigSchemaVersion,
ConfigTemplateKey: companion.ConfigTemplateKey,
ConfigTemplateRef: configTemplate.TemplateRef,
ConfigOutputRef: configTemplate.OutputRef,
ConfigSchemaRef: companion.ConfigSchemaRef,
ConfigFormat: companion.ConfigFormat,
PlatformBaseURLSource: companion.PlatformBaseURLSource,
InstallationID: installation.ID,
ServerInstanceID: installation.ServerInstanceID,
PluginID: plugin.ID,
ProfileKey: installation.ProfileKey,
ArtifactID: artifactID,
Version: version,
SourceRevision: revision,
TargetOS: installation.TargetOS,
TargetArch: installation.TargetArch,
KeyGeneration: installation.KeyGeneration,
DeploymentGeneration: installation.DeploymentGeneration,
Capabilities: domain.CopyStringSlice(profile.Health.RequiredCapabilities),
RegistrationProof: companion.RegistrationProof,
ProofMaterialSource: companion.ProofMaterialSource,
ProofMaterialEnv: companion.ProofMaterialEnv,
SessionMode: companion.SessionMode,
TLSPolicy: companion.TLSPolicy,
HeartbeatIntervalSeconds: companion.HeartbeatIntervalSeconds,
CommandPollIntervalSeconds: companion.CommandPollIntervalSeconds,
RequestTimeoutSeconds: companion.RequestTimeoutSeconds,
}
if err := validator.ValidateClientManagerCompanionConfigInput(config); err != nil {
return nil, err
}
return &config, nil
}
func clientManagerProfileSupportsTarget(profile domain.RuntimeClientManagerProfile, targetOS, targetArch string) bool {
for _, target := range profile.SupportedTargets {
if target.OS == targetOS && target.Arch == targetArch {
@@ -755,7 +813,11 @@ func (svc *CoreService) GetClientManagerLifecycleInput(request domain.ClientMana
revision = installation.ActiveRevision
checksum = ""
}
return domain.CopyClientManagerLifecycleInput(domain.ClientManagerLifecycleInput{InstallationID: installation.ID, ServerInstanceID: installation.ServerInstanceID, ProfileKey: installation.ProfileKey, Operation: operation, ArtifactID: artifactID, Checksum: checksum, TargetOS: installation.TargetOS, TargetArch: installation.TargetArch, Version: version, SourceRevision: revision, KeyGeneration: installation.KeyGeneration, DeploymentGeneration: installation.DeploymentGeneration, ExecutableRef: profile.Deployment.ExecutableRef, Arguments: profile.Deployment.Arguments, AutoStart: profile.Deployment.AutoStart, StartupTimeoutSeconds: profile.Lifecycle.StartupTimeoutSeconds, StopTimeoutSeconds: profile.Lifecycle.StopTimeoutSeconds, HealthConfirmationSeconds: profile.UpdatePolicy.HealthConfirmationSeconds, IdempotencyKey: job.IdempotencyKey}), nil
companionConfig, err := clientManagerCompanionConfigInput(plugin, profile, installation, artifactID, version, revision)
if err != nil {
return domain.ClientManagerLifecycleInput{}, err
}
return domain.CopyClientManagerLifecycleInput(domain.ClientManagerLifecycleInput{InstallationID: installation.ID, ServerInstanceID: installation.ServerInstanceID, ProfileKey: installation.ProfileKey, Operation: operation, ArtifactID: artifactID, Checksum: checksum, TargetOS: installation.TargetOS, TargetArch: installation.TargetArch, Version: version, SourceRevision: revision, KeyGeneration: installation.KeyGeneration, DeploymentGeneration: installation.DeploymentGeneration, ExecutableRef: profile.Deployment.ExecutableRef, Arguments: profile.Deployment.Arguments, AutoStart: profile.Deployment.AutoStart, StartupTimeoutSeconds: profile.Lifecycle.StartupTimeoutSeconds, StopTimeoutSeconds: profile.Lifecycle.StopTimeoutSeconds, HealthConfirmationSeconds: profile.UpdatePolicy.HealthConfirmationSeconds, IdempotencyKey: job.IdempotencyKey, CompanionConfig: companionConfig}), nil
}
func (svc *CoreService) ReadClientManagerLifecycleChunk(request domain.RunUpdateChunkRequest) (domain.RunUpdateChunk, error) {