diff --git a/websockets/go.mod b/websockets/go.mod new file mode 100644 index 00000000..9c4ce731 --- /dev/null +++ b/websockets/go.mod @@ -0,0 +1,5 @@ +module github.com/zoriya/kyoo/websockets + +go 1.21.7 + +require nhooyr.io/websocket v1.8.10 // direct diff --git a/websockets/go.sum b/websockets/go.sum new file mode 100644 index 00000000..410c8fa2 --- /dev/null +++ b/websockets/go.sum @@ -0,0 +1,2 @@ +nhooyr.io/websocket v1.8.10 h1:mv4p+MnGrLDcPlBoWsvPP7XCzTYMXP9F9eIGoKbgx7Q= +nhooyr.io/websocket v1.8.10/go.mod h1:rN9OFWIUwuxg4fR5tELlYC04bXYowCP9GX47ivo2l+c= diff --git a/websockets/main.go b/websockets/main.go new file mode 100644 index 00000000..bd7bfae6 --- /dev/null +++ b/websockets/main.go @@ -0,0 +1,43 @@ +package main + +import ( + "context" + "log" + "net/http" + "time" + + websocket "nhooyr.io/websocket" +) + +func main() { + http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { + c, err := websocket.Accept(w, r, &websocket.AcceptOptions{ + InsecureSkipVerify: true, + }) + if err != nil { + log.Println(err) + return + } + defer c.Close(websocket.StatusInternalError, "Internal error") + + for { + ctx, cancel := context.WithTimeout(context.Background(), time.Minute) + defer cancel() + + t, message, err := c.Read(ctx) + if err != nil || t != websocket.MessageText { + break + } + + log.Printf("Received %v", message) + + err = c.Write(ctx, websocket.MessageText, message) + if err != nil { + break + } + } + }) + + err := http.ListenAndServe(":7777", nil) + log.Fatal(err) +}