buzzer-game/main.go

61 lines
1.4 KiB
Go
Raw Permalink Normal View History

2024-11-24 14:23:08 +00:00
package main
import (
"log"
"net/http"
"sync"
"github.com/gorilla/websocket"
)
type webSocketHandler struct {
upgrader websocket.Upgrader
}
// GLOBALS
var connections int = 0
var wg sync.WaitGroup
func (wsh webSocketHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
//upgrade http connection to websocket
connection, err := wsh.upgrader.Upgrade(w, r, nil)
if err != nil {
log.Printf("Error while upgrading connection to websocket: %s", err)
return
}
connections++
log.Printf("New websocket connection. There are now %v\n", connections)
wg.Add(1)
go func() {
2024-11-24 15:54:42 +00:00
defer connection.Close()
2024-11-24 14:23:08 +00:00
for {
2024-11-24 15:54:42 +00:00
msgType, message, err := connection.ReadMessage()
if err != nil {
log.Printf("Error trying to read message from client: %s", err)
return
}
if msgType == websocket.BinaryMessage {
err = connection.WriteMessage(websocket.TextMessage, []byte("this server does not support binary messages"))
if err != nil {
log.Printf("Error trying to send message to client: %s", err)
}
return
}
log.Printf("received message from client: %s", message)
err = connection.WriteMessage(websocket.TextMessage, []byte("Message received!"))
2024-11-24 14:23:08 +00:00
}
}()
}
func main() {
webSocketHandler := webSocketHandler{
upgrader: websocket.Upgrader{},
}
var port string = "8080"
http.Handle("/", webSocketHandler)
wg.Add(1)
log.Printf("listening on port %s...\n", port)
log.Fatal(http.ListenAndServe("localhost:8080", nil))
wg.Wait()
}