Skip to content

Instantly share code, notes, and snippets.

@bradfitz
Created February 6, 2015 01:12
Show Gist options
  • Save bradfitz/25e1456c238dd6a8d85c to your computer and use it in GitHub Desktop.
Save bradfitz/25e1456c238dd6a8d85c to your computer and use it in GitHub Desktop.
terrible hello world chat server
package main
import (
"bufio"
"fmt"
"log"
"net"
"strings"
"sync"
)
var (
mu sync.Mutex
conns = map[net.Conn]bool{}
)
func main() {
ln, err := net.Listen("tcp", ":80")
if err != nil {
log.Fatal(err)
}
for {
c, err := ln.Accept()
if err == nil {
go serve(c)
}
}
}
func reg(c net.Conn, ok bool) {
mu.Lock()
if ok {
conns[c] = ok
} else {
delete(conns, c)
}
mu.Unlock()
}
func serve(c net.Conn) {
defer reg(c, false)
defer c.Close()
reg(c, true)
bs := bufio.NewScanner(c)
for bs.Scan() {
msg := strings.TrimSpace(bs.Text())
if strings.HasPrefix(msg, "GET ") {
return
}
mu.Lock()
for peer := range conns {
if peer != c {
fmt.Fprintf(peer, ":::: %s\n", msg)
}
}
mu.Unlock()
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment