initialize static method
Implementation
static Future<UFSocket> initialize() async {
_instance ??= UFSocket._();
if (_polling?.isConnected == true) {
return _instance!;
}
_polling?.dispose();
_polling = null;
_socket?.dispose();
_socket = null;
final token = await UFUtils.preferences.readAuthToken();
final target = _socketTarget();
debugPrint('Connecting socket...');
debugPrint('Socket URL: ${target.origin}');
debugPrint('Socket namespace: ${target.namespace}');
debugPrint('Socket transport: polling');
debugPrint('Socket path: /socket.io/');
debugPrint('Socket authentication configured: ${token.isNotEmpty}');
if (!_loggingAttached) {
interceptors.add(SocketLoggingInterceptor());
_loggingAttached = true;
}
final polling = _PollingClient(
origin: target.origin,
namespace: target.namespace,
token: token,
onEvent: _instance!._dispatchEvent,
onError: _instance!._onTransportError,
onConnect: () {
debugPrint('🟢 Socket connected successfully.');
},
onDisconnect: (reason) {
debugPrint('🔴 Socket disconnected: $reason');
interceptors.onError('disconnect', reason);
},
);
_polling = polling;
try {
await polling.connect().timeout(const Duration(seconds: 20));
} catch (error) {
debugPrint('🔴 Socket connection error: $error');
interceptors.onError('connect_error', error);
polling.dispose();
if (identical(_polling, polling)) {
_polling = null;
}
rethrow;
}
return _instance!;
}