whispering_gophers/part2/main.go
2019-07-02 13:28:08 +02:00

54 lines
1.1 KiB
Go

// Solution to part 2 of the Whispering Gophers code lab.
//
// This program extends part 1.
//
// It makes a connection the host and port specified by the -dial flag, reads
// lines from standard input and writes JSON-encoded messages to the network
// connection.
//
// You can test this program by installing and running the dump program:
// $ go get github.com/campoy/whispering-gophers/util/dump
// $ dump -listen=localhost:8000
// And in another terminal session, run this program:
// $ part2 -dial=localhost:8000
// Lines typed in the second terminal should appear as JSON objects in the
// first terminal.
//
package main
import (
"bufio"
"encoding/json"
"flag"
"log"
"net"
"os"
)
var dialAddr = flag.String("dial", "localhost:8000", "host:port to dial")
type Message struct {
Body string
}
func main() {
flag.Parse()
c, err := net.Dial("tcp4", *dialAddr)
if err != nil {
log.Fatal(err)
}
s := bufio.NewScanner(os.Stdin)
e := json.NewEncoder(c)
for s.Scan() {
m := Message{Body: s.Text()}
err := e.Encode(m)
if err != nil {
log.Fatal(err)
}
}
if err := s.Err(); err != nil {
log.Fatal(err)
}
}