From ac638c32763a40f69e6625c86a95dbe0218af13c Mon Sep 17 00:00:00 2001 From: Araozu Date: Tue, 21 May 2024 09:09:23 -0500 Subject: [PATCH] Minimal ws connection --- controller/lobbyws.go | 42 ++++++++++++++++++++++++++++++++++++++++++ go.mod | 5 +++++ go.sum | 4 ++++ main.go | 16 +++++++++++----- 4 files changed, 62 insertions(+), 5 deletions(-) create mode 100644 controller/lobbyws.go diff --git a/controller/lobbyws.go b/controller/lobbyws.go new file mode 100644 index 0000000..914e9ff --- /dev/null +++ b/controller/lobbyws.go @@ -0,0 +1,42 @@ +package controller + +import ( + "log" + "net/http" + "time" + + "github.com/gorilla/websocket" +) + +var upgrader = websocket.Upgrader{ + CheckOrigin: func(r *http.Request) bool { + return true + }, +} + +func LobbyWsConnect(writer http.ResponseWriter, request *http.Request) { + conn, err := upgrader.Upgrade(writer, request, nil) + if err != nil { + log.Print("upgrade:", err) + return + } + defer conn.Close() + + for { + mt, message, err := conn.ReadMessage() + if err != nil { + log.Print("read:", err) + break + } + + log.Printf("recv: %s, type: %d", message, mt) + + time.Sleep(10 * time.Second) + + err = conn.WriteMessage(mt, message) + if err != nil { + log.Print("write:", err) + break + } + } +} diff --git a/go.mod b/go.mod index 108859c..145facb 100644 --- a/go.mod +++ b/go.mod @@ -6,6 +6,11 @@ require ( github.com/gorilla/mux v1.8.1 github.com/nrednav/cuid2 v1.0.0 github.com/rs/cors v1.11.0 +) + +require ( + github.com/gorilla/websocket v1.5.1 // indirect golang.org/x/crypto v0.23.0 // indirect + golang.org/x/net v0.21.0 // indirect golang.org/x/sys v0.20.0 // indirect ) diff --git a/go.sum b/go.sum index f8fb465..cec8b6e 100644 --- a/go.sum +++ b/go.sum @@ -1,10 +1,14 @@ github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ= +github.com/gorilla/websocket v1.5.1 h1:gmztn0JnHVt9JZquRuzLw3g4wouNVzKL15iLr/zn/QY= +github.com/gorilla/websocket v1.5.1/go.mod h1:x3kM2JMyaluk02fnUJpQuwD2dCS5NDG2ZHL0uE0tcaY= github.com/nrednav/cuid2 v1.0.0 h1:27dn1oGiG+23Wa8XJ2DHeMoMa18Zs9u1+UHI9IlcGKM= github.com/nrednav/cuid2 v1.0.0/go.mod h1:pdRH5Zrjwnv8DZ74XvHR3jX+bzJNfQjwLQ3JgSI2EmI= github.com/rs/cors v1.11.0 h1:0B9GE/r9Bc2UxRMMtymBkHTenPkHDv0CW4Y98GBY+po= github.com/rs/cors v1.11.0/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= golang.org/x/crypto v0.23.0 h1:dIJU/v2J8Mdglj/8rJ6UUOM3Zc9zLZxVZwwxMooUSAI= golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8= +golang.org/x/net v0.21.0 h1:AQyQV4dYCvJ7vGmJyKki9+PBdyvhkSd8EIx/qb0AYv4= +golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= golang.org/x/sys v0.20.0 h1:Od9JTbYCk261bKm4M/mw7AklTlFYIa0bIp9BgSm1S8Y= golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= diff --git a/main.go b/main.go index f0a4f52..f286ee6 100644 --- a/main.go +++ b/main.go @@ -20,11 +20,17 @@ type PersonInfo struct { func main() { fmt.Println("hello SEKAI!!") - router := mux.NewRouter().PathPrefix("/api").Subrouter() + mainRouter := mux.NewRouter() + httpRouter := mainRouter.PathPrefix("/api").Subrouter() + wsRouter := mainRouter.PathPrefix("/ws").Subrouter() - router.HandleFunc("/register", Register) - router.HandleFunc("/validate", controller.ValidateId) - router.HandleFunc("/lobby/new", controller.CreateLobby).Methods("POST") + // HTTP routes + httpRouter.HandleFunc("/register", Register) + httpRouter.HandleFunc("/validate", controller.ValidateId) + httpRouter.HandleFunc("/lobby/new", controller.CreateLobby).Methods("POST") + + // WS routes + wsRouter.HandleFunc("/lobby/connect", controller.LobbyWsConnect) port, ok := os.LookupEnv("PORT") if !ok { @@ -38,7 +44,7 @@ func main() { AllowCredentials: true, }) - handler := cors.Handler(router) + handler := cors.Handler(mainRouter) log.Fatal(http.ListenAndServe(":"+port, handler)) }