Interface ConnectionListener

  • All Known Implementing Classes:
    ListenerProxy

    public interface ConnectionListener
    Used to monitor an audio connection, ping, and speaking users.
    This provides functionality similar to the functionalities present in the Discord client related to an audio connection.
    • Method Detail

      • onPing

        void onPing​(long ping)
        Called when JDA send a heartbeat packet to Discord and Discord sends an acknowledgement. The time difference between sending and receiving the acknowledgement is calculated as the ping.
        Parameters:
        ping - The time, in milliseconds, for round-trip packet travel to discord.
      • onStatusChange

        void onStatusChange​(@Nonnull
                            ConnectionStatus status)
        Called when the status of the audio channel changes. Used to track the connection state of the audio connection for easy debug and status display for clients.
        Parameters:
        status - The new ConnectionStatus of the audio connection.
      • onUserSpeaking

        void onUserSpeaking​(@Nonnull
                            User user,
                            boolean speaking)
        This method is an easy way to detect if a user is talking. Discord sends us an event when a user starts or stops talking and it is parallel to the audio socket, so this event could come milliseconds before or after audio begins or stops. This method is brilliant for clients wanting to display that a user is currently talking.

        Unlike the AudioReceiveHandler.handleCombinedAudio(CombinedAudio) and AudioReceiveHandler.handleUserAudio(UserAudio) methods which are fired extremely often, this method is fired as a flag for the beginning and ending of audio transmission, and as such is only fired when that changes. So while the AudioReceiveHandler.handleUserAudio(UserAudio) method is fired every time JDA receives audio data from Discord, this is only fired when that stream starts and when it stops.
        If the user speaks for 3 minutes straight without ever stopping, then this would fire 2 times, once at the beginning and once after 3 minutes when they stop talking even though the AudioReceiveHandler.handleUserAudio(UserAudio) method was fired thousands of times over the course of the 3 minutes.

        Parameters:
        user - Never-null User who's talking status has changed.
        speaking - If true, the user has begun transmitting audio.
      • onUserSpeaking

        default void onUserSpeaking​(@Nonnull
                                    User user,
                                    @Nonnull
                                    java.util.EnumSet<SpeakingMode> modes)
        This method is an easy way to detect if a user is talking. Discord sends us an event when a user starts or stops talking and it is parallel to the audio socket, so this event could come milliseconds before or after audio begins or stops. This method is brilliant for clients wanting to display that a user is currently talking.

        Unlike the AudioReceiveHandler.handleCombinedAudio(CombinedAudio) and AudioReceiveHandler.handleUserAudio(UserAudio) methods which are fired extremely often, this method is fired as a flag for the beginning and ending of audio transmission, and as such is only fired when that changes. So while the AudioReceiveHandler.handleUserAudio(UserAudio) method is fired every time JDA receives audio data from Discord, this is only fired when that stream starts and when it stops.
        If the user speaks for 3 minutes straight without ever stopping, then this would fire 2 times, once at the beginning and once after 3 minutes when they stop talking even though the AudioReceiveHandler.handleUserAudio(UserAudio) method was fired thousands of times over the course of the 3 minutes.

        Parameters:
        user - Never-null User who's talking status has changed.
        modes - EnumSet, containing the active speaking modes. Empty if the user has stopped transmitting audio.
        See Also:
        EnumSet, SpeakingMode
      • onUserSpeaking

        default void onUserSpeaking​(@Nonnull
                                    User user,
                                    boolean speaking,
                                    boolean soundshare)
        This method is an easy way to detect if a user is talking. Discord sends us an event when a user starts or stops talking and it is parallel to the audio socket, so this event could come milliseconds before or after audio begins or stops. This method is brilliant for clients wanting to display that a user is currently talking.

        Unlike the AudioReceiveHandler.handleCombinedAudio(CombinedAudio) and AudioReceiveHandler.handleUserAudio(UserAudio) methods which are fired extremely often, this method is fired as a flag for the beginning and ending of audio transmission, and as such is only fired when that changes. So while the AudioReceiveHandler.handleUserAudio(UserAudio) method is fired every time JDA receives audio data from Discord, this is only fired when that stream starts and when it stops.
        If the user speaks for 3 minutes straight without ever stopping, then this would fire 2 times, once at the beginning and once after 3 minutes when they stop talking even though the AudioReceiveHandler.handleUserAudio(UserAudio) method was fired thousands of times over the course of the 3 minutes.

        Parameters:
        user - Never-null User who's talking status has changed.
        speaking - If true, the user has begun transmitting audio.
        soundshare - If true, the user is using soundshare