/
rcon_client.go
82 lines (65 loc) · 1.39 KB
/
rcon_client.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
package main
import (
"bufio"
"flag"
"fmt"
"log"
"os"
"strings"
rcon "github.com/TF2Stadium/TF2RconWrapper"
speakeasy "github.com/bgentry/speakeasy"
isatty "github.com/mattn/go-isatty"
)
func stdinIsatty() bool {
return isatty.IsTerminal(os.Stdin.Fd())
}
func readParameter(reader *bufio.Reader, prompt string, private bool) string {
var str string
if stdinIsatty() {
if private {
str, _ = speakeasy.Ask(prompt)
} else {
fmt.Print(prompt)
str, _ = reader.ReadString('\n')
}
} else {
str, _ = reader.ReadString('\n')
}
return strings.TrimSpace(str)
}
func main() {
var addr, pwd string
flag.StringVar(&addr, "addr", "", "Server Address")
flag.StringVar(&pwd, "pwd", "", "Server RCON Password")
flag.Parse()
reader := bufio.NewReader(os.Stdin)
isCLI := stdinIsatty()
if addr == "" {
addr = readParameter(reader, "Please enter server address: ", false)
}
if pwd == "" {
pwd = readParameter(reader, "Please enter RCON password: ", true)
}
conn, err := rcon.NewTF2RconConnection(addr, pwd)
if err != nil {
log.Fatal(err.Error())
}
for {
if isCLI {
fmt.Print("RCON> ")
}
query, readErr := reader.ReadString('\n')
if readErr != nil {
break
}
reply, err := conn.Query(query)
if err != nil {
if err == rcon.ErrUnknownCommand {
log.Println("Unknown Command")
continue
}
log.Fatal(err.Error())
}
fmt.Printf("%s\n", reply)
}
}