summaryrefslogtreecommitdiff
path: root/cmd
diff options
context:
space:
mode:
authorHubert Hirtz <hubert@hirtz.pm>2020-11-23 11:49:53 +0100
committerHubert Hirtz <hubert@hirtz.pm>2020-11-23 11:49:53 +0100
commit2992bd3f31dda92694fe1d04e54789401755d349 (patch)
tree39c89b685cafd2892d81962be88a6c516747fa15 /cmd
parentDocument irc/typing.go (diff)
Polish the test client
Diffstat (limited to 'cmd')
-rw-r--r--cmd/test/main.go89
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")
}