sendMessage function

Future<void> sendMessage({
  1. required Map<String, dynamic> parameters,
})

Implementation

Future<void> sendMessage({required Map<String, dynamic> parameters}) async {
  final String member = parameters['member'] ?? '';
  final String islevel = parameters['islevel'] ?? '1';
  final ShowAlert? showAlert = parameters['showAlert'];
  final CoHostResponsibility coHostResponsibility =
      parameters['coHostResponsibility'] ?? [];
  final String coHost = parameters['coHost'] ?? '';
  final String chatSetting = parameters['chatSetting'] ?? '';
  final String? message = parameters['message'] ?? '';
  final String roomName = parameters['roomName'] ?? '';
  final int messagesLength = parameters['messagesLength'] ?? 0;
  final List receivers = parameters['receivers'] ?? [];
  final bool? group = parameters['group'] ?? false;
  final String? sender = parameters['sender'] ?? '';
  final io.Socket socket = parameters['socket'];

  bool chatValue = false;

  // Check message count limit based on the room type
  if ((messagesLength > 100 && roomName.startsWith('d')) ||
      (messagesLength > 500 && roomName.startsWith('s')) ||
      (messagesLength > 100000 && roomName.startsWith('p'))) {
    if (showAlert != null) {
      showAlert(
        message: 'You have reached the maximum number of messages allowed.',
        type: 'danger',
        duration: 3000,
      );
    }
    return;
  }

  // Validate message, sender, and receivers
  if (message == null || (member.isEmpty && sender == null)) {
    if (showAlert != null) {
      showAlert(
        message: 'Message is not valid.',
        type: 'danger',
        duration: 3000,
      );
    }
    return;
  }

  // Create the message object
  final messageObject = {
    'sender': sender != null && sender.isNotEmpty ? sender : member,
    'receivers': receivers,
    'message': message,
    'timestamp': DateFormat('HH:mm:ss').format(DateTime.now()),
    'group': group != null && group == true,
  };

  try {
    // Check co-host responsibility for chat
    chatValue = coHostResponsibility
        .firstWhere((item) => item['name'] == 'chat')['value'];
  } catch (error) {}

  if (islevel == '2' || (coHost == member && chatValue == true)) {
    // Allow sending message
  } else {
    // Check if user is allowed to send a message in the event room
    if (chatSetting != 'allow') {
      if (showAlert != null) {
        showAlert(
          message: 'You are not allowed to send a message in this event room',
          type: 'danger',
          duration: 3000,
        );
      }
      return;
    }
  }

  // Send the message to the server
  socket.emit('sendMessage', {
    'messageObject': messageObject,
    'roomName': roomName,
  });
}