github.com/graybobo/golang.org-package-offline-cache@v0.0.0-20200626051047-6608995c132f/x/talks/2012/chat/tcp-simple/chat.go (about) 1 // +build OMIT 2 3 package main 4 5 import ( 6 "fmt" 7 "io" 8 "log" 9 "net" 10 ) 11 12 const listenAddr = "localhost:4000" 13 14 func main() { 15 l, err := net.Listen("tcp", listenAddr) 16 if err != nil { 17 log.Fatal(err) 18 } 19 for { 20 c, err := l.Accept() 21 if err != nil { 22 log.Fatal(err) 23 } 24 go match(c) // HL 25 } 26 } 27 28 var partner = make(chan io.ReadWriteCloser) 29 30 func match(c io.ReadWriteCloser) { 31 fmt.Fprint(c, "Waiting for a partner...") 32 select { 33 case partner <- c: 34 // now handled by the other goroutine 35 case p := <-partner: 36 chat(p, c) 37 } 38 } 39 40 func chat(a, b io.ReadWriteCloser) { 41 fmt.Fprintln(a, "Found one! Say hi.") 42 fmt.Fprintln(b, "Found one! Say hi.") 43 go io.Copy(a, b) 44 io.Copy(b, a) 45 }