connect method
void
connect()
Connect to the WebSocket server
Implementation
void connect() async {
final generation = ++_connectGeneration;
final openCallback = onOpen;
final messageCallback = onMessage;
final closeCallback = onClose;
try {
GlobalLogger().i('TxSocket :: connect : $hostAddress');
final socket = await WebSocket.connect(hostAddress);
if (!_isCurrentAttempt(generation)) {
unawaited(socket.close());
return;
}
_socket = socket;
socket
..pingInterval = const Duration(seconds: 10)
..timeout(const Duration(seconds: 30));
// Initialize connection tracking
initializePingTracking();
socket.listen(
(dynamic data) {
if (!_isActiveSocket(generation, socket)) return;
// Check if this is a ping/pong message
if (isPingMessage(data)) {
handlePingReceived();
}
messageCallback.call(data);
},
onDone: () {
if (!_isActiveSocket(generation, socket)) return;
cleanPingIntervals();
closeCallback.call(
socket.closeCode ?? 0,
socket.closeReason ?? 'Closed for unknown reason',
);
if (identical(_socket, socket)) {
_socket = null;
}
},
);
openCallback.call();
if (!_isActiveSocket(generation, socket)) {
unawaited(socket.close());
return;
}
// Emit initial calculating state
emitInitialMetrics();
} catch (e) {
if (!_isCurrentAttempt(generation)) return;
cleanPingIntervals();
closeCallback.call(500, e.toString());
}
}