its for when you want to get like notifications for your reposts

feat(server): implement pings, dont kill ws if empty message is received from client

ptr.pet 2ec37d72 c01d5920

verified
+19 -3
+19 -3
server/main.go
··· 3 3 import ( 4 4 "context" 5 5 "encoding/json" 6 + "errors" 7 + "io" 6 8 "log" 7 9 "log/slog" 8 10 "net/http" ··· 231 233 232 234 logger.Info("serving subscriber") 233 235 236 + // send pings 237 + go func() { 238 + for { 239 + select { 240 + case <-r.Context().Done(): 241 + return 242 + default: 243 + conn.WriteMessage(websocket.PingMessage, []byte{}) 244 + time.Sleep(time.Second * 15) 245 + } 246 + } 247 + }() 248 + 234 249 for { 235 250 var msg SubscriberMessage 236 251 err := conn.ReadJSON(&msg) 237 - if err != nil { 238 - logger.Info("WebSocket connection closed", "error", err) 252 + // dont kill websocket if its no value 253 + if err != nil && !errors.Is(err, io.ErrUnexpectedEOF) { 254 + logger.Error("WebSocket connection closed", "error", err) 239 255 break 240 256 } 241 257 switch msg.Type { ··· 247 263 248 264 var innerMsg SubscriberUpdateListenTo 249 265 if err := json.Unmarshal(msg.Content, &innerMsg); err != nil { 250 - logger.Info("invalid message", "error", err) 266 + logger.Debug("invalid message", "error", err) 251 267 break 252 268 } 253 269