diff --git a/backend/main.go b/backend/main.go index eca76d9..0a9beaf 100644 --- a/backend/main.go +++ b/backend/main.go @@ -26,7 +26,7 @@ func main() { api := Engine.Group("/api") api.GET("/sse", SSEHandler) - api.GET("/status", GetStatus) + // api.GET("/status", GetStatus) api.POST("/status", SetStatus) port := os.Getenv("PORT") diff --git a/backend/sse.go b/backend/sse.go new file mode 100644 index 0000000..f99353a --- /dev/null +++ b/backend/sse.go @@ -0,0 +1,28 @@ +package main + +import ( + "github.com/gin-gonic/gin" +) + +type Message struct { + Data interface{} +} + +type Client struct { + Channel chan Message `json:"clients"` +} + +func SSEHandler(c *gin.Context) { +} + +func registerClient(client *Client) { +} + +func unregisterClient(client *Client) { +} + +func SendMsg(c *gin.Context) { +} + +func handleMessages() { +} diff --git a/backend/sse_stream.go b/backend/sse_stream.go deleted file mode 100644 index ee1d494..0000000 --- a/backend/sse_stream.go +++ /dev/null @@ -1,87 +0,0 @@ -package main - -import ( - "fmt" - "log" - "net/http" - "sync" - "time" - - "github.com/gin-gonic/gin" -) - -type Message struct { - Data interface{} `json:"data"` - Id string `json:"id"` -} - -type Client struct { - Channel chan Message `json:"clients"` -} - -var ( - clients = make(map[*Client]bool) - clientsMutex sync.Mutex - broadcast = make(chan Message) -) - -func SSEHandler(c *gin.Context) { - client := &Client{ - Channel: make(chan Message), - } - - log.Printf("events: %+v", client) - - AddClient(client) - - defer unregisterClient(client) - - log.Printf("Client %s connected", client) - - c.Writer.Header().Set("Content-Type", "text/event-stream") - c.Writer.Header().Set("Cache-Control", "no-cache") - c.Writer.Header().Set("Connection", "keep-alive") - c.Writer.Header().Set("Transfer-Encoding", "chunked") - - for { - select { - case msg := <-client.Channel: - fmt.Fprintf(c.Writer, "data: %s\n\n", msg.Data) - c.Writer.Flush() - case <-c.Writer.CloseNotify(): - return - } - } -} - -func AddClient(client *Client) { - clientsMutex.Lock() - clients[client] = true - clientsMutex.Unlock() -} - -func unregisterClient(client *Client) { - clientsMutex.Lock() - delete(clients, client) - close(client.Channel) - clientsMutex.Unlock() -} - -func SendMsg(c *gin.Context) { - var msg Message - c.ShouldBind(&msg) - msg.Id = time.Now().Format(time.RFC3339) - broadcast <- msg - c.JSON(http.StatusOK, gin.H{"status": "sent"}) -} - -func handleMessages() { - for { - msg := <-broadcast - clientsMutex.Lock() - for client := range clients { - client.Channel <- msg - } - clientsMutex.Unlock() - } -} diff --git a/backend/status.go b/backend/status.go index 03fe159..11c69e1 100644 --- a/backend/status.go +++ b/backend/status.go @@ -12,6 +12,8 @@ import ( type Status struct { Surfers []Surfer `json:"surfers"` Round Info `json:"round"` + Mins int `json:"mins"` + Secs int `json:"secs"` Count int `json:"surfersCount"` } @@ -41,7 +43,15 @@ func initStatus() interface{} { Color: "lightgray", Priority: "", Score: 0, + Delete: false, }, + { + Name: "", + Color: "lightgray", + Priority: "", + Score: 0, + Delete: false, + } }, Round: Info{ Round: "", @@ -49,7 +59,9 @@ func initStatus() interface{} { Category: "", Time: 0, }, - Count: 1, + Mins: 0, + Secs: 0, + Count: 2, } } diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index 2679e10..2c5d2e7 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -26,8 +26,39 @@ onMount(async () => { LoadFromLocalCache(); console.log(`onMount: ${JSON.stringify(surfers)}`); + // const sse = StartSSE(); + // return sse; }); + function StartSSE() { + let url = base + "/api/sse?"; + for (let e in events) { + url += `event=${events[e]}&`; + } + console.log(`sse url: ${url}`); + const sse = new EventSource(url); + console.log(`subscribe: ${sse}`); + + sse.onopen = () => { + console.log(`sse open ${Date.now()}`); + }; + + sse.addEventListener("status", (e) => { + let Msg = JSON.parse(e.data); + console.log(JSON.stringify(Msg)); + console.log(`status: ${Msg.data.round}`); + surfers = Msg.data.surfers; + info = Msg.data.round; + mins = Msg.data.mins; + secs = Msg.data.secs; + }); + + return () => { + sse.close(); + console.log(`sse closing ${Date.now()}`); + }; + } + function LoadFromLocalCache() { let srf = window.sessionStorage.getItem("surfers"); if (srf) { @@ -436,11 +467,11 @@ width: 100%; align-content: center; } - .surfer ul { + /* .surfer ul { list-style-type: none; margin-left: 0px; padding-left: 0px; - } + } */ .surfer select { -moz-appearance: none; /* Firefox */ -webkit-appearance: none; /* Safari and Chrome */