diff options
Diffstat (limited to 'websock.go')
| -rw-r--r-- | websock.go | 33 | 
1 files changed, 27 insertions, 6 deletions
| @@ -7,10 +7,18 @@ import (  	"net/http"  ) +type JoinResponse struct { +	OK      bool     `json:"ok"` +	Error   string   `json:"error,omitempty"` +	Buddies []string `json:"buddies,omitempty"` +} +  func AcceptWebSock(rw http.ResponseWriter, req *http.Request) {  	vars := mux.Vars(req) -	room := vars["chatroom"] +	roomname := vars["chatroom"]  	websocket.Handler(func(ws *websocket.Conn) { +		send := func(v interface{}) error { return websocket.JSON.Send(ws, v) } +  		defer ws.Close()  		var nick string @@ -18,12 +26,23 @@ func AcceptWebSock(rw http.ResponseWriter, req *http.Request) {  			return  		} -		if err := Join(room, nick); err != nil { -			// TODO: report error to client +		buddy, room, err := Join(roomname, nick) +		if err != nil { +			send(JoinResponse{ +				OK:    false, +				Error: err.Error(), +			}) +			return +		} +		defer buddy.Leave() + +		if send(JoinResponse{ +			OK:      true, +			Buddies: room.ListBuddies(), +		}) != nil {  			return  		} -		usermsgs := make(chan string)  		go func() {  			var s string  			for { @@ -31,9 +50,11 @@ func AcceptWebSock(rw http.ResponseWriter, req *http.Request) {  					return  				} -				if s != "" { -					usermsgs <- s +				if s == "" { +					continue  				} + +				// TODO: Broadcast messsage  			}  		}()  	}).ServeHTTP(rw, req) | 
