76 lines
1.8 KiB
Go
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)
|
|
}
|
|
}
|