game server register and status added

This commit is contained in:
darius 2024-05-24 23:10:45 +02:00
parent 9c1460fa1f
commit 6428dc557d
5 changed files with 163 additions and 3 deletions

28
commands/games/games.go Normal file
View File

@ -0,0 +1,28 @@
package games
import (
"github.com/DariusKlein/kleinCommand/types"
"github.com/urfave/cli/v2"
)
var config types.Config
func Command(conf types.Config) *cli.Command {
config = conf
return &cli.Command{
Name: "games",
Usage: "manage game servers",
Aliases: []string{"gs"},
Action: action,
Subcommands: subcommands(),
HideHelpCommand: true,
}
}
func action(c *cli.Context) error {
err := cli.ShowSubcommandHelp(c)
if err != nil {
return err
}
return nil
}

View File

@ -0,0 +1,127 @@
package games
import (
"fmt"
"github.com/BurntSushi/toml"
"github.com/DariusKlein/kleinCommand/services"
"github.com/DariusKlein/kleinCommand/types"
"github.com/urfave/cli/v2"
"os"
"os/exec"
"strconv"
"strings"
)
func subcommands() []*cli.Command {
return []*cli.Command{
{
Name: "register",
Usage: "Register game server",
Action: registerAction,
Flags: registerFlags(),
},
{
Name: "list",
Usage: "List of game servers",
Aliases: []string{"l"},
Action: listAction,
Flags: []cli.Flag{},
},
{
Name: "status",
Usage: "Get status of game servers",
Aliases: []string{"s"},
Action: statusAction,
Flags: []cli.Flag{},
},
}
}
func registerAction(c *cli.Context) error {
for _, games := range config.CustomCommands.Games {
if games.Name == c.String("name") {
return fmt.Errorf("game '%s' already exists", games.Name)
}
}
config.CustomCommands.Games = append(config.CustomCommands.Games, types.Games{
Name: c.String("name"),
StatusCommand: c.String("status"),
StartCommand: c.String("start_command"),
StopCommand: c.String("stop_command"),
})
configString, err := toml.Marshal(config)
if err != nil {
return err
}
_, configPath, err := services.GetConfigPath()
if err != nil {
fmt.Println(err)
}
err = os.WriteFile(configPath, configString, 0644)
if err != nil {
return err
}
return nil
}
func registerFlags() []cli.Flag {
return []cli.Flag{
&cli.StringFlag{
Name: "name",
Aliases: []string{"n"},
Usage: "Game server name",
Required: true,
},
&cli.StringFlag{
Name: "status_command",
Aliases: []string{"status"},
Usage: "Game server status command",
Required: true,
},
&cli.StringFlag{
Name: "start_command",
Aliases: []string{"start"},
Usage: "Game server start command",
Required: true,
},
&cli.StringFlag{
Name: "stop_command",
Aliases: []string{"stop"},
Usage: "Game server stop command",
Required: true,
},
}
}
func listAction(c *cli.Context) error {
fmt.Println("List of game servers")
for i, game := range config.CustomCommands.Games {
fmt.Println(
strconv.Itoa(i+1) + ") \n" +
"\tName: " + game.Name +
"\n\tStatus command: " + game.StatusCommand +
"\n\tStart command: " + game.StartCommand +
"\n\tStop command: " + game.StopCommand)
}
return nil
}
func statusAction(c *cli.Context) error {
fmt.Println("List of game servers")
for _, game := range config.CustomCommands.Games {
command := strings.Fields(game.StatusCommand)
cmd := exec.Command(command[0], command[1:]...)
stdout, err := cmd.Output()
if err != nil {
return err
}
fmt.Println(game.Name + ": " + string(stdout))
}
return nil
}

View File

@ -14,6 +14,6 @@ int1=1
# Generate commands with kleinCommand or configure here
[[custom_commands.games]]
name = "example"
status_command="example"
start_command="example"
stop_command="example"
status_command="docker ps --format '{{.Names}}'"
start_command="echo start"
stop_command="echo stop"

View File

@ -4,6 +4,7 @@ import (
"github.com/DariusKlein/kleinCommand/commands/boom"
"github.com/DariusKlein/kleinCommand/commands/bubbleTeaTest"
"github.com/DariusKlein/kleinCommand/commands/config"
"github.com/DariusKlein/kleinCommand/commands/games"
"github.com/DariusKlein/kleinCommand/commands/template"
"github.com/DariusKlein/kleinCommand/commands/welcome"
"github.com/DariusKlein/kleinCommand/services"
@ -34,6 +35,7 @@ func main() {
boom.Command(Config),
bubbleTeaTest.Command(Config),
config.Command(Config),
games.Command(Config),
},
}

View File

@ -21,6 +21,9 @@ func ReadConfig() (types.Config, error) {
}
_, err = toml.Decode(string(file), &config)
if err != nil {
return config, err
}
return config, nil
}