- moved mcr code to package - added the save, run, and view commands - commands can now be saved - saved commands support placeholders
60 lines
1.2 KiB
Go
60 lines
1.2 KiB
Go
package client
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"code.jakeyoungdev.com/jake/mctl/cryptography"
|
|
"github.com/jake-young-dev/mcr"
|
|
"github.com/spf13/viper"
|
|
)
|
|
|
|
/*
|
|
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() (*Client, error) {
|
|
//grab saved credentials
|
|
server := viper.Get("server").(string)
|
|
password := viper.Get("password").(string)
|
|
port := viper.Get("port").(int)
|
|
fmt.Printf("Logging into %s on port %d\n", server, port)
|
|
|
|
//decrypt password
|
|
pt, err := cryptography.DecryptPassword([]byte(password))
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
//connect to game server
|
|
cli := mcr.NewClient(server, mcr.WithPort(port))
|
|
err = cli.Connect(string(pt))
|
|
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)
|
|
}
|