added api routes

This commit is contained in:
vel 2022-01-22 23:02:47 -08:00
parent fd536075c5
commit ef022499e7
Signed by: velvox
GPG Key ID: 1C8200C1D689CEF5
2 changed files with 34 additions and 19 deletions

View File

@ -12,13 +12,20 @@ var log = tlog.NewTaggedLogger("Logger", tlog.NewColor("38;5;111"))
func main() { func main() {
r := mux.NewRouter() 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") w.Header().Set("Content-Type", "application/json")
resp := make(map[string]string) resp := make(map[string]interface{})
resp["status"] = "ok" resp["status"] = "ok"
resp["users"] = len(hub.Clients)
jsonResp, err := json.Marshal(resp) jsonResp, err := json.Marshal(resp)
if err != nil { 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) _, err = w.Write(jsonResp)
if err != nil { if err != nil {
@ -26,11 +33,19 @@ func main() {
} }
return return
}) })
hub := ws.NewHub() r.Methods("GET").HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
go hub.Run() w.Header().Set("Content-Type", "application/json")
resp := make(map[string]interface{})
r.HandleFunc("/ws", func(w http.ResponseWriter, r *http.Request) { resp["status"] = "ok"
ws.ServeWs(hub, w, r) 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) err := http.ListenAndServe(":8080", r)

View File

@ -1,16 +1,16 @@
package ws package ws
type Hub struct { type Hub struct {
// Registered clients // Registered Clients
clients map[*Client]bool Clients map[*Client]bool
// Inbound messages from the clients // Inbound messages from the Clients
broadcast chan RawMessage broadcast chan RawMessage
// Register requests from the clients // Register requests from the Clients
register chan *Client register chan *Client
// Unregister requests from clients // Unregister requests from Clients
unregister chan *Client unregister chan *Client
} }
@ -19,7 +19,7 @@ func NewHub() *Hub {
broadcast: make(chan RawMessage), broadcast: make(chan RawMessage),
register: make(chan *Client), register: make(chan *Client),
unregister: 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 { for {
select { select {
case client := <-h.register: case client := <-h.register:
h.clients[client] = true h.Clients[client] = true
case client := <-h.unregister: case client := <-h.unregister:
if _, ok := h.clients[client]; ok { if _, ok := h.Clients[client]; ok {
delete(h.clients, client) delete(h.Clients, client)
close(client.send) close(client.send)
} }
case message := <-h.broadcast: case message := <-h.broadcast:
go h.handleMessage(message) go h.handleMessage(message)
//for client := range h.clients { //for client := range h.Clients {
// select { // select {
// case client.send <- message: // case client.send <- message:
// default: // default:
// close(client.send) // close(client.send)
// delete(h.clients, client) // delete(h.Clients, client)
// } // }
//} //}
} }