package main import ( "bufio" "crypto/tls" "fmt" "net" "strconv" "strings" ) type Server struct { address string connection_type string port int conn net.Conn incoming chan Message err error } func (server *Server) connect() error { addr := net.JoinHostPort(server.address, strconv.Itoa(server.port)) var conn net.Conn var err error switch strings.ToUpper(server.connection_type) { case "TLS": conn, err = tls.Dial("tcp", addr, nil) case "TCP": conn, err = net.Dial("tcp", addr) default: return fmt.Errorf("unknown connection type %q (want tls or tcp)", server.connection_type) } if err == nil { server.conn = conn } return err } func (server *Server) send(msg Message) error { _, err := fmt.Fprint(server.conn, msg) return err } func (server *Server) readLoop() { scanner := bufio.NewScanner(server.conn) for scanner.Scan() { line := scanner.Text() msg, err := parse(line) if err != nil { continue } server.incoming <- msg } server.err = scanner.Err() close(server.incoming) }