From eab4df2b257154c75caa3e5b86008067eb36b0a6 Mon Sep 17 00:00:00 2001 From: Tnze Date: Tue, 18 Jun 2019 14:37:33 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=8D=E5=86=99=E4=BA=86ping=E7=A4=BA?= =?UTF-8?q?=E4=BE=8B=EF=BC=8C=E7=8E=B0=E5=9C=A8=E5=AE=83=E6=98=AF=E4=B8=80?= =?UTF-8?q?=E4=B8=AA=E5=AE=9E=E7=94=A8=E7=9A=84=E5=B7=A5=E5=85=B7=E4=BA=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .DS_Store | Bin 0 -> 6148 bytes cmd/mcping/README.md | 5 +++ cmd/mcping/mcping.go | 89 +++++++++++++++++++++++++++++++++++++++++++ cmd/ping/ping.go | 21 ---------- go.mod | 6 ++- go.sum | 7 ++++ 6 files changed, 106 insertions(+), 22 deletions(-) create mode 100644 .DS_Store create mode 100644 cmd/mcping/README.md create mode 100644 cmd/mcping/mcping.go delete mode 100644 cmd/ping/ping.go diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..2850ee485f848d5e69ecde202dc94634b5499a7d GIT binary patch literal 6148 zcmeHKu};G<5PjD~s0D^@FlJ;zVrB_dIxw)n570CfMQX`Fx@X}Z_yxX?4}f>JsZs~F z3L$hSouBQzJIBvf90QQarn&&e0ETqM!HC5-rq9)THV8e3L~%J5ctV3m%rWb+t>Z5$ zplf%`)!J~~mgufugT?i#o|mh-Bu6*MCH?Hf8EZg-5;dBL^%k*G?uI2th#VvFY?_$@rhqB12L*U$s|}AlT4@TH0;a%L0sTH?bj3Vi z>(PBWShyYncM3z`s&J(&Da|a7y89?M+V4+Khfr qS5sc=aT~&lJBrEGqxh8WjQyEbh[:port]` \ No newline at end of file diff --git a/cmd/mcping/mcping.go b/cmd/mcping/mcping.go new file mode 100644 index 0000000..6658329 --- /dev/null +++ b/cmd/mcping/mcping.go @@ -0,0 +1,89 @@ +// Useage: go run cmd/ping/ping.go localhost +package main + +import ( + "encoding/json" + "fmt" + "os" + "strconv" + "strings" + + "github.com/Tnze/go-mc/bot" + "github.com/Tnze/go-mc/chat" + uuid "github.com/satori/go.uuid" +) + +type status struct { + Description chat.Message + Players struct { + Max int + Online int + Sample []struct { + ID uuid.UUID + Name string + } + } + Version struct { + Name string + Protocol int + } + //favicon ignored +} + +func main() { + addr, port := getAddr() + + fmt.Printf("MCPING (%s:%d):\n", addr, port) + + resp, delay, err := bot.PingAndList(addr, port) + if err != nil { + fmt.Printf("ping and list server fail: %v", err) + os.Exit(1) + } + + var s status + err = json.Unmarshal(resp, &s) + if err != nil { + fmt.Print("unmarshal resp fail:", err) + os.Exit(1) + } + + fmt.Print(s) + fmt.Println("Delay:", delay) +} + +func getAddr() (string, int) { + const useage = "Useage: mcping [:port]" + if len(os.Args) < 2 { + fmt.Println("no host name.", useage) + os.Exit(1) + } + + addr := strings.Split(os.Args[1], ":") + var port int + switch len(addr) { + case 1: + port = 25565 + case 2: + var err error + port, err = strconv.Atoi(addr[1]) + if err != nil { + fmt.Println(err, useage) + os.Exit(1) + } + } + + return addr[0], port +} + +func (s status) String() string { + var sb strings.Builder + fmt.Fprintln(&sb, "Server:", s.Version.Name) + fmt.Fprintln(&sb, "Protocol:", s.Version.Protocol) + fmt.Fprintln(&sb, "Description:", s.Description) + fmt.Fprintf(&sb, "Players: %d/%d\n", s.Players.Online, s.Players.Max) + for _, v := range s.Players.Sample { + fmt.Fprintf(&sb, "- [%s] %v\n", v.Name, v.ID) + } + return sb.String() +} diff --git a/cmd/ping/ping.go b/cmd/ping/ping.go deleted file mode 100644 index ec38dd1..0000000 --- a/cmd/ping/ping.go +++ /dev/null @@ -1,21 +0,0 @@ -// Useage: go run cmd/ping/ping.go localhost -package main - -import ( - "log" - "os" - - "github.com/Tnze/go-mc/bot" -) - -func main() { - if len(os.Args) < 2 { - log.Fatalln("no host name. Useage: ping [hostname]") - } - - resp, delay, err := bot.PingAndList(os.Args[1], 25565) - if err != nil { - log.Fatalf("ping and list server fail: %v", err) - } - log.Println("Status:"+string(resp), "\nDealy:", delay) -} diff --git a/go.mod b/go.mod index cbbde25..e37a96b 100644 --- a/go.mod +++ b/go.mod @@ -2,4 +2,8 @@ module github.com/Tnze/go-mc go 1.12 -require github.com/satori/go.uuid v1.2.0 +require ( + github.com/kr/pretty v0.1.0 // indirect + github.com/satori/go.uuid v1.2.0 + gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 // indirect +) diff --git a/go.sum b/go.sum index a9a7620..e8e99ec 100644 --- a/go.sum +++ b/go.sum @@ -1,2 +1,9 @@ +github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/satori/go.uuid v1.2.0 h1:0uYX9dsZ2yD7q2RtLRtPSdGDWzjeM3TbMJP9utgA0ww= github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=