From 3dad3f60f280289dee1b34ae04744f244d070bf7 Mon Sep 17 00:00:00 2001 From: Julien Dessaux Date: Thu, 13 Feb 2025 21:35:32 +0100 Subject: [golang] Bootstrap contracting and refactor the agent code --- golang/cmd/spacetraders/main.go | 77 ++--------------------------------------- 1 file changed, 2 insertions(+), 75 deletions(-) (limited to 'golang/cmd') 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 -} -- cgit v1.2.3