mirror of
https://github.com/fosrl/newt.git
synced 2026-03-26 12:36:45 +00:00
Add optional compression
This commit is contained in:
@@ -2,6 +2,7 @@ package websocket
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
|
"compress/gzip"
|
||||||
"crypto/tls"
|
"crypto/tls"
|
||||||
"crypto/x509"
|
"crypto/x509"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
@@ -709,10 +710,13 @@ func (c *Client) readPumpWithDisconnectDetection(started time.Time) {
|
|||||||
disconnectResult = "success"
|
disconnectResult = "success"
|
||||||
return
|
return
|
||||||
default:
|
default:
|
||||||
var msg WSMessage
|
msgType, p, err := c.conn.ReadMessage()
|
||||||
err := c.conn.ReadJSON(&msg)
|
|
||||||
if err == nil {
|
if err == nil {
|
||||||
telemetry.IncWSMessage(c.metricsContext(), "in", "text")
|
if msgType == websocket.BinaryMessage {
|
||||||
|
telemetry.IncWSMessage(c.metricsContext(), "in", "binary")
|
||||||
|
} else {
|
||||||
|
telemetry.IncWSMessage(c.metricsContext(), "in", "text")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// Check if we're shutting down before logging error
|
// Check if we're shutting down before logging error
|
||||||
@@ -737,6 +741,29 @@ func (c *Client) readPumpWithDisconnectDetection(started time.Time) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var data []byte
|
||||||
|
if msgType == websocket.BinaryMessage {
|
||||||
|
gr, err := gzip.NewReader(bytes.NewReader(p))
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("WebSocket failed to create gzip reader: %v", err)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
data, err = io.ReadAll(gr)
|
||||||
|
gr.Close()
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("WebSocket failed to decompress message: %v", err)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
data = p
|
||||||
|
}
|
||||||
|
|
||||||
|
var msg WSMessage
|
||||||
|
if err = json.Unmarshal(data, &msg); err != nil {
|
||||||
|
logger.Error("WebSocket failed to parse message: %v", err)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
c.handlersMux.RLock()
|
c.handlersMux.RLock()
|
||||||
if handler, ok := c.handlers[msg.Type]; ok {
|
if handler, ok := c.handlers[msg.Type]; ok {
|
||||||
handler(msg)
|
handler(msg)
|
||||||
|
|||||||
Reference in New Issue
Block a user