summaryrefslogtreecommitdiff
path: root/websock.go
diff options
context:
space:
mode:
authorKevin Chabowski <kevin@kch42.de>2014-03-24 15:56:28 +0100
committerKevin Chabowski <kevin@kch42.de>2014-03-24 15:56:28 +0100
commit79fed0e58753d50c613d15589b8f687474c2224c (patch)
treec81b102331e575f38d4b1b3f9f7722ea0e96c701 /websock.go
downloadsimplechat-79fed0e58753d50c613d15589b8f687474c2224c.tar.gz
simplechat-79fed0e58753d50c613d15589b8f687474c2224c.tar.bz2
simplechat-79fed0e58753d50c613d15589b8f687474c2224c.zip
Initial commit
Diffstat (limited to 'websock.go')
-rw-r--r--websock.go40
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)
+}