commit 2992bd3
Hubert Hirtz
·
2020-11-23 10:49:53 +0000 UTC
parent 360302f
Polish the test client
1 files changed,
+77,
-12
+77,
-12
1@@ -1,40 +1,105 @@
2 package main
3
4 import (
5+ "bufio"
6 "crypto/tls"
7- "git.sr.ht/~taiite/senpai/irc"
8+ "flag"
9 "log"
10+ "net"
11 "os"
12+
13+ "git.sr.ht/~taiite/senpai"
14+ "git.sr.ht/~taiite/senpai/irc"
15 )
16
17 func main() {
18- addr := os.Args[1]
19+ var configPath string
20+ var address string
21+ var nick string
22+ var password string
23+ var useTLS bool
24+ flag.StringVar(&configPath, "config", "", "path to the configuration file")
25+ flag.StringVar(&address, "address", "", "server address")
26+ flag.StringVar(&nick, "nick", "senpai", "IRC nick/user to use")
27+ flag.StringVar(&password, "password", "", "SASL password to use")
28+ flag.BoolVar(&useTLS, "tls", false, "whether to use tls")
29+ flag.Parse()
30+
31+ if address == "" {
32+ if configPath == "" {
33+ configDir, err := os.UserConfigDir()
34+ if err != nil {
35+ log.Panicln(err)
36+ }
37+ configPath = configDir + "/senpai/senpai.yaml"
38+ }
39+
40+ cfg, err := senpai.LoadConfigFile(configPath)
41+ if err != nil {
42+ log.Panicln(err)
43+ }
44
45- log.Printf("Connecting to %s...\n", addr)
46+ address = cfg.Addr
47+ nick = cfg.Nick
48+ if cfg.Password != nil {
49+ password = *cfg.Password
50+ }
51+ }
52
53- conn, err := tls.Dial("tcp", addr, nil)
54+ log.Printf("Connecting to %s...\n", address)
55+
56+ var conn net.Conn
57+ var err error
58+ if useTLS {
59+ conn, err = tls.Dial("tcp", address, nil)
60+ } else {
61+ conn, err = net.Dial("tcp", address)
62+ }
63 if err != nil {
64- log.Panicf("Failed to connect to %s: %v", addr, err)
65+ log.Panicf("Failed to connect to %s: %v", address, err)
66 }
67 defer conn.Close()
68
69 log.Printf("Connected. Registration in progress...\n")
70
71+ var auth irc.SASLPlain
72+ if password != "" {
73+ auth = irc.SASLPlain{Username: nick, Password: password}
74+ }
75 cli, err := irc.NewSession(conn, irc.SessionParams{
76- Nickname: "senpai",
77- Username: "senpai",
78- RealName: "senpai Ier",
79- Auth: &irc.SASLPlain{Username: os.Args[2], Password: os.Args[3]},
80+ Nickname: nick,
81+ Username: nick,
82+ RealName: nick,
83+ Auth: &auth,
84+ Debug: true,
85 })
86 if err != nil {
87- log.Panicf("Failed to register to %s: %v", addr, err)
88+ log.Panicf("Failed to connect to %s: %v", address, err)
89 }
90+ defer cli.Stop()
91+
92+ go func() {
93+ r := bufio.NewScanner(os.Stdin)
94+ for r.Scan() {
95+ line := r.Text()
96+ cli.SendRaw(line)
97+ }
98+ cli.Stop()
99+ }()
100
101- for {
102- ev := <-cli.Poll()
103+ for ev := range cli.Poll() {
104 switch ev := ev.(type) {
105+ case irc.RawMessageEvent:
106+ if ev.Outgoing {
107+ log.Printf("C > S: %s\n", ev.Message)
108+ } else {
109+ log.Printf("C < S: %s\n", ev.Message)
110+ }
111 case error:
112 log.Panicln(ev)
113+ default:
114+ log.Printf("Event: %T%+v", ev, ev)
115 }
116 }
117+ log.Println("Disconnected")
118 }