feat: 完整游戏运维功能

This commit is contained in:
npc0-hue
2026-07-18 09:04:01 +08:00
parent f3b14b7945
commit 48b8ad8d6c
187 changed files with 16607 additions and 1140 deletions
+13 -1
View File
@@ -1,6 +1,7 @@
package service
import (
"errors"
"fmt"
"net/url"
"sort"
@@ -8,10 +9,11 @@ import (
"time"
"browser.local/platform/domain"
"browser.local/platform/repo"
"browser.local/platform/validator"
)
const artifactDownloadStorageBehavior = "platform-memory-transfer-session"
const artifactDownloadStorageBehavior = "platform-durable-artifact-store"
func (svc *CoreService) GetArtifactForSession(sessionID string, artifactID string) (domain.Artifact, error) {
artifact, err := svc.store.Artifacts().Get(strings.TrimSpace(artifactID))
@@ -160,6 +162,12 @@ func (svc *CoreService) artifactPayload(artifactID string) ([]byte, error) {
if payload, exists := svc.artifactPayloads[artifactID]; exists {
return domain.CopyBytes(payload), nil
}
if payload, err := svc.artifactStore.GetPayload(artifactID); err == nil {
svc.artifactPayloads[artifactID] = domain.CopyBytes(payload)
return payload, nil
} else if !errors.Is(err, repo.ErrNotFound) {
return nil, err
}
sessions := make([]domain.ArtifactTransferSession, 0, len(svc.artifactTransfers))
for _, session := range svc.artifactTransfers {
@@ -183,6 +191,10 @@ func (svc *CoreService) artifactPayload(artifactID string) ([]byte, error) {
if int64(len(payload)) != session.SizeBytes {
return nil, validationError("artifact content size does not match transfer")
}
if err := svc.artifactStore.PutPayload(artifactID, payload); err != nil {
return nil, err
}
svc.artifactPayloads[artifactID] = domain.CopyBytes(payload)
return payload, nil
}