connect method

dynamic connect(
  1. String apiKey
)

Implementation

connect(String apiKey) {
  _channel = WebSocketChannel.connect(apiEndpoint);
  logger.d(
      "Connected to $apiEndpoint with apiKey: $apiKey and contact identifier: $contactIdentifier");
  // send initial message to subscribe to the channel
  _channel?.sink.add(
    ChatwootSubscribeMessage(
      command: "subscribe",
      identifier: ChatwootIdentifier(
        pubsubToken: apiKey,
        channel: "RoomChannel",
      ),
    ).toString(),
  );

  // listen to the stream
  _channel?.stream.listen(
    (event) {
      var message = chatwootWebsocketResponseFromJson(event);
      logger.d("Received message: $event");
      if (message.message?.data?.content != null ||
          message.message?.data?.attachments != null) {
        logger.d(
            "Received message: ${message.message?.data?.content} from sender: ${message.message?.data?.sender?.id}");
        if (message.message?.data?.sender?.id.toString() == userId) {
          return;
        }
        _streamController.sink.add(message.toChatwootMessage());
      }
    },
    onError: (error) {
      logger.e("Error: $error");
      // reconnect
      connect(apiKey);
    },
  );
}