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 }