summaryrefslogtreecommitdiff
path: root/golang/cmd
diff options
context:
space:
mode:
authorJulien Dessaux2025-02-13 21:35:32 +0100
committerJulien Dessaux2025-02-13 21:35:32 +0100
commit3dad3f60f280289dee1b34ae04744f244d070bf7 (patch)
tree2e3d5ba10b1ac104708f557a520146f47fd6bf1f /golang/cmd
parent[golang] update for registration API breaking changes (diff)
downloadspacetraders-3dad3f60f280289dee1b34ae04744f244d070bf7.tar.gz
spacetraders-3dad3f60f280289dee1b34ae04744f244d070bf7.tar.bz2
spacetraders-3dad3f60f280289dee1b34ae04744f244d070bf7.zip
[golang] Bootstrap contracting and refactor the agent code
Diffstat (limited to 'golang/cmd')
-rw-r--r--golang/cmd/spacetraders/main.go77
1 files changed, 2 insertions, 75 deletions
diff --git a/golang/cmd/spacetraders/main.go b/golang/cmd/spacetraders/main.go
index d21e64b..bae6c27 100644
--- a/golang/cmd/spacetraders/main.go
+++ b/golang/cmd/spacetraders/main.go
@@ -2,12 +2,12 @@ package main
import (
"context"
- "errors"
"fmt"
"log/slog"
"os"
"os/signal"
+ "git.adyxax.org/adyxax/spacetraders/golang/pkg/agent"
"git.adyxax.org/adyxax/spacetraders/golang/pkg/api"
"git.adyxax.org/adyxax/spacetraders/golang/pkg/database"
)
@@ -37,7 +37,7 @@ func main() {
apiClient := api.NewClient(ctx)
defer apiClient.Close()
- if err := run(
+ if err := agent.Run(
apiClient,
db,
os.Getenv,
@@ -49,76 +49,3 @@ func main() {
os.Exit(2)
}
}
-
-func run(
- apiClient *api.Client,
- db *database.DB,
- getenv func(string) string,
-) error {
- accountToken := getenv("SPACETRADERS_ACCOUNT_TOKEN")
- if accountToken == "" {
- return fmt.Errorf("the SPACETRADERS_ACCOUNT_TOKEN environment variable is not set")
- }
- agent := getenv("SPACETRADERS_AGENT")
- if agent == "" {
- return fmt.Errorf("the SPACETRADERS_AGENT environment variable is not set")
- }
- faction := getenv("SPACETRADERS_FACTION")
- if faction == "" {
- return fmt.Errorf("the SPACETRADERS_FACTION environment variable is not set")
- }
- // ----- Get token or register ---------------------------------------------
- apiClient.SetToken(accountToken)
- register, err := apiClient.Register(faction, agent)
- if err != nil {
- apiError := &api.APIError{}
- if errors.As(err, &apiError) {
- switch apiError.Code {
- case 4111: // Agent symbol has already been claimed
- token, err := db.GetToken()
- if err != nil || token == "" {
- return fmt.Errorf("failed to register and failed to get a token from the database: someone stole our agent's callsign: %w", err)
- }
- apiClient.SetToken(token)
- agent, err := apiClient.MyAgent()
- if err != nil {
- return fmt.Errorf("failed to get agent: %w", err)
- }
- slog.Info("agent", "/my/agent", agent)
- default:
- return fmt.Errorf("failed to register: %w", err)
- }
- } else {
- return fmt.Errorf("failed to register with an invalid apiError: %w", err)
- }
- } else {
- token, err := db.GetToken()
- if err != nil || token == "" {
- if err := db.AddToken(register.Token); err != nil {
- return fmt.Errorf("failed to save token: %w", err)
- }
- apiClient.SetToken(register.Token)
- } else {
- // We successfully registered but have a tainted database
- slog.Error("token", "token", register.Token)
- return fmt.Errorf("TODO server reset not implemented yet")
- }
- }
- // ----- run agent ---------------------------------------------------------
- ships, err := apiClient.MyShips()
- if err != nil {
- return err
- }
- slog.Info("start", "ship", ships[0].Nav.Status, "err", err)
- err = apiClient.Orbit(&ships[0])
- if err != nil {
- return err
- }
- slog.Info("orbit", "ship", ships[0].Nav.Status, "err", err)
- err = apiClient.Dock(&ships[0])
- if err != nil {
- return err
- }
- slog.Info("dock", "ship", ships[0].Nav.Status, "err", err)
- return nil
-}