onReceive method
Called after a message is received. Return null to drop the message.
Implementation
@override
Future<WebSocketMessage?> onReceive(WebSocketMessage message) async {
if (!platformSupportsCompression) return message;
final data = message.data;
Map<String, dynamic>? envelope;
if (data is String) {
try {
final decoded = jsonDecode(data);
if (decoded is Map<String, dynamic>) envelope = decoded;
} catch (_) {
return message;
}
} else if (data is Map<String, dynamic>) {
envelope = data;
}
if (envelope == null || envelope[_kCompressed] != 1) return message;
final b64 = envelope[_kData] as String?;
if (b64 == null) return message;
try {
final decompressed = utf8.decode(platformGzipDecode(base64Decode(b64)));
dynamic parsed;
try {
parsed = jsonDecode(decompressed);
} catch (_) {
parsed = decompressed;
}
final meta = Map<String, dynamic>.from(message.metadata ?? {})
..remove(_kCompressed);
return WebSocketMessage(
data: parsed,
timestamp: message.timestamp,
type: message.type,
metadata: meta,
);
} catch (_) {
return message;
}
}