/////////////////////////////////////////////////////////////////////////////////////////////
// Copyright 2024 Garmin International, Inc.
// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you
// may not use this file except in compliance with the Flexible and Interoperable Data
// Transfer (FIT) Protocol License.
/////////////////////////////////////////////////////////////////////////////////////////////
// ****WARNING****  This file is auto-generated!  Do NOT edit this file.
// Profile Version = 21.158.0Release
// Tag = production/release/21.158.0-0-gc9428aa
/////////////////////////////////////////////////////////////////////////////////////////////


#if !defined(FIT_MESG_BROADCASTER_HPP)
#define FIT_MESG_BROADCASTER_HPP

#include <iosfwd>
#include <vector>
#include "fit_mesg.hpp"
#include "fit_mesg_definition.hpp"
#include "fit_mesg_definition_listener.hpp"
#include "fit_mesg_listener.hpp"
#include "fit_mesg_with_event_broadcaster.hpp"
#include "fit_buffered_record_mesg_broadcaster.hpp"
#include "fit_decode.hpp"
#include "fit_file_id_mesg_listener.hpp"
#include "fit_file_creator_mesg_listener.hpp"
#include "fit_timestamp_correlation_mesg_listener.hpp"
#include "fit_software_mesg_listener.hpp"
#include "fit_slave_device_mesg_listener.hpp"
#include "fit_capabilities_mesg_listener.hpp"
#include "fit_file_capabilities_mesg_listener.hpp"
#include "fit_mesg_capabilities_mesg_listener.hpp"
#include "fit_field_capabilities_mesg_listener.hpp"
#include "fit_device_settings_mesg_listener.hpp"
#include "fit_user_profile_mesg_listener.hpp"
#include "fit_hrm_profile_mesg_listener.hpp"
#include "fit_sdm_profile_mesg_listener.hpp"
#include "fit_bike_profile_mesg_listener.hpp"
#include "fit_connectivity_mesg_listener.hpp"
#include "fit_watchface_settings_mesg_listener.hpp"
#include "fit_ohr_settings_mesg_listener.hpp"
#include "fit_time_in_zone_mesg_listener.hpp"
#include "fit_zones_target_mesg_listener.hpp"
#include "fit_sport_mesg_listener.hpp"
#include "fit_hr_zone_mesg_listener.hpp"
#include "fit_speed_zone_mesg_listener.hpp"
#include "fit_cadence_zone_mesg_listener.hpp"
#include "fit_power_zone_mesg_listener.hpp"
#include "fit_met_zone_mesg_listener.hpp"
#include "fit_dive_settings_mesg_listener.hpp"
#include "fit_dive_alarm_mesg_listener.hpp"
#include "fit_dive_apnea_alarm_mesg_listener.hpp"
#include "fit_dive_gas_mesg_listener.hpp"
#include "fit_goal_mesg_listener.hpp"
#include "fit_activity_mesg_listener.hpp"
#include "fit_session_mesg_listener.hpp"
#include "fit_lap_mesg_listener.hpp"
#include "fit_length_mesg_listener.hpp"
#include "fit_record_mesg_listener.hpp"
#include "fit_event_mesg_listener.hpp"
#include "fit_device_info_mesg_listener.hpp"
#include "fit_device_aux_battery_info_mesg_listener.hpp"
#include "fit_training_file_mesg_listener.hpp"
#include "fit_weather_conditions_mesg_listener.hpp"
#include "fit_weather_alert_mesg_listener.hpp"
#include "fit_gps_metadata_mesg_listener.hpp"
#include "fit_camera_event_mesg_listener.hpp"
#include "fit_gyroscope_data_mesg_listener.hpp"
#include "fit_accelerometer_data_mesg_listener.hpp"
#include "fit_magnetometer_data_mesg_listener.hpp"
#include "fit_barometer_data_mesg_listener.hpp"
#include "fit_three_d_sensor_calibration_mesg_listener.hpp"
#include "fit_one_d_sensor_calibration_mesg_listener.hpp"
#include "fit_video_frame_mesg_listener.hpp"
#include "fit_obdii_data_mesg_listener.hpp"
#include "fit_nmea_sentence_mesg_listener.hpp"
#include "fit_aviation_attitude_mesg_listener.hpp"
#include "fit_video_mesg_listener.hpp"
#include "fit_video_title_mesg_listener.hpp"
#include "fit_video_description_mesg_listener.hpp"
#include "fit_video_clip_mesg_listener.hpp"
#include "fit_set_mesg_listener.hpp"
#include "fit_jump_mesg_listener.hpp"
#include "fit_split_mesg_listener.hpp"
#include "fit_split_summary_mesg_listener.hpp"
#include "fit_climb_pro_mesg_listener.hpp"
#include "fit_field_description_mesg_listener.hpp"
#include "fit_developer_data_id_mesg_listener.hpp"
#include "fit_course_mesg_listener.hpp"
#include "fit_course_point_mesg_listener.hpp"
#include "fit_segment_id_mesg_listener.hpp"
#include "fit_segment_leaderboard_entry_mesg_listener.hpp"
#include "fit_segment_point_mesg_listener.hpp"
#include "fit_segment_lap_mesg_listener.hpp"
#include "fit_segment_file_mesg_listener.hpp"
#include "fit_workout_mesg_listener.hpp"
#include "fit_workout_session_mesg_listener.hpp"
#include "fit_workout_step_mesg_listener.hpp"
#include "fit_exercise_title_mesg_listener.hpp"
#include "fit_schedule_mesg_listener.hpp"
#include "fit_totals_mesg_listener.hpp"
#include "fit_weight_scale_mesg_listener.hpp"
#include "fit_blood_pressure_mesg_listener.hpp"
#include "fit_monitoring_info_mesg_listener.hpp"
#include "fit_monitoring_mesg_listener.hpp"
#include "fit_monitoring_hr_data_mesg_listener.hpp"
#include "fit_spo2_data_mesg_listener.hpp"
#include "fit_hr_mesg_listener.hpp"
#include "fit_stress_level_mesg_listener.hpp"
#include "fit_max_met_data_mesg_listener.hpp"
#include "fit_hsa_body_battery_data_mesg_listener.hpp"
#include "fit_hsa_event_mesg_listener.hpp"
#include "fit_hsa_accelerometer_data_mesg_listener.hpp"
#include "fit_hsa_gyroscope_data_mesg_listener.hpp"
#include "fit_hsa_step_data_mesg_listener.hpp"
#include "fit_hsa_spo2_data_mesg_listener.hpp"
#include "fit_hsa_stress_data_mesg_listener.hpp"
#include "fit_hsa_respiration_data_mesg_listener.hpp"
#include "fit_hsa_heart_rate_data_mesg_listener.hpp"
#include "fit_hsa_configuration_data_mesg_listener.hpp"
#include "fit_hsa_wrist_temperature_data_mesg_listener.hpp"
#include "fit_memo_glob_mesg_listener.hpp"
#include "fit_sleep_level_mesg_listener.hpp"
#include "fit_ant_channel_id_mesg_listener.hpp"
#include "fit_ant_rx_mesg_listener.hpp"
#include "fit_ant_tx_mesg_listener.hpp"
#include "fit_exd_screen_configuration_mesg_listener.hpp"
#include "fit_exd_data_field_configuration_mesg_listener.hpp"
#include "fit_exd_data_concept_configuration_mesg_listener.hpp"
#include "fit_dive_summary_mesg_listener.hpp"
#include "fit_aad_accel_features_mesg_listener.hpp"
#include "fit_hrv_mesg_listener.hpp"
#include "fit_beat_intervals_mesg_listener.hpp"
#include "fit_hrv_status_summary_mesg_listener.hpp"
#include "fit_hrv_value_mesg_listener.hpp"
#include "fit_raw_bbi_mesg_listener.hpp"
#include "fit_respiration_rate_mesg_listener.hpp"
#include "fit_chrono_shot_session_mesg_listener.hpp"
#include "fit_chrono_shot_data_mesg_listener.hpp"
#include "fit_tank_update_mesg_listener.hpp"
#include "fit_tank_summary_mesg_listener.hpp"
#include "fit_sleep_assessment_mesg_listener.hpp"
#include "fit_skin_temp_overnight_mesg_listener.hpp"
#include "fit_pad_mesg_listener.hpp"

namespace fit
{

class MesgBroadcaster : public MesgListener, public MesgDefinitionListener
{
public:
    MesgBroadcaster(void);
    FIT_BOOL Run(std::istream& file);
    void AddListener(MesgDefinitionListener& mesgDefinitionListener);
    void RemoveListener(MesgDefinitionListener& mesgDefinitionListener);
    void AddListener(MesgListener& mesgListener);
    void RemoveListener(MesgListener& mesgListener);
    void AddListener(MesgWithEventListener& mesgListener);
    void RemoveListener(MesgWithEventListener& mesgListener);
    void AddListener(BufferedRecordMesgListener& bufferedRecordMesgListener);
    void RemoveListener(BufferedRecordMesgListener& bufferedRecordMesgListener);
    void AddListener(FileIdMesgListener& fileIdMesgListener);
    void RemoveListener(FileIdMesgListener& fileIdMesgListener);
    void AddListener(FileCreatorMesgListener& fileCreatorMesgListener);
    void RemoveListener(FileCreatorMesgListener& fileCreatorMesgListener);
    void AddListener(TimestampCorrelationMesgListener& timestampCorrelationMesgListener);
    void RemoveListener(TimestampCorrelationMesgListener& timestampCorrelationMesgListener);
    void AddListener(SoftwareMesgListener& softwareMesgListener);
    void RemoveListener(SoftwareMesgListener& softwareMesgListener);
    void AddListener(SlaveDeviceMesgListener& slaveDeviceMesgListener);
    void RemoveListener(SlaveDeviceMesgListener& slaveDeviceMesgListener);
    void AddListener(CapabilitiesMesgListener& capabilitiesMesgListener);
    void RemoveListener(CapabilitiesMesgListener& capabilitiesMesgListener);
    void AddListener(FileCapabilitiesMesgListener& fileCapabilitiesMesgListener);
    void RemoveListener(FileCapabilitiesMesgListener& fileCapabilitiesMesgListener);
    void AddListener(MesgCapabilitiesMesgListener& mesgCapabilitiesMesgListener);
    void RemoveListener(MesgCapabilitiesMesgListener& mesgCapabilitiesMesgListener);
    void AddListener(FieldCapabilitiesMesgListener& fieldCapabilitiesMesgListener);
    void RemoveListener(FieldCapabilitiesMesgListener& fieldCapabilitiesMesgListener);
    void AddListener(DeviceSettingsMesgListener& deviceSettingsMesgListener);
    void RemoveListener(DeviceSettingsMesgListener& deviceSettingsMesgListener);
    void AddListener(UserProfileMesgListener& userProfileMesgListener);
    void RemoveListener(UserProfileMesgListener& userProfileMesgListener);
    void AddListener(HrmProfileMesgListener& hrmProfileMesgListener);
    void RemoveListener(HrmProfileMesgListener& hrmProfileMesgListener);
    void AddListener(SdmProfileMesgListener& sdmProfileMesgListener);
    void RemoveListener(SdmProfileMesgListener& sdmProfileMesgListener);
    void AddListener(BikeProfileMesgListener& bikeProfileMesgListener);
    void RemoveListener(BikeProfileMesgListener& bikeProfileMesgListener);
    void AddListener(ConnectivityMesgListener& connectivityMesgListener);
    void RemoveListener(ConnectivityMesgListener& connectivityMesgListener);
    void AddListener(WatchfaceSettingsMesgListener& watchfaceSettingsMesgListener);
    void RemoveListener(WatchfaceSettingsMesgListener& watchfaceSettingsMesgListener);
    void AddListener(OhrSettingsMesgListener& ohrSettingsMesgListener);
    void RemoveListener(OhrSettingsMesgListener& ohrSettingsMesgListener);
    void AddListener(TimeInZoneMesgListener& timeInZoneMesgListener);
    void RemoveListener(TimeInZoneMesgListener& timeInZoneMesgListener);
    void AddListener(ZonesTargetMesgListener& zonesTargetMesgListener);
    void RemoveListener(ZonesTargetMesgListener& zonesTargetMesgListener);
    void AddListener(SportMesgListener& sportMesgListener);
    void RemoveListener(SportMesgListener& sportMesgListener);
    void AddListener(HrZoneMesgListener& hrZoneMesgListener);
    void RemoveListener(HrZoneMesgListener& hrZoneMesgListener);
    void AddListener(SpeedZoneMesgListener& speedZoneMesgListener);
    void RemoveListener(SpeedZoneMesgListener& speedZoneMesgListener);
    void AddListener(CadenceZoneMesgListener& cadenceZoneMesgListener);
    void RemoveListener(CadenceZoneMesgListener& cadenceZoneMesgListener);
    void AddListener(PowerZoneMesgListener& powerZoneMesgListener);
    void RemoveListener(PowerZoneMesgListener& powerZoneMesgListener);
    void AddListener(MetZoneMesgListener& metZoneMesgListener);
    void RemoveListener(MetZoneMesgListener& metZoneMesgListener);
    void AddListener(DiveSettingsMesgListener& diveSettingsMesgListener);
    void RemoveListener(DiveSettingsMesgListener& diveSettingsMesgListener);
    void AddListener(DiveAlarmMesgListener& diveAlarmMesgListener);
    void RemoveListener(DiveAlarmMesgListener& diveAlarmMesgListener);
    void AddListener(DiveApneaAlarmMesgListener& diveApneaAlarmMesgListener);
    void RemoveListener(DiveApneaAlarmMesgListener& diveApneaAlarmMesgListener);
    void AddListener(DiveGasMesgListener& diveGasMesgListener);
    void RemoveListener(DiveGasMesgListener& diveGasMesgListener);
    void AddListener(GoalMesgListener& goalMesgListener);
    void RemoveListener(GoalMesgListener& goalMesgListener);
    void AddListener(ActivityMesgListener& activityMesgListener);
    void RemoveListener(ActivityMesgListener& activityMesgListener);
    void AddListener(SessionMesgListener& sessionMesgListener);
    void RemoveListener(SessionMesgListener& sessionMesgListener);
    void AddListener(LapMesgListener& lapMesgListener);
    void RemoveListener(LapMesgListener& lapMesgListener);
    void AddListener(LengthMesgListener& lengthMesgListener);
    void RemoveListener(LengthMesgListener& lengthMesgListener);
    void AddListener(RecordMesgListener& recordMesgListener);
    void RemoveListener(RecordMesgListener& recordMesgListener);
    void AddListener(EventMesgListener& eventMesgListener);
    void RemoveListener(EventMesgListener& eventMesgListener);
    void AddListener(DeviceInfoMesgListener& deviceInfoMesgListener);
    void RemoveListener(DeviceInfoMesgListener& deviceInfoMesgListener);
    void AddListener(DeviceAuxBatteryInfoMesgListener& deviceAuxBatteryInfoMesgListener);
    void RemoveListener(DeviceAuxBatteryInfoMesgListener& deviceAuxBatteryInfoMesgListener);
    void AddListener(TrainingFileMesgListener& trainingFileMesgListener);
    void RemoveListener(TrainingFileMesgListener& trainingFileMesgListener);
    void AddListener(WeatherConditionsMesgListener& weatherConditionsMesgListener);
    void RemoveListener(WeatherConditionsMesgListener& weatherConditionsMesgListener);
    void AddListener(WeatherAlertMesgListener& weatherAlertMesgListener);
    void RemoveListener(WeatherAlertMesgListener& weatherAlertMesgListener);
    void AddListener(GpsMetadataMesgListener& gpsMetadataMesgListener);
    void RemoveListener(GpsMetadataMesgListener& gpsMetadataMesgListener);
    void AddListener(CameraEventMesgListener& cameraEventMesgListener);
    void RemoveListener(CameraEventMesgListener& cameraEventMesgListener);
    void AddListener(GyroscopeDataMesgListener& gyroscopeDataMesgListener);
    void RemoveListener(GyroscopeDataMesgListener& gyroscopeDataMesgListener);
    void AddListener(AccelerometerDataMesgListener& accelerometerDataMesgListener);
    void RemoveListener(AccelerometerDataMesgListener& accelerometerDataMesgListener);
    void AddListener(MagnetometerDataMesgListener& magnetometerDataMesgListener);
    void RemoveListener(MagnetometerDataMesgListener& magnetometerDataMesgListener);
    void AddListener(BarometerDataMesgListener& barometerDataMesgListener);
    void RemoveListener(BarometerDataMesgListener& barometerDataMesgListener);
    void AddListener(ThreeDSensorCalibrationMesgListener& threeDSensorCalibrationMesgListener);
    void RemoveListener(ThreeDSensorCalibrationMesgListener& threeDSensorCalibrationMesgListener);
    void AddListener(OneDSensorCalibrationMesgListener& oneDSensorCalibrationMesgListener);
    void RemoveListener(OneDSensorCalibrationMesgListener& oneDSensorCalibrationMesgListener);
    void AddListener(VideoFrameMesgListener& videoFrameMesgListener);
    void RemoveListener(VideoFrameMesgListener& videoFrameMesgListener);
    void AddListener(ObdiiDataMesgListener& obdiiDataMesgListener);
    void RemoveListener(ObdiiDataMesgListener& obdiiDataMesgListener);
    void AddListener(NmeaSentenceMesgListener& nmeaSentenceMesgListener);
    void RemoveListener(NmeaSentenceMesgListener& nmeaSentenceMesgListener);
    void AddListener(AviationAttitudeMesgListener& aviationAttitudeMesgListener);
    void RemoveListener(AviationAttitudeMesgListener& aviationAttitudeMesgListener);
    void AddListener(VideoMesgListener& videoMesgListener);
    void RemoveListener(VideoMesgListener& videoMesgListener);
    void AddListener(VideoTitleMesgListener& videoTitleMesgListener);
    void RemoveListener(VideoTitleMesgListener& videoTitleMesgListener);
    void AddListener(VideoDescriptionMesgListener& videoDescriptionMesgListener);
    void RemoveListener(VideoDescriptionMesgListener& videoDescriptionMesgListener);
    void AddListener(VideoClipMesgListener& videoClipMesgListener);
    void RemoveListener(VideoClipMesgListener& videoClipMesgListener);
    void AddListener(SetMesgListener& setMesgListener);
    void RemoveListener(SetMesgListener& setMesgListener);
    void AddListener(JumpMesgListener& jumpMesgListener);
    void RemoveListener(JumpMesgListener& jumpMesgListener);
    void AddListener(SplitMesgListener& splitMesgListener);
    void RemoveListener(SplitMesgListener& splitMesgListener);
    void AddListener(SplitSummaryMesgListener& splitSummaryMesgListener);
    void RemoveListener(SplitSummaryMesgListener& splitSummaryMesgListener);
    void AddListener(ClimbProMesgListener& climbProMesgListener);
    void RemoveListener(ClimbProMesgListener& climbProMesgListener);
    void AddListener(FieldDescriptionMesgListener& fieldDescriptionMesgListener);
    void RemoveListener(FieldDescriptionMesgListener& fieldDescriptionMesgListener);
    void AddListener(DeveloperDataIdMesgListener& developerDataIdMesgListener);
    void RemoveListener(DeveloperDataIdMesgListener& developerDataIdMesgListener);
    void AddListener(CourseMesgListener& courseMesgListener);
    void RemoveListener(CourseMesgListener& courseMesgListener);
    void AddListener(CoursePointMesgListener& coursePointMesgListener);
    void RemoveListener(CoursePointMesgListener& coursePointMesgListener);
    void AddListener(SegmentIdMesgListener& segmentIdMesgListener);
    void RemoveListener(SegmentIdMesgListener& segmentIdMesgListener);
    void AddListener(SegmentLeaderboardEntryMesgListener& segmentLeaderboardEntryMesgListener);
    void RemoveListener(SegmentLeaderboardEntryMesgListener& segmentLeaderboardEntryMesgListener);
    void AddListener(SegmentPointMesgListener& segmentPointMesgListener);
    void RemoveListener(SegmentPointMesgListener& segmentPointMesgListener);
    void AddListener(SegmentLapMesgListener& segmentLapMesgListener);
    void RemoveListener(SegmentLapMesgListener& segmentLapMesgListener);
    void AddListener(SegmentFileMesgListener& segmentFileMesgListener);
    void RemoveListener(SegmentFileMesgListener& segmentFileMesgListener);
    void AddListener(WorkoutMesgListener& workoutMesgListener);
    void RemoveListener(WorkoutMesgListener& workoutMesgListener);
    void AddListener(WorkoutSessionMesgListener& workoutSessionMesgListener);
    void RemoveListener(WorkoutSessionMesgListener& workoutSessionMesgListener);
    void AddListener(WorkoutStepMesgListener& workoutStepMesgListener);
    void RemoveListener(WorkoutStepMesgListener& workoutStepMesgListener);
    void AddListener(ExerciseTitleMesgListener& exerciseTitleMesgListener);
    void RemoveListener(ExerciseTitleMesgListener& exerciseTitleMesgListener);
    void AddListener(ScheduleMesgListener& scheduleMesgListener);
    void RemoveListener(ScheduleMesgListener& scheduleMesgListener);
    void AddListener(TotalsMesgListener& totalsMesgListener);
    void RemoveListener(TotalsMesgListener& totalsMesgListener);
    void AddListener(WeightScaleMesgListener& weightScaleMesgListener);
    void RemoveListener(WeightScaleMesgListener& weightScaleMesgListener);
    void AddListener(BloodPressureMesgListener& bloodPressureMesgListener);
    void RemoveListener(BloodPressureMesgListener& bloodPressureMesgListener);
    void AddListener(MonitoringInfoMesgListener& monitoringInfoMesgListener);
    void RemoveListener(MonitoringInfoMesgListener& monitoringInfoMesgListener);
    void AddListener(MonitoringMesgListener& monitoringMesgListener);
    void RemoveListener(MonitoringMesgListener& monitoringMesgListener);
    void AddListener(MonitoringHrDataMesgListener& monitoringHrDataMesgListener);
    void RemoveListener(MonitoringHrDataMesgListener& monitoringHrDataMesgListener);
    void AddListener(Spo2DataMesgListener& spo2DataMesgListener);
    void RemoveListener(Spo2DataMesgListener& spo2DataMesgListener);
    void AddListener(HrMesgListener& hrMesgListener);
    void RemoveListener(HrMesgListener& hrMesgListener);
    void AddListener(StressLevelMesgListener& stressLevelMesgListener);
    void RemoveListener(StressLevelMesgListener& stressLevelMesgListener);
    void AddListener(MaxMetDataMesgListener& maxMetDataMesgListener);
    void RemoveListener(MaxMetDataMesgListener& maxMetDataMesgListener);
    void AddListener(HsaBodyBatteryDataMesgListener& hsaBodyBatteryDataMesgListener);
    void RemoveListener(HsaBodyBatteryDataMesgListener& hsaBodyBatteryDataMesgListener);
    void AddListener(HsaEventMesgListener& hsaEventMesgListener);
    void RemoveListener(HsaEventMesgListener& hsaEventMesgListener);
    void AddListener(HsaAccelerometerDataMesgListener& hsaAccelerometerDataMesgListener);
    void RemoveListener(HsaAccelerometerDataMesgListener& hsaAccelerometerDataMesgListener);
    void AddListener(HsaGyroscopeDataMesgListener& hsaGyroscopeDataMesgListener);
    void RemoveListener(HsaGyroscopeDataMesgListener& hsaGyroscopeDataMesgListener);
    void AddListener(HsaStepDataMesgListener& hsaStepDataMesgListener);
    void RemoveListener(HsaStepDataMesgListener& hsaStepDataMesgListener);
    void AddListener(HsaSpo2DataMesgListener& hsaSpo2DataMesgListener);
    void RemoveListener(HsaSpo2DataMesgListener& hsaSpo2DataMesgListener);
    void AddListener(HsaStressDataMesgListener& hsaStressDataMesgListener);
    void RemoveListener(HsaStressDataMesgListener& hsaStressDataMesgListener);
    void AddListener(HsaRespirationDataMesgListener& hsaRespirationDataMesgListener);
    void RemoveListener(HsaRespirationDataMesgListener& hsaRespirationDataMesgListener);
    void AddListener(HsaHeartRateDataMesgListener& hsaHeartRateDataMesgListener);
    void RemoveListener(HsaHeartRateDataMesgListener& hsaHeartRateDataMesgListener);
    void AddListener(HsaConfigurationDataMesgListener& hsaConfigurationDataMesgListener);
    void RemoveListener(HsaConfigurationDataMesgListener& hsaConfigurationDataMesgListener);
    void AddListener(HsaWristTemperatureDataMesgListener& hsaWristTemperatureDataMesgListener);
    void RemoveListener(HsaWristTemperatureDataMesgListener& hsaWristTemperatureDataMesgListener);
    void AddListener(MemoGlobMesgListener& memoGlobMesgListener);
    void RemoveListener(MemoGlobMesgListener& memoGlobMesgListener);
    void AddListener(SleepLevelMesgListener& sleepLevelMesgListener);
    void RemoveListener(SleepLevelMesgListener& sleepLevelMesgListener);
    void AddListener(AntChannelIdMesgListener& antChannelIdMesgListener);
    void RemoveListener(AntChannelIdMesgListener& antChannelIdMesgListener);
    void AddListener(AntRxMesgListener& antRxMesgListener);
    void RemoveListener(AntRxMesgListener& antRxMesgListener);
    void AddListener(AntTxMesgListener& antTxMesgListener);
    void RemoveListener(AntTxMesgListener& antTxMesgListener);
    void AddListener(ExdScreenConfigurationMesgListener& exdScreenConfigurationMesgListener);
    void RemoveListener(ExdScreenConfigurationMesgListener& exdScreenConfigurationMesgListener);
    void AddListener(ExdDataFieldConfigurationMesgListener& exdDataFieldConfigurationMesgListener);
    void RemoveListener(ExdDataFieldConfigurationMesgListener& exdDataFieldConfigurationMesgListener);
    void AddListener(ExdDataConceptConfigurationMesgListener& exdDataConceptConfigurationMesgListener);
    void RemoveListener(ExdDataConceptConfigurationMesgListener& exdDataConceptConfigurationMesgListener);
    void AddListener(DiveSummaryMesgListener& diveSummaryMesgListener);
    void RemoveListener(DiveSummaryMesgListener& diveSummaryMesgListener);
    void AddListener(AadAccelFeaturesMesgListener& aadAccelFeaturesMesgListener);
    void RemoveListener(AadAccelFeaturesMesgListener& aadAccelFeaturesMesgListener);
    void AddListener(HrvMesgListener& hrvMesgListener);
    void RemoveListener(HrvMesgListener& hrvMesgListener);
    void AddListener(BeatIntervalsMesgListener& beatIntervalsMesgListener);
    void RemoveListener(BeatIntervalsMesgListener& beatIntervalsMesgListener);
    void AddListener(HrvStatusSummaryMesgListener& hrvStatusSummaryMesgListener);
    void RemoveListener(HrvStatusSummaryMesgListener& hrvStatusSummaryMesgListener);
    void AddListener(HrvValueMesgListener& hrvValueMesgListener);
    void RemoveListener(HrvValueMesgListener& hrvValueMesgListener);
    void AddListener(RawBbiMesgListener& rawBbiMesgListener);
    void RemoveListener(RawBbiMesgListener& rawBbiMesgListener);
    void AddListener(RespirationRateMesgListener& respirationRateMesgListener);
    void RemoveListener(RespirationRateMesgListener& respirationRateMesgListener);
    void AddListener(ChronoShotSessionMesgListener& chronoShotSessionMesgListener);
    void RemoveListener(ChronoShotSessionMesgListener& chronoShotSessionMesgListener);
    void AddListener(ChronoShotDataMesgListener& chronoShotDataMesgListener);
    void RemoveListener(ChronoShotDataMesgListener& chronoShotDataMesgListener);
    void AddListener(TankUpdateMesgListener& tankUpdateMesgListener);
    void RemoveListener(TankUpdateMesgListener& tankUpdateMesgListener);
    void AddListener(TankSummaryMesgListener& tankSummaryMesgListener);
    void RemoveListener(TankSummaryMesgListener& tankSummaryMesgListener);
    void AddListener(SleepAssessmentMesgListener& sleepAssessmentMesgListener);
    void RemoveListener(SleepAssessmentMesgListener& sleepAssessmentMesgListener);
    void AddListener(SkinTempOvernightMesgListener& skinTempOvernightMesgListener);
    void RemoveListener(SkinTempOvernightMesgListener& skinTempOvernightMesgListener);
    void AddListener(PadMesgListener& padMesgListener);
    void RemoveListener(PadMesgListener& padMesgListener);
    void OnMesg(Mesg& mesg);
    void OnMesgDefinition(MesgDefinition& mesgDef);

private:
    MesgWithEventBroadcaster mesgWithEventBroadcaster;
    BufferedRecordMesgBroadcaster bufferedRecordMesgBroadcaster;
    std::vector<MesgDefinitionListener *> mesgDefinitionListeners;
    std::vector<MesgListener *> mesgListeners;
    std::vector<FileIdMesgListener *> fileIdMesgListeners;
    std::vector<FileCreatorMesgListener *> fileCreatorMesgListeners;
    std::vector<TimestampCorrelationMesgListener *> timestampCorrelationMesgListeners;
    std::vector<SoftwareMesgListener *> softwareMesgListeners;
    std::vector<SlaveDeviceMesgListener *> slaveDeviceMesgListeners;
    std::vector<CapabilitiesMesgListener *> capabilitiesMesgListeners;
    std::vector<FileCapabilitiesMesgListener *> fileCapabilitiesMesgListeners;
    std::vector<MesgCapabilitiesMesgListener *> mesgCapabilitiesMesgListeners;
    std::vector<FieldCapabilitiesMesgListener *> fieldCapabilitiesMesgListeners;
    std::vector<DeviceSettingsMesgListener *> deviceSettingsMesgListeners;
    std::vector<UserProfileMesgListener *> userProfileMesgListeners;
    std::vector<HrmProfileMesgListener *> hrmProfileMesgListeners;
    std::vector<SdmProfileMesgListener *> sdmProfileMesgListeners;
    std::vector<BikeProfileMesgListener *> bikeProfileMesgListeners;
    std::vector<ConnectivityMesgListener *> connectivityMesgListeners;
    std::vector<WatchfaceSettingsMesgListener *> watchfaceSettingsMesgListeners;
    std::vector<OhrSettingsMesgListener *> ohrSettingsMesgListeners;
    std::vector<TimeInZoneMesgListener *> timeInZoneMesgListeners;
    std::vector<ZonesTargetMesgListener *> zonesTargetMesgListeners;
    std::vector<SportMesgListener *> sportMesgListeners;
    std::vector<HrZoneMesgListener *> hrZoneMesgListeners;
    std::vector<SpeedZoneMesgListener *> speedZoneMesgListeners;
    std::vector<CadenceZoneMesgListener *> cadenceZoneMesgListeners;
    std::vector<PowerZoneMesgListener *> powerZoneMesgListeners;
    std::vector<MetZoneMesgListener *> metZoneMesgListeners;
    std::vector<DiveSettingsMesgListener *> diveSettingsMesgListeners;
    std::vector<DiveAlarmMesgListener *> diveAlarmMesgListeners;
    std::vector<DiveApneaAlarmMesgListener *> diveApneaAlarmMesgListeners;
    std::vector<DiveGasMesgListener *> diveGasMesgListeners;
    std::vector<GoalMesgListener *> goalMesgListeners;
    std::vector<ActivityMesgListener *> activityMesgListeners;
    std::vector<SessionMesgListener *> sessionMesgListeners;
    std::vector<LapMesgListener *> lapMesgListeners;
    std::vector<LengthMesgListener *> lengthMesgListeners;
    std::vector<RecordMesgListener *> recordMesgListeners;
    std::vector<EventMesgListener *> eventMesgListeners;
    std::vector<DeviceInfoMesgListener *> deviceInfoMesgListeners;
    std::vector<DeviceAuxBatteryInfoMesgListener *> deviceAuxBatteryInfoMesgListeners;
    std::vector<TrainingFileMesgListener *> trainingFileMesgListeners;
    std::vector<WeatherConditionsMesgListener *> weatherConditionsMesgListeners;
    std::vector<WeatherAlertMesgListener *> weatherAlertMesgListeners;
    std::vector<GpsMetadataMesgListener *> gpsMetadataMesgListeners;
    std::vector<CameraEventMesgListener *> cameraEventMesgListeners;
    std::vector<GyroscopeDataMesgListener *> gyroscopeDataMesgListeners;
    std::vector<AccelerometerDataMesgListener *> accelerometerDataMesgListeners;
    std::vector<MagnetometerDataMesgListener *> magnetometerDataMesgListeners;
    std::vector<BarometerDataMesgListener *> barometerDataMesgListeners;
    std::vector<ThreeDSensorCalibrationMesgListener *> threeDSensorCalibrationMesgListeners;
    std::vector<OneDSensorCalibrationMesgListener *> oneDSensorCalibrationMesgListeners;
    std::vector<VideoFrameMesgListener *> videoFrameMesgListeners;
    std::vector<ObdiiDataMesgListener *> obdiiDataMesgListeners;
    std::vector<NmeaSentenceMesgListener *> nmeaSentenceMesgListeners;
    std::vector<AviationAttitudeMesgListener *> aviationAttitudeMesgListeners;
    std::vector<VideoMesgListener *> videoMesgListeners;
    std::vector<VideoTitleMesgListener *> videoTitleMesgListeners;
    std::vector<VideoDescriptionMesgListener *> videoDescriptionMesgListeners;
    std::vector<VideoClipMesgListener *> videoClipMesgListeners;
    std::vector<SetMesgListener *> setMesgListeners;
    std::vector<JumpMesgListener *> jumpMesgListeners;
    std::vector<SplitMesgListener *> splitMesgListeners;
    std::vector<SplitSummaryMesgListener *> splitSummaryMesgListeners;
    std::vector<ClimbProMesgListener *> climbProMesgListeners;
    std::vector<FieldDescriptionMesgListener *> fieldDescriptionMesgListeners;
    std::vector<DeveloperDataIdMesgListener *> developerDataIdMesgListeners;
    std::vector<CourseMesgListener *> courseMesgListeners;
    std::vector<CoursePointMesgListener *> coursePointMesgListeners;
    std::vector<SegmentIdMesgListener *> segmentIdMesgListeners;
    std::vector<SegmentLeaderboardEntryMesgListener *> segmentLeaderboardEntryMesgListeners;
    std::vector<SegmentPointMesgListener *> segmentPointMesgListeners;
    std::vector<SegmentLapMesgListener *> segmentLapMesgListeners;
    std::vector<SegmentFileMesgListener *> segmentFileMesgListeners;
    std::vector<WorkoutMesgListener *> workoutMesgListeners;
    std::vector<WorkoutSessionMesgListener *> workoutSessionMesgListeners;
    std::vector<WorkoutStepMesgListener *> workoutStepMesgListeners;
    std::vector<ExerciseTitleMesgListener *> exerciseTitleMesgListeners;
    std::vector<ScheduleMesgListener *> scheduleMesgListeners;
    std::vector<TotalsMesgListener *> totalsMesgListeners;
    std::vector<WeightScaleMesgListener *> weightScaleMesgListeners;
    std::vector<BloodPressureMesgListener *> bloodPressureMesgListeners;
    std::vector<MonitoringInfoMesgListener *> monitoringInfoMesgListeners;
    std::vector<MonitoringMesgListener *> monitoringMesgListeners;
    std::vector<MonitoringHrDataMesgListener *> monitoringHrDataMesgListeners;
    std::vector<Spo2DataMesgListener *> spo2DataMesgListeners;
    std::vector<HrMesgListener *> hrMesgListeners;
    std::vector<StressLevelMesgListener *> stressLevelMesgListeners;
    std::vector<MaxMetDataMesgListener *> maxMetDataMesgListeners;
    std::vector<HsaBodyBatteryDataMesgListener *> hsaBodyBatteryDataMesgListeners;
    std::vector<HsaEventMesgListener *> hsaEventMesgListeners;
    std::vector<HsaAccelerometerDataMesgListener *> hsaAccelerometerDataMesgListeners;
    std::vector<HsaGyroscopeDataMesgListener *> hsaGyroscopeDataMesgListeners;
    std::vector<HsaStepDataMesgListener *> hsaStepDataMesgListeners;
    std::vector<HsaSpo2DataMesgListener *> hsaSpo2DataMesgListeners;
    std::vector<HsaStressDataMesgListener *> hsaStressDataMesgListeners;
    std::vector<HsaRespirationDataMesgListener *> hsaRespirationDataMesgListeners;
    std::vector<HsaHeartRateDataMesgListener *> hsaHeartRateDataMesgListeners;
    std::vector<HsaConfigurationDataMesgListener *> hsaConfigurationDataMesgListeners;
    std::vector<HsaWristTemperatureDataMesgListener *> hsaWristTemperatureDataMesgListeners;
    std::vector<MemoGlobMesgListener *> memoGlobMesgListeners;
    std::vector<SleepLevelMesgListener *> sleepLevelMesgListeners;
    std::vector<AntChannelIdMesgListener *> antChannelIdMesgListeners;
    std::vector<AntRxMesgListener *> antRxMesgListeners;
    std::vector<AntTxMesgListener *> antTxMesgListeners;
    std::vector<ExdScreenConfigurationMesgListener *> exdScreenConfigurationMesgListeners;
    std::vector<ExdDataFieldConfigurationMesgListener *> exdDataFieldConfigurationMesgListeners;
    std::vector<ExdDataConceptConfigurationMesgListener *> exdDataConceptConfigurationMesgListeners;
    std::vector<DiveSummaryMesgListener *> diveSummaryMesgListeners;
    std::vector<AadAccelFeaturesMesgListener *> aadAccelFeaturesMesgListeners;
    std::vector<HrvMesgListener *> hrvMesgListeners;
    std::vector<BeatIntervalsMesgListener *> beatIntervalsMesgListeners;
    std::vector<HrvStatusSummaryMesgListener *> hrvStatusSummaryMesgListeners;
    std::vector<HrvValueMesgListener *> hrvValueMesgListeners;
    std::vector<RawBbiMesgListener *> rawBbiMesgListeners;
    std::vector<RespirationRateMesgListener *> respirationRateMesgListeners;
    std::vector<ChronoShotSessionMesgListener *> chronoShotSessionMesgListeners;
    std::vector<ChronoShotDataMesgListener *> chronoShotDataMesgListeners;
    std::vector<TankUpdateMesgListener *> tankUpdateMesgListeners;
    std::vector<TankSummaryMesgListener *> tankSummaryMesgListeners;
    std::vector<SleepAssessmentMesgListener *> sleepAssessmentMesgListeners;
    std::vector<SkinTempOvernightMesgListener *> skinTempOvernightMesgListeners;
    std::vector<PadMesgListener *> padMesgListeners;
};

} // namespace fit

#endif // !defined(FIT_MESG_BROADCASTER_HPP)
