package client import ( "encoding/base64" "fmt" "code.jakeyoungdev.com/jake/mctl/database" "github.com/jake-young-dev/mcr" ) /* This is a simple wrapper for the MCR client to provide easy use of mcr without having to manually decrypt the password/hit viper each time. */ type Client struct { cli mcr.Client } type IClient interface { Close() Command(cmd string) (string, error) } // creates a new mcr client using saved credentials and decrypted password func New(name string) (*Client, error) { db, err := database.New() if err != nil { return nil, err } defer db.Close() srv, err := db.GetServer(name) if err != nil { return nil, err } fmt.Printf("Logging into %s on port %d\n", srv.Server, srv.Port) var p []byte _, err = base64.StdEncoding.Decode(p, []byte(srv.Password)) //connect to game server cli := mcr.NewClient(srv.Server, mcr.WithPort(srv.Port)) err = cli.Connect(string(p)) if err != nil { return nil, err } return &Client{ cli: cli, }, nil } // closes client connection func (c *Client) Close() error { return c.cli.Close() } // sends command to server, only exists to prevent exposing cli field func (c *Client) Command(cmd string) (string, error) { return c.cli.Command(cmd) }