connect method
Connects to the WebSocket server.
Implementation
Future<void> connect() async {
if (_state == WebSocketState.connecting ||
_state == WebSocketState.connected) {
return;
}
_updateState(WebSocketState.connecting);
_connectionStartTime = DateTime.now();
try {
// Set connection timeout
_connectionTimer = Timer(config.connectionTimeout, () {
if (_state == WebSocketState.connecting) {
_handleConnectionFailure('Connection timeout');
}
});
// Create WebSocket connection
if (config.protocols.isNotEmpty) {
_channel = WebSocketChannel.connect(
Uri.parse(config.url),
protocols: config.protocols,
);
} else {
_channel = WebSocketChannel.connect(Uri.parse(config.url));
}
// Listen for messages
_channel!.stream.listen(
_handleIncomingMessage,
onError: _handleError,
onDone: _handleConnectionClosed,
);
// Wait for connection to be established
await _waitForConnection();
// Start heartbeat if enabled
if (config.enableHeartbeat) {
_startHeartbeat();
}
_updateState(WebSocketState.connected);
_eventController.add(WebSocketEvent.connected());
} catch (e) {
_handleConnectionFailure('Connection failed: $e');
}
}