diff --git a/backend/cmd/watchtogether/main.go b/backend/cmd/watchtogether/main.go index cf31321..5c152ae 100644 --- a/backend/cmd/watchtogether/main.go +++ b/backend/cmd/watchtogether/main.go @@ -12,13 +12,20 @@ var log = tlog.NewTaggedLogger("Logger", tlog.NewColor("38;5;111")) func main() { r := mux.NewRouter() - r.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { + hub := ws.NewHub() + go hub.Run() + + r.HandleFunc("/ws", func(w http.ResponseWriter, r *http.Request) { + ws.ServeWs(hub, w, r) + }) + r.HandleFunc("/api/users", func(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") - resp := make(map[string]string) + resp := make(map[string]interface{}) resp["status"] = "ok" + resp["users"] = len(hub.Clients) jsonResp, err := json.Marshal(resp) if err != nil { - log.Fatalf("error in unmarshalling json. err: %s", err.Error()) + log.Fatalf("error in marshaling json. err: %s", err.Error()) } _, err = w.Write(jsonResp) if err != nil { @@ -26,11 +33,19 @@ func main() { } return }) - hub := ws.NewHub() - go hub.Run() - - r.HandleFunc("/ws", func(w http.ResponseWriter, r *http.Request) { - ws.ServeWs(hub, w, r) + r.Methods("GET").HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Content-Type", "application/json") + resp := make(map[string]interface{}) + resp["status"] = "ok" + jsonResp, err := json.Marshal(resp) + if err != nil { + log.Fatalf("error in marshaling json. err: %s", err.Error()) + } + _, err = w.Write(jsonResp) + if err != nil { + return + } + return }) err := http.ListenAndServe(":8080", r) diff --git a/backend/internal/ws/hub.go b/backend/internal/ws/hub.go index a4340e4..4d9a0e7 100644 --- a/backend/internal/ws/hub.go +++ b/backend/internal/ws/hub.go @@ -1,16 +1,16 @@ package ws type Hub struct { - // Registered clients - clients map[*Client]bool + // Registered Clients + Clients map[*Client]bool - // Inbound messages from the clients + // Inbound messages from the Clients broadcast chan RawMessage - // Register requests from the clients + // Register requests from the Clients register chan *Client - // Unregister requests from clients + // Unregister requests from Clients unregister chan *Client } @@ -19,7 +19,7 @@ func NewHub() *Hub { broadcast: make(chan RawMessage), register: make(chan *Client), unregister: make(chan *Client), - clients: make(map[*Client]bool), + Clients: make(map[*Client]bool), } } @@ -38,20 +38,20 @@ func (h *Hub) Run() { for { select { case client := <-h.register: - h.clients[client] = true + h.Clients[client] = true case client := <-h.unregister: - if _, ok := h.clients[client]; ok { - delete(h.clients, client) + if _, ok := h.Clients[client]; ok { + delete(h.Clients, client) close(client.send) } case message := <-h.broadcast: go h.handleMessage(message) - //for client := range h.clients { + //for client := range h.Clients { // select { // case client.send <- message: // default: // close(client.send) - // delete(h.clients, client) + // delete(h.Clients, client) // } //} }