diff options
author | Kevin Chabowski <kevin@kch42.de> | 2014-03-24 15:56:28 +0100 |
---|---|---|
committer | Kevin Chabowski <kevin@kch42.de> | 2014-03-24 15:56:28 +0100 |
commit | 79fed0e58753d50c613d15589b8f687474c2224c (patch) | |
tree | c81b102331e575f38d4b1b3f9f7722ea0e96c701 /websock.go | |
download | simplechat-79fed0e58753d50c613d15589b8f687474c2224c.tar.gz simplechat-79fed0e58753d50c613d15589b8f687474c2224c.tar.bz2 simplechat-79fed0e58753d50c613d15589b8f687474c2224c.zip |
Initial commit
Diffstat (limited to 'websock.go')
-rw-r--r-- | websock.go | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/websock.go b/websock.go new file mode 100644 index 0000000..a72bf8c --- /dev/null +++ b/websock.go @@ -0,0 +1,40 @@ +package main + +import ( + "code.google.com/p/go.net/websocket" + "github.com/gorilla/mux" + "log" + "net/http" +) + +func AcceptWebSock(rw http.ResponseWriter, req *http.Request) { + vars := mux.Vars(req) + room := vars["chatroom"] + websocket.Handler(func(ws *websocket.Conn) { + defer ws.Close() + + var nick string + if websocket.Message.Receive(ws, &nick) != nil { + return + } + + if err := Join(room, nick); err != nil { + // TODO: report error to client + return + } + + usermsgs := make(chan string) + go func() { + var s string + for { + if websocket.Message.Receive(ws, &s) != nil { + return + } + + if s != "" { + usermsgs <- s + } + } + }() + }).ServeHTTP(rw, req) +} |