package server import ( "bufio" "log" "net" "strconv" "strings" ) type wrapper struct { net.Conn r *bufio.Reader } func (w *wrapper) cmd(code int64, msgs ...string) error { for i, msg := range msgs { sep := "-" if i == len(msgs)-1 { sep = " " } err := w.send(strconv.FormatInt(code, 10) + sep + msg) if err != nil { return err } } return nil } func (w *wrapper) send(message string) error { log.Println("+", message) // fuck some MTAs _, err := w.Write([]byte(message + "\r\n")) return err } func (w *wrapper) recv() (string, error) { if w.r == nil { w.r = bufio.NewReader(w) } //log.Println("* recv called") msg, err := w.r.ReadString('\n') if err != nil { return "", err } msg = strings.TrimRight(msg, " \t\r\n") log.Println("-", msg) return msg, nil }