()
| 168 | } |
| 169 | |
| 170 | func (c *ClientSession) loop() { |
| 171 | ticker := time.NewTicker(pingPeriod) |
| 172 | |
| 173 | defer func() { |
| 174 | c.Stop() |
| 175 | ticker.Stop() |
| 176 | }() |
| 177 | |
| 178 | for { |
| 179 | select { |
| 180 | case <-c.done: |
| 181 | return |
| 182 | case <-c.ctx.Done(): |
| 183 | return |
| 184 | case <-ticker.C: |
| 185 | if err := c.safeWrite(websocket.PingMessage, nil); err != nil { |
| 186 | if IsErrorOfInterest(err) { |
| 187 | slog.With(slog.Any("error", err)).Error("failed to write ping message") |
| 188 | } |
| 189 | return |
| 190 | } |
| 191 | } |
| 192 | } |
| 193 | } |