fix(websocket): errors in saving client info during ping ping

This commit is contained in:
2025-07-29 20:13:05 -05:00
parent daf9e8a966
commit 4368111311
5 changed files with 136 additions and 28 deletions

View File

@@ -35,22 +35,10 @@ func SocketHandler(c *gin.Context, channels map[string]*Channel) {
}
//defer conn.Close()
// Set ping handler on the connection
conn.SetPingHandler(func(appData string) error {
log.Println("Received ping:", appData)
conn.SetReadDeadline(time.Now().Add(60 * time.Second)) // Reset read timeout
return nil // Return nil to send pong automatically
})
// Optional: Custom pong handler
conn.SetPongHandler(func(appData string) error {
log.Println("Received pong:", appData)
return nil
})
// Create new client
client := &Client{
Conn: conn,
APIKey: "exampleAPIKey",
Send: make(chan []byte, 256), // Buffered channel
Channels: make(map[string]bool),
IPAddress: c.ClientIP(),
@@ -73,8 +61,22 @@ func SocketHandler(c *gin.Context, channels map[string]*Channel) {
// return
// }
//client.StartHeartbeat()
// Cleanup on disconnect
// Set handlers
conn.SetPingHandler(func(string) error {
return nil // Auto-responds with pong
})
conn.SetPongHandler(func(string) error {
now := time.Now()
client.markActive() // Track last pong time
client.lastActive = now
client.updateHeartbeat()
return nil
})
// Start server-side ping ticker
go client.startServerPings()
defer func() {
// Unregister from all channels
for channelName := range client.Channels {
@@ -96,11 +98,6 @@ func SocketHandler(c *gin.Context, channels map[string]*Channel) {
log.Printf("Client disconnected: %s", client.ClientID)
}()
client.Conn.SetPingHandler(func(appData string) error {
log.Printf("Custom ping handler for client %s", client.ClientID)
return nil
})
// Send welcome message immediately
welcomeMsg := map[string]string{
"status": "connected",