send method
Sends a message through the WebSocket connection.
Implementation
Future<bool> send(WebSocketMessage message) async {
if (!isConnected) {
throw const WebSocketException.messageSendFailed(
'Connection not established',
);
}
try {
if (message.isText) {
_channel!.sink.add(message.data as String);
} else if (message.isBinary) {
_channel!.sink.add(message.data as List<int>);
} else if (message.isJson) {
// Properly serialize JSON using jsonEncode
_channel!.sink.add(jsonEncode(message.data));
} else if (message.isControl) {
// For ping/pong, send as text message for application-level heartbeat
_channel!.sink.add(message.data as String);
} else {
_channel!.sink.add(message.data.toString());
}
_lastMessageTime = DateTime.now();
_messagesSent++;
// Track ping/pong for heartbeat statistics
if (message.type == 'ping') {
_pingSent++;
_lastPingTime = DateTime.now();
}
_eventController.add(WebSocketEvent.messageSent(message));
_updateStatistics();
return true;
} catch (e) {
_errorsCount++;
_updateStatistics();
throw WebSocketException.messageSendFailed('Failed to send message: $e');
}
}