connect method
void
connect()
Connect to the WebSocket server
Implementation
void connect() {
final generation = ++_connectGeneration;
final openCallback = onOpen;
final messageCallback = onMessage;
final closeCallback = onClose;
try {
final socket = WebSocket(hostAddress);
socket.onOpen.listen((e) {
if (!_isCurrentAttempt(generation)) {
socket.close();
return;
}
_socket = socket;
// Initialize connection tracking
initializePingTracking();
openCallback.call();
if (_isActiveSocket(generation, socket)) {
// Emit initial calculating state
emitInitialMetrics();
} else {
socket.close();
}
});
socket.onMessage.listen((e) {
if (!_isActiveSocket(generation, socket)) return;
// Check if this is a ping/pong message
if (isPingMessage(e.data)) {
handlePingReceived();
}
messageCallback.call(e.data);
});
socket.onClose.listen((e) {
if (!_isActiveSocket(generation, socket)) return;
cleanPingIntervals();
closeCallback.call(
e.code ?? 0,
e.reason ?? 'Closed for unknown reason',
);
if (identical(_socket, socket)) {
_socket = null;
}
});
} catch (e) {
if (!_isCurrentAttempt(generation)) return;
cleanPingIntervals();
closeCallback.call(500, e.toString());
}
}