joinMeeting method

Joins a meeting based on the MeetHourMeetingOptions passed in. A MeetHourMeetingListener can be attached to this meeting that will automatically be removed when the meeting has ended

Implementation

@override
Future<MeetHourMeetingResponse> joinMeeting(MeetHourMeetingOptions options,
    {MeetHourMeetingListener? listener,
    Map<RoomNameConstraintType, RoomNameConstraint>?
        roomNameConstraints}) async {
  // encode `options` Map to Json to avoid error
  // in interoperability conversions
  String webOptions = jsonEncode(options.webOptions);
  String serverURL = options.serverURL ?? "meethour.io";
  serverURL = serverURL.replaceAll(cleanDomain, "");
  api = meethour.MeetHourAPI(serverURL.toJS, webOptions.toJS);

  // setup listeners
  if (listener != null) {
    api?.on("videoConferenceJoined".toJS, ((JSAny? _message) {
      // Mapping object according with meethour external api source code
      Map<String, dynamic> message = {
        "displayName": _getPropertyString(_message, "displayName"),
        "roomName": _getPropertyString(_message, "roomName")
      };
      listener.onConferenceJoined?.call(message);
    }).toJS);
    api?.on("videoConferenceLeft".toJS, ((JSAny? _message) {
      // Mapping object according with meethour external api source code
      Map<String, dynamic> message = {
        "roomName": _getPropertyString(_message, "roomName")
      };
      listener.onConferenceTerminated?.call(message);
    }).toJS);
    api?.on("feedbackSubmitted".toJS, ((JSAny? message) {
      debugPrint("feedbackSubmitted message: $message");
      listener.onError?.call(message);
    }).toJS);

    // NOTE: `onConferenceWillJoin` is not supported or nof found event in web

    // add geeric listener
    _addGenericListeners(listener);

    // force to dispose view when close meeting
    // this is needed to allow create another room in
    // the same view without reload it
    api?.on("readyToClose".toJS, ((JSAny? message) {
      api?.dispose();
    }).toJS);
  }

  return MeetHourMeetingResponse(isSuccess: true);
}