76 lines
1.8 KiB
Go

package main
import (
"flag"
"fmt"
"minetest_client/commandclient"
"minetest_client/commands"
"os"
"os/signal"
)
func main() {
var host, username, password string
var port, skip int
var stalk, downloadmedia, help, ping bool
flag.StringVar(&host, "host", "127.0.0.1", "The hostname")
flag.IntVar(&port, "port", 30000, "The portname")
flag.IntVar(&skip, "skip", 0, "Skip some SRP sending to prevent 'access denied'")
flag.BoolVar(&help, "help", false, "Shows the help")
flag.StringVar(&username, "username", "test", "The username")
flag.StringVar(&password, "password", "enter", "The password")
flag.BoolVar(&stalk, "stalk", false, "Stalk mode: don't really join, just listen")
flag.BoolVar(&downloadmedia, "media", false, "Download media")
flag.BoolVar(&ping, "ping", false, "Just ping the given host:port and exit")
flag.Parse()
if help {
flag.Usage()
return
}
if ping {
fmt.Printf("Pinging to '%s:%d'\n", host, port)
ping_res, err := Ping(host, port)
if err != nil {
panic(err)
}
fmt.Printf("Ping successful: delay=%d ms, peer_id=%d\n",
ping_res.Delay.Milliseconds(), ping_res.PeerID)
return
}
fmt.Printf("Connecting to '%s:%d' with username '%s'\n", host, port, username)
client := commandclient.NewCommandClient(host, port)
ch := &ClientHandler{
Client: client,
Username: username,
Password: password,
StalkMode: stalk,
SkipSRP: skip,
DownloadMedia: downloadmedia,
}
cmd_chan := make(chan commands.Command, 500)
client.AddListener(cmd_chan)
go ch.HandlerLoop(cmd_chan)
err := client.Connect()
if err != nil {
panic(err)
}
c := make(chan os.Signal, 1)
signal.Notify(c, os.Interrupt)
<-c
fmt.Println("Sending disconnect")
err = client.Disconnect()
if err != nil {
panic(err)
}
}