connect method

Future<void> connect(
  1. String channelId, [
  2. String? firstMessage
])

Implementation

Future<void> connect(String channelId, [String? firstMessage]) async {
  try {
    _channelId = channelId;
    final wsUrl = '$baseWsUrl/$channelId';
    print('Attempting to connect to WebSocket...');
    _socket = await WebSocket.connect(wsUrl);
    print('WebSocket connection established successfully!');
    // Initialize message controller if not already done
    _messageController ??= StreamController<Map<String, dynamic>>.broadcast();

    // Send initial connection message
    final initialMessage = {
      'firstMsg': 'client',
      'usernameCookie': '',
      'message':
          (firstMessage != null && firstMessage.isNotEmpty)
              ? firstMessage
              : null,
      'chatInstanceId': null,
      'channelID': channelId,
    };
    // print('Sending initial connection message: $initialMessage');
    _socket!.add(jsonEncode(initialMessage));

    _socket!.listen(
      (data) {
        if (_messageController?.isClosed == false) {
          final message = jsonDecode(data);
          print('Received message');
          // print(message);

          // Store instanceId from first response
          if (_instanceId == null && message['instanceId'] != null) {
            _instanceId = message['instanceId'];
            print('Stored instanceId: $_instanceId');

            // Save instance ID to local storage
            _saveInstanceId(_instanceId!);

            // Send first message after we have instanceId
            if (firstMessage != null && firstMessage.isNotEmpty) {
              final messageId = generateUniqueId();
              final timestamp = DateTime.now().millisecondsSinceEpoch / 1000;
              final newMessage = {
                'instanceId': _instanceId,
                "channelID": channelId,
                "messageId": messageId,
                "timestamp": timestamp,
                "chatMessage": {
                  "message": firstMessage,
                  "realMessage": firstMessage,
                  "displayType": "text",
                  "chatSide": "incoming",
                },
              };
              print('Sending initial message: $newMessage');
              _messageController?.add(newMessage);
            }
          }
          _messageController?.add(message);
        }
      },
      onError: (error) {
        print('WebSocket Error: $error');
      },
      onDone: () {
        print('WebSocket connection closed');
        disconnect();
      },
    );
  } catch (e) {
    print('WebSocket connection error: $e');
  }
}