diff options
author | Hubert Hirtz <hubert@hirtz.pm> | 2020-11-23 11:49:53 +0100 |
---|---|---|
committer | Hubert Hirtz <hubert@hirtz.pm> | 2020-11-23 11:49:53 +0100 |
commit | 2992bd3f31dda92694fe1d04e54789401755d349 (patch) | |
tree | 39c89b685cafd2892d81962be88a6c516747fa15 /cmd | |
parent | Document irc/typing.go (diff) |
Polish the test client
Diffstat (limited to 'cmd')
-rw-r--r-- | cmd/test/main.go | 89 |
1 files changed, 77 insertions, 12 deletions
diff --git a/cmd/test/main.go b/cmd/test/main.go index 2010446..5560db8 100644 --- a/cmd/test/main.go +++ b/cmd/test/main.go @@ -1,40 +1,105 @@ package main import ( + "bufio" "crypto/tls" - "git.sr.ht/~taiite/senpai/irc" + "flag" "log" + "net" "os" + + "git.sr.ht/~taiite/senpai" + "git.sr.ht/~taiite/senpai/irc" ) func main() { - addr := os.Args[1] + var configPath string + var address string + var nick string + var password string + var useTLS bool + flag.StringVar(&configPath, "config", "", "path to the configuration file") + flag.StringVar(&address, "address", "", "server address") + flag.StringVar(&nick, "nick", "senpai", "IRC nick/user to use") + flag.StringVar(&password, "password", "", "SASL password to use") + flag.BoolVar(&useTLS, "tls", false, "whether to use tls") + flag.Parse() + + if address == "" { + if configPath == "" { + configDir, err := os.UserConfigDir() + if err != nil { + log.Panicln(err) + } + configPath = configDir + "/senpai/senpai.yaml" + } + + cfg, err := senpai.LoadConfigFile(configPath) + if err != nil { + log.Panicln(err) + } - log.Printf("Connecting to %s...\n", addr) + address = cfg.Addr + nick = cfg.Nick + if cfg.Password != nil { + password = *cfg.Password + } + } - conn, err := tls.Dial("tcp", addr, nil) + log.Printf("Connecting to %s...\n", address) + + var conn net.Conn + var err error + if useTLS { + conn, err = tls.Dial("tcp", address, nil) + } else { + conn, err = net.Dial("tcp", address) + } if err != nil { - log.Panicf("Failed to connect to %s: %v", addr, err) + log.Panicf("Failed to connect to %s: %v", address, err) } defer conn.Close() log.Printf("Connected. Registration in progress...\n") + var auth irc.SASLPlain + if password != "" { + auth = irc.SASLPlain{Username: nick, Password: password} + } cli, err := irc.NewSession(conn, irc.SessionParams{ - Nickname: "senpai", - Username: "senpai", - RealName: "senpai Ier", - Auth: &irc.SASLPlain{Username: os.Args[2], Password: os.Args[3]}, + Nickname: nick, + Username: nick, + RealName: nick, + Auth: &auth, + Debug: true, }) if err != nil { - log.Panicf("Failed to register to %s: %v", addr, err) + log.Panicf("Failed to connect to %s: %v", address, err) } + defer cli.Stop() + + go func() { + r := bufio.NewScanner(os.Stdin) + for r.Scan() { + line := r.Text() + cli.SendRaw(line) + } + cli.Stop() + }() - for { - ev := <-cli.Poll() + for ev := range cli.Poll() { switch ev := ev.(type) { + case irc.RawMessageEvent: + if ev.Outgoing { + log.Printf("C > S: %s\n", ev.Message) + } else { + log.Printf("C < S: %s\n", ev.Message) + } case error: log.Panicln(ev) + default: + log.Printf("Event: %T%+v", ev, ev) } } + log.Println("Disconnected") } |