ruby>>
package main
import (
"net"
"sync"
"encoding/json"
)
func
main() {
connections := map[ net.Conn ] interface{} {}
mutex := sync.RWMutex{}
broadcaster := make( chan interface{} )
go func() {
for {
data, _ := json.Marshal( <- broadcaster )
mutex.RLock()
conns := connections
mutex.RUnlock()
for conn, _ := range conns { conn.Write( data ) }
}
}()
listener, _ := net.Listen( "tcp", ":6666" )
defer listener.Close()
for {
conn, _ := listener.Accept()
mutex.Lock()
connections[ conn ] = ""
mutex.Unlock()
go func() {
decoder := json.NewDecoder( conn )
for {
var w interface{}
err := decoder.Decode( &w )
if err != nil { break }
broadcaster <- w
}
mutex.Lock()
delete( connections, conn )
mutex.Unlock()
conn.Close()
}()
}
}
<<--
posted by
Saturn on Wed 24 Dec 2014 at 22:07 with 0 comments