1
0
Fork 0
forked from External/ergo

initial commit

This commit is contained in:
Jeremy Latt 2012-04-07 11:44:59 -07:00
commit a427e2bb47
6 changed files with 175 additions and 0 deletions

46
src/irc/net.go Normal file
View file

@ -0,0 +1,46 @@
package irc
import (
"bufio"
"log"
"net"
)
// Adapt `net.Conn` to a `chan string`.
func NewStringChan(conn net.Conn) chan string {
ch := make(chan string)
rw := bufio.NewReadWriter(bufio.NewReader(conn), bufio.NewWriter(conn))
done := make(chan bool)
go func() {
<- done
close(ch)
}()
// conn -> ch
go func() {
for {
line, err := rw.ReadString('\n')
if err != nil {
log.Print("StringChan[read]: %v", err)
break
}
ch <- line
}
done <- true
}()
// ch -> conn
go func() {
for str := range ch {
if _, err := rw.WriteString(str + "\r\n"); err != nil {
log.Print("StringChan[write]: %v", err)
break
}
rw.Flush()
}
done <- true
}()
return ch
}