diff options
author | Hubert Hirtz <hubert@hirtz.pm> | 2020-11-29 12:27:52 +0100 |
---|---|---|
committer | Hubert Hirtz <hubert@hirtz.pm> | 2020-11-29 12:58:10 +0100 |
commit | c79110642bc0f7accd8ec312ef03535e60256ed1 (patch) | |
tree | 6ec42b78bdee45caaea318f5587f7f57ddb3700b /cmd | |
parent | Don't forward outdated typing timeouts (diff) |
Make cmd/test usable
Diffstat (limited to 'cmd')
-rw-r--r-- | cmd/test/main.go | 119 |
1 files changed, 71 insertions, 48 deletions
diff --git a/cmd/test/main.go b/cmd/test/main.go index 5560db8..b900d40 100644 --- a/cmd/test/main.go +++ b/cmd/test/main.go @@ -1,87 +1,78 @@ package main import ( - "bufio" "crypto/tls" "flag" - "log" + "fmt" + "io" "net" "os" "git.sr.ht/~taiite/senpai" "git.sr.ht/~taiite/senpai/irc" + "golang.org/x/term" ) -func main() { - 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" - } +var ( + configPath string + address string + nick string + password string + useTLS bool +) - cfg, err := senpai.LoadConfigFile(configPath) - if err != nil { - log.Panicln(err) - } +func main() { + parseFlags() - address = cfg.Addr - nick = cfg.Nick - if cfg.Password != nil { - password = *cfg.Password - } + oldState, err := term.MakeRaw(0) + if err != nil { + panic(err) } + defer term.Restore(0, oldState) + + screen := struct { + io.Reader + io.Writer + }{os.Stdin, os.Stdout} + t := term.NewTerminal(screen, "> ") - log.Printf("Connecting to %s...\n", address) + fmt.Fprintf(t, "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", address, err) + panic(fmt.Sprintf("Failed to connect to %s: %v\n", address, err)) } defer conn.Close() - log.Printf("Connected. Registration in progress...\n") + fmt.Fprintf(t, "Connected. Registration in progress...\n") - var auth irc.SASLPlain + var auth irc.SASLClient if password != "" { - auth = irc.SASLPlain{Username: nick, Password: password} + auth = &irc.SASLPlain{Username: nick, Password: password} } cli, err := irc.NewSession(conn, irc.SessionParams{ Nickname: nick, Username: nick, RealName: nick, - Auth: &auth, + Auth: auth, Debug: true, }) if err != nil { - log.Panicf("Failed to connect to %s: %v", address, err) + panic(fmt.Sprintf("Failed to connect to %s: %v", address, err)) } defer cli.Stop() go func() { - r := bufio.NewScanner(os.Stdin) - for r.Scan() { - line := r.Text() + for { + line, err := t.ReadLine() + if err != nil { + break + } cli.SendRaw(line) } cli.Stop() @@ -91,15 +82,47 @@ func main() { switch ev := ev.(type) { case irc.RawMessageEvent: if ev.Outgoing { - log.Printf("C > S: %s\n", ev.Message) + fmt.Fprintf(t, "C > S: %s\n", ev.Message) } else { - log.Printf("C < S: %s\n", ev.Message) + fmt.Fprintf(t, "C < S: %s\n", ev.Message) } case error: - log.Panicln(ev) + panic(ev) default: - log.Printf("Event: %T%+v", ev, ev) + fmt.Fprintf(t, "=EVENT: %T%+v\n", ev, ev) + } + } + t.SetPrompt("") + fmt.Fprintln(t, "Disconnected") +} + +func parseFlags() { + 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, "use tls") + flag.Parse() + + if address == "" { + if configPath == "" { + configDir, err := os.UserConfigDir() + if err != nil { + panic(err) + } + configPath = configDir + "/senpai/senpai.yaml" + } + + cfg, err := senpai.LoadConfigFile(configPath) + if err != nil { + panic(err) + } + + address = cfg.Addr + nick = cfg.Nick + if cfg.Password != nil { + password = *cfg.Password } + useTLS = true } - log.Println("Disconnected") } |