connect method
void
connect({})
Implementation
void connect({
required SocketData socketData,
required TokenData tokenData,
required User user,
required Config config,
required Function(Map<String, dynamic>) eventCallback,
}) {
Logs.info("connect called", tag: 'socket');
// Idempotent: already connected
if (socket != null && socket!.connected) {
Logs.warning(
"Socket already connected with ID: ${socket!.id}", tag: 'socket');
Logs.warning("Skipping — already connected", tag: 'socket');
this.tokenData = tokenData;
this.user = user;
this.config = config;
return;
}
// Idempotent: connection already in progress
if (_isConnecting) {
Logs.warning("Connection already in progress — skipping duplicate",
tag: 'socket');
this.tokenData = tokenData;
this.user = user;
this.config = config;
return;
}
// Dispose old socket if it exists but is disconnected
if (socket != null) {
Logs.warning("Disposing old disconnected socket", tag: 'socket');
try {
socket!.dispose();
} catch (e) {
Logs.logError("Error disposing old socket", tag: 'socket', error: e);
}
_eventListenerRegistered = false;
_openInteractionCalled = false;
_lastOpenInteractionTime = null;
}
Logs.info("Creating NEW socket connection", tag: 'socket');
_isConnecting = true;
this.tokenData = tokenData;
this.user = user;
this.config = config;
socket = io(
socketData.server,
OptionBuilder()
.setTransports(['websocket', 'polling'])
.disableAutoConnect()
.setReconnectionAttempts(5)
.setPath(socketData.socketPath!)
.setQuery({
"id": user.participantId,
"queue": tokenData.queue,
"role": 'customer',
"appId": tokenData.id,
"token": tokenData.socketToken,
"page": tokenData.page,
"title": tokenData.title
})
.build());
socket!.connect();
socket!.onConnect((_) {
Logs.info("Connection established - Socket ID: ${socket!.id}",
tag: 'connection');
_isInitialized = true;
_isConnecting = false;
_registerEventListener(callback: eventCallback);
initializeSocketSession();
});
socket!.onDisconnect((_) {
Logs.warning("Connection Disconnection - Socket ID: ${socket?.id}",
tag: 'connection');
_isInitialized = false;
_isConnecting = false;
});
socket!.onConnectError((err) {
Logs.logError("Connection Error", tag: 'connection', error: err);
_isInitialized = false;
_isConnecting = false;
});
socket!.onError((err) {
Logs.logError("Socket Error", tag: 'socket', error: err);
});
}