1
0
Fork 0
forked from External/ergo

implement join/quit and channel messages properly

This commit is contained in:
Jeremy Latt 2014-02-08 17:10:04 -08:00
parent 3f9495cda0
commit 06648393a1
7 changed files with 100 additions and 84 deletions

View file

@ -20,9 +20,12 @@ func StringReadChan(conn net.Conn) <-chan string {
ch := make(chan string)
reader := bufio.NewReader(conn)
go func() {
defer conn.Close()
defer close(ch)
for {
line, err := readTrimmedLine(reader)
if err != nil {
log.Print("net: ", err)
break
}
if DEBUG_NET {
@ -30,7 +33,6 @@ func StringReadChan(conn net.Conn) <-chan string {
}
ch <- line
}
close(ch)
}()
return ch
}
@ -39,18 +41,19 @@ func StringWriteChan(conn net.Conn) chan<- string {
ch := make(chan string)
writer := bufio.NewWriter(conn)
go func() {
defer conn.Close()
defer close(ch)
for str := range ch {
if DEBUG_NET {
log.Printf("%s ← %s : %s", conn.RemoteAddr(), conn.LocalAddr(), str)
}
if _, err := writer.WriteString(str + "\r\n"); err != nil {
log.Print("net: ", err)
break
}
writer.Flush()
}
close(ch)
}()
return ch
}