mctl/client/mcr.go
jake 77bb3166c4 starting sqlite rewrite
- adding db connector
- starting rewrite of commands
- WIP
2025-06-16 19:17:52 -04:00

63 lines
1.2 KiB
Go

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)
}