All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.twitch4j.pubsub.ITwitchPubSub Maven / Gradle / Ivy

The newest version!
package com.github.twitch4j.pubsub;

import com.github.philippheuer.credentialmanager.domain.OAuth2Credential;
import com.github.philippheuer.events4j.core.EventManager;
import com.github.twitch4j.common.annotation.Unofficial;
import com.github.twitch4j.common.util.CryptoUtils;
import com.github.twitch4j.pubsub.domain.PubSubRequest;
import com.github.twitch4j.pubsub.enums.PubSubType;
import org.jetbrains.annotations.ApiStatus;

import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;

public interface ITwitchPubSub extends AutoCloseable {

    EventManager getEventManager();

    /**
     * Send WS Message to subscribe to a topic
     *
     * @param request Topic
     * @return PubSubSubscription to be listened to
     */
    PubSubSubscription listenOnTopic(PubSubRequest request);

    /**
     * Unsubscribe from a topic.
     * Usage example:
     * 
     *      PubSubSubscription subscription = twitchPubSub.listenForCheerEvents(...);
     *      // ...
     *      twitchPubSub.unsubscribeFromTopic(subscription);
     * 
* * @param subscription PubSubSubscription to be unlistened from * @return whether the subscription was previously subscribed to */ boolean unsubscribeFromTopic(PubSubSubscription subscription); @Override void close(); default PubSubSubscription listenOnTopic(PubSubType type, OAuth2Credential credential, Collection topics) { PubSubRequest request = new PubSubRequest(); request.setType(type); request.setNonce(CryptoUtils.generateNonce(30)); request.setCredential(credential); request.getData().put("topics", topics); return listenOnTopic(request); } default PubSubSubscription listenOnTopic(PubSubType type, OAuth2Credential credential, String topic) { return listenOnTopic(type, credential, Collections.singletonList(topic)); } default PubSubSubscription listenOnTopic(PubSubType type, OAuth2Credential credential, String... topics) { return listenOnTopic(type, credential, Arrays.asList(topics)); } /** * Event Listener: AutoMod flags a message as potentially inappropriate, and when a moderator takes action on a message. * * @param credential Credential (for userId, scope: channel:moderate) * @param userId The moderator's user id associated with the credential * @param channelId The user id associated with the target channel * @return PubSubSubscription * @see Deprecation Announcement * @deprecated Twitch will decommission all official PubSub topics on April 14, 2025. */ @Deprecated default PubSubSubscription listenForAutomodQueueEvents(OAuth2Credential credential, String userId, String channelId) { return listenOnTopic(PubSubType.LISTEN, credential, "automod-queue." + userId + "." + channelId); } /** * Event Listener: User earned a new Bits badge and shared the notification with chat * * @param credential Credential (for target channel id, scope: bits:read) * @param channelId Target Channel Id * @return PubSubSubscription * @see Deprecation Announcement * @deprecated Twitch will decommission all official PubSub topics on April 14, 2025. */ @Deprecated @ApiStatus.ScheduledForRemoval(inVersion = "2.0.0") default PubSubSubscription listenForBitsBadgeEvents(OAuth2Credential credential, String channelId) { return listenOnTopic(PubSubType.LISTEN, credential, "channel-bits-badge-unlocks." + channelId); } /** * Event Listener: Anyone cheers on a specified channel. * * @param credential Credential (for target channel id, scope: bits:read) * @param channelId Target Channel Id * @return PubSubSubscription * @see Deprecation Announcement * @deprecated Twitch will decommission all official PubSub topics on April 14, 2025. */ @Deprecated @ApiStatus.ScheduledForRemoval(inVersion = "2.0.0") default PubSubSubscription listenForCheerEvents(OAuth2Credential credential, String channelId) { return listenOnTopic(PubSubType.LISTEN, credential, "channel-bits-events-v2." + channelId); } /** * Event Listener: Anyone subscribes (first month), resubscribes (subsequent months), or gifts a subscription to a channel. * * @param credential Credential (for targetChannelId, scope: channel_subscriptions) * @param channelId Target Channel Id * @return PubSubSubscription * @see Deprecation Announcement * @deprecated Twitch will decommission all official PubSub topics on April 14, 2025. */ @Deprecated @ApiStatus.ScheduledForRemoval(inVersion = "2.0.0") default PubSubSubscription listenForSubscriptionEvents(OAuth2Credential credential, String channelId) { return listenOnTopic(PubSubType.LISTEN, credential, "channel-subscribe-events-v1." + channelId); } /** * Event Listener: Anyone makes a purchase on a channel. * * @param credential Credential (any) * @param channelId Target Channel Id * @return PubSubSubscription * @see Deprecation Announcement * @deprecated Twitch will decommission all official PubSub topics on April 14, 2025. */ @Deprecated @ApiStatus.ScheduledForRemoval(inVersion = "2.0.0") default PubSubSubscription listenForCommerceEvents(OAuth2Credential credential, String channelId) { return listenOnTopic(PubSubType.LISTEN, credential, "channel-commerce-events-v1." + channelId); } /** * Event Listener: Anyone whispers the specified user. * * @param credential Credential (for targetUserId, scope: whispers:read) * @param userId Target User Id * @return PubSubSubscription * @see Deprecation Announcement * @deprecated Twitch will decommission all official PubSub topics on April 14, 2025. */ @Deprecated default PubSubSubscription listenForWhisperEvents(OAuth2Credential credential, String userId) { return listenOnTopic(PubSubType.LISTEN, credential, "whispers." + userId); } /** * Event Listener: Suspicious user events. *

* This includes when a chatter's treatment status changes (e.g., monitored or restricted), * and when a treated user sends a chat message. * * @param credential Moderator's user access token (scope: channel:moderate) associated with the specified user id. * @param userId The user id of the moderator. * @param channelId The channel id to monitor events from. * @return PubSubSubscription * @see com.github.twitch4j.auth.domain.TwitchScopes#CHAT_CHANNEL_MODERATE * @see Deprecation Announcement * @deprecated Twitch will decommission all official PubSub topics on April 14, 2025. */ @Deprecated default PubSubSubscription listenForLowTrustUsersEvents(OAuth2Credential credential, String userId, String channelId) { return listenOnTopic(PubSubType.LISTEN, credential, "low-trust-users." + userId + "." + channelId); } /** * Event Listener: A moderator performs an action in the channel * * @param credential Credential (for channelId, scope: channel:moderate) * @param channelId Target Channel Id * @return PubSubSubscription * @deprecated in favor of listenForModerationEvents(OAuth2Credential, String, String) */ @Deprecated @Unofficial default PubSubSubscription listenForModerationEvents(OAuth2Credential credential, String channelId) { return listenOnTopic(PubSubType.LISTEN, credential, "chat_moderator_actions." + channelId); } /** * Event Listener: A moderator performs an action in the channel * * @param credential Credential (for userId, scope: channel:moderate) * @param userId The user id associated with the credential * @param channelId The user id associated with the target channel * @return PubSubSubscription * @see Deprecation Announcement * @deprecated Twitch will decommission all official PubSub topics on April 14, 2025. */ @Deprecated default PubSubSubscription listenForModerationEvents(OAuth2Credential credential, String userId, String channelId) { return listenForModerationEvents(credential, userId + "." + channelId); } /** * Event Listener: A user’s message held by AutoMod has been approved or denied. * * @param credential Credential (for userId, scope: chat:read) * @param userId The user id associated with the credential * @param channelId The user id associated with the target channel * @return PubSubSubscription * @see Deprecation Announcement * @deprecated Twitch will decommission all official PubSub topics on April 14, 2025. */ @Deprecated default PubSubSubscription listenForUserModerationNotificationEvents(OAuth2Credential credential, String userId, String channelId) { return listenOnTopic(PubSubType.LISTEN, credential, "user-moderation-notifications." + userId + "." + channelId); } /** * Event Listener: Anyone makes a channel points redemption on a channel. * * @param credential Credential (with the channel:read:redemptions scope for maximum information) * @param channelId Target Channel Id * @return PubSubSubscription */ default PubSubSubscription listenForChannelPointsRedemptionEvents(OAuth2Credential credential, String channelId) { return listenOnTopic(PubSubType.LISTEN, credential, "community-points-channel-v1." + channelId); } /* * Undocumented topics - Use at your own risk */ @Unofficial default PubSubSubscription listenForAdsEvents(OAuth2Credential credential, String channelId) { return listenOnTopic(PubSubType.LISTEN, credential, "ads." + channelId); } @Unofficial default PubSubSubscription listenForAdsManagerEvents(OAuth2Credential credential, String userId, String channelId) { return listenOnTopic(PubSubType.LISTEN, credential, "ads-manager." + userId + '.' + channelId); } @Unofficial @Deprecated default PubSubSubscription listenForAdPropertyRefreshEvents(OAuth2Credential credential, String channelId) { return listenOnTopic(PubSubType.LISTEN, credential, "ad-property-refresh." + channelId); } @Unofficial default PubSubSubscription listenForAutomodLevelsModificationEvents(OAuth2Credential credential, String userId, String channelId) { return listenOnTopic(PubSubType.LISTEN, credential, "automod-levels-modification." + userId + "." + channelId); } @Unofficial @Deprecated default PubSubSubscription listenForBountyBoardEvents(OAuth2Credential credential, String channelId) { return listenOnTopic(PubSubType.LISTEN, credential, "channel-bounty-board-events.cta." + channelId); } @Unofficial @Deprecated default PubSubSubscription listenForDashboardActivityFeedEvents(OAuth2Credential credential, String userId) { return listenOnTopic(PubSubType.LISTEN, credential, "dashboard-activity-feed." + userId); } @Unofficial default PubSubSubscription listenForCommunityBoostEvents(OAuth2Credential credential, String channelId) { return listenOnTopic(PubSubType.LISTEN, credential, "community-boost-events-v1." + channelId); } @Unofficial default PubSubSubscription listenForCreatorGoalsEvents(OAuth2Credential credential, String channelId) { return listenOnTopic(PubSubType.LISTEN, credential, "creator-goals-events-v1." + channelId); } /** * @param credential {@link OAuth2Credential} * @param channelId channel id * @return PubSubSubscription * @deprecated the crowd chant experiment was disabled by Twitch on 2022-02-02 */ @Unofficial @Deprecated @ApiStatus.ScheduledForRemoval(inVersion = "2.0.0") default PubSubSubscription listenForCrowdChantEvents(OAuth2Credential credential, String channelId) { return listenOnTopic(PubSubType.LISTEN, credential, "crowd-chant-channel-v1." + channelId); } @Unofficial default PubSubSubscription listenForUserChannelPointsEvents(OAuth2Credential credential, String userId) { return listenOnTopic(PubSubType.LISTEN, credential, "community-points-user-v1." + userId); } @Unofficial @Deprecated default PubSubSubscription listenForChannelDropEvents(OAuth2Credential credential, String channelId) { return listenOnTopic(PubSubType.LISTEN, credential, "channel-drop-events." + channelId); } @Unofficial default PubSubSubscription listenForChannelBitsLeaderboardEvents(OAuth2Credential credential, String channelId) { return listenForChannelBitsLeaderboardEvents(credential, channelId, "WEEK"); } @Unofficial default PubSubSubscription listenForChannelBitsLeaderboardMonthlyEvents(OAuth2Credential credential, String channelId) { return listenForChannelBitsLeaderboardEvents(credential, channelId, "MONTH"); } @Unofficial default PubSubSubscription listenForChannelBitsLeaderboardAllTimeEvents(OAuth2Credential credential, String channelId) { return listenForChannelBitsLeaderboardEvents(credential, channelId, "ALLTIME"); } @Unofficial default PubSubSubscription listenForChannelBitsLeaderboardEvents(OAuth2Credential credential, String channelId, String timeAggregationUnit) { return listenOnTopic(PubSubType.LISTEN, credential, "leaderboard-events-v1.bits-usage-by-channel-v1-" + channelId + "-" + timeAggregationUnit); } @Unofficial @Deprecated default PubSubSubscription listenForChannelPrimeGiftStatusEvents(OAuth2Credential credential, String channelId) { return listenOnTopic(PubSubType.LISTEN, credential, "channel-prime-gifting-status." + channelId); } @Unofficial default PubSubSubscription listenForChannelSubLeaderboardEvents(OAuth2Credential credential, String channelId) { return listenForChannelSubLeaderboardEvents(credential, channelId, "WEEK"); } @Unofficial default PubSubSubscription listenForChannelSubLeaderboardMonthlyEvents(OAuth2Credential credential, String channelId) { return listenForChannelSubLeaderboardEvents(credential, channelId, "MONTH"); } @Unofficial default PubSubSubscription listenForChannelSubLeaderboardAllTimeEvents(OAuth2Credential credential, String channelId) { return listenForChannelSubLeaderboardEvents(credential, channelId, "ALLTIME"); } @Unofficial default PubSubSubscription listenForChannelSubLeaderboardEvents(OAuth2Credential credential, String channelId, String timeAggregationUnit) { return listenOnTopic(PubSubType.LISTEN, credential, "leaderboard-events-v1.sub-gifts-sent-" + channelId + "-" + timeAggregationUnit); } @Unofficial default PubSubSubscription listenForLeaderboardEvents(OAuth2Credential credential, String channelId) { return listenForLeaderboardEvents(credential, channelId, "WEEK"); } @Unofficial default PubSubSubscription listenForLeaderboardMonthlyEvents(OAuth2Credential credential, String channelId) { return listenForLeaderboardEvents(credential, channelId, "MONTH"); } @Unofficial default PubSubSubscription listenForLeaderboardAllTimeEvents(OAuth2Credential credential, String channelId) { return listenForLeaderboardEvents(credential, channelId, "ALLTIME"); } @Unofficial default PubSubSubscription listenForLeaderboardEvents(OAuth2Credential credential, String channelId, String timeAggregationUnit) { return listenOnTopic( PubSubType.LISTEN, credential, "leaderboard-events-v1.bits-usage-by-channel-v1-" + channelId + "-" + timeAggregationUnit, "leaderboard-events-v1.sub-gifts-sent-" + channelId + "-" + timeAggregationUnit ); } @Unofficial default PubSubSubscription listenForPinnedChatEvents(OAuth2Credential credential, String channelId) { return listenOnTopic(PubSubType.LISTEN, credential, "pinned-chat-updates-v1." + channelId); } @Unofficial default PubSubSubscription listenForChannelPredictionsEvents(OAuth2Credential credential, String channelId) { return listenOnTopic(PubSubType.LISTEN, credential, "predictions-channel-v1." + channelId); } @Unofficial default PubSubSubscription listenForUserPredictionsEvents(OAuth2Credential credential, String userId) { return listenOnTopic(PubSubType.LISTEN, credential, "predictions-user-v1." + userId); } @Unofficial default PubSubSubscription listenForSharedChatEvents(OAuth2Credential credential, String channelId) { return listenOnTopic(PubSubType.LISTEN, credential, "shared-chat-channel-v1." + channelId); } @Unofficial default PubSubSubscription listenForChannelSubGiftsEvents(OAuth2Credential credential, String channelId) { return listenOnTopic(PubSubType.LISTEN, credential, "channel-sub-gifts-v1." + channelId); } @Unofficial @Deprecated @ApiStatus.ScheduledForRemoval(inVersion = "2.0.0") default PubSubSubscription listenForChannelSquadEvents(OAuth2Credential credential, String channelId) { return listenOnTopic(PubSubType.LISTEN, credential, "channel-squad-updates." + channelId); } @Unofficial default PubSubSubscription listenForRaidEvents(OAuth2Credential credential, String channelId) { return listenOnTopic(PubSubType.LISTEN, credential, "raid." + channelId); } @Unofficial default PubSubSubscription listenForChannelUnbanRequestEvents(OAuth2Credential credential, String userId, String channelId) { return listenOnTopic(PubSubType.LISTEN, credential, "channel-unban-requests." + userId + '.' + channelId); } @Unofficial default PubSubSubscription listenForUserUnbanRequestEvents(OAuth2Credential credential, String userId, String channelId) { return listenOnTopic(PubSubType.LISTEN, credential, "user-unban-requests." + userId + '.' + channelId); } @Unofficial @Deprecated default PubSubSubscription listenForChannelExtensionEvents(OAuth2Credential credential, String channelId) { return listenOnTopic(PubSubType.LISTEN, credential, "channel-ext-v1." + channelId); } @Unofficial default PubSubSubscription listenForCharityCampaignEvents(OAuth2Credential credential, String channelId) { return listenOnTopic(PubSubType.LISTEN, credential, "charity-campaign-donation-events-v1." + channelId); } @Unofficial @Deprecated default PubSubSubscription listenForExtensionControlEvents(OAuth2Credential credential, String channelId) { return listenOnTopic(PubSubType.LISTEN, credential, "extension-control." + channelId); } @Unofficial default PubSubSubscription listenForHypeTrainEvents(OAuth2Credential credential, String channelId) { return listenOnTopic(PubSubType.LISTEN, credential, "hype-train-events-v2." + channelId); } @Unofficial @Deprecated // implemented, but no longer used by first-party @ApiStatus.ScheduledForRemoval(inVersion = "2.0.0") default PubSubSubscription listenForHypeTrainRewardEvents(OAuth2Credential credential, String channelId) { return listenOnTopic(PubSubType.LISTEN, credential, "hype-train-events-v1.rewards." + channelId); } @Unofficial default PubSubSubscription listenForBroadcastSettingUpdateEvents(OAuth2Credential credential, String channelId) { return listenOnTopic(PubSubType.LISTEN, credential, "broadcast-settings-update." + channelId); } @Unofficial @Deprecated @ApiStatus.ScheduledForRemoval(inVersion = "2.0.0") default PubSubSubscription listenForCelebrationEvents(OAuth2Credential credential, String channelId) { return listenOnTopic(PubSubType.LISTEN, credential, "celebration-events-v1." + channelId); } @Unofficial @Deprecated default PubSubSubscription listenForPublicBitEvents(OAuth2Credential credential, String channelId) { return listenOnTopic(PubSubType.LISTEN, credential, "channel-bit-events-public." + channelId); } @Unofficial default PubSubSubscription listenForChatHighlightEvents(OAuth2Credential credential, String userId, String channelId) { return listenOnTopic(PubSubType.LISTEN, credential, "channel-chat-highlights." + userId + '.' + channelId); } @Unofficial default PubSubSubscription listenForPublicCheerEvents(OAuth2Credential credential, String channelId) { return listenOnTopic(PubSubType.LISTEN, credential, "channel-cheer-events-public-v1." + channelId); } @Unofficial @Deprecated default PubSubSubscription listenForStreamChangeEvents(OAuth2Credential credential, String channelId) { return listenOnTopic(PubSubType.LISTEN, credential, "stream-change-by-channel." + channelId); } @Unofficial @Deprecated default PubSubSubscription listenForStreamChatRoomEvents(OAuth2Credential credential, String channelId) { return listenOnTopic(PubSubType.LISTEN, credential, "stream-chat-room-v1." + channelId); } @Unofficial @Deprecated default PubSubSubscription listenForChannelChatroomEvents(OAuth2Credential credential, String channelId) { return listenOnTopic(PubSubType.LISTEN, credential, "chatrooms-channel-v1." + channelId); } @Unofficial default PubSubSubscription listenForUserChatroomEvents(OAuth2Credential credential, String userId) { return listenOnTopic(PubSubType.LISTEN, credential, "chatrooms-user-v1." + userId); } @Unofficial @Deprecated default PubSubSubscription listenForUserBitsUpdateEvents(OAuth2Credential credential, String userId) { return listenOnTopic(PubSubType.LISTEN, credential, "user-bits-updates-v1." + userId); } @Unofficial @Deprecated default PubSubSubscription listenForUserCampaignEvents(OAuth2Credential credential, String userId) { return listenOnTopic(PubSubType.LISTEN, credential, "user-campaign-events." + userId); } @Unofficial @Deprecated default PubSubSubscription listenForUserDropEvents(OAuth2Credential credential, String userId) { return listenOnTopic(PubSubType.LISTEN, credential, "user-drop-events." + userId); } @Unofficial @Deprecated default PubSubSubscription listenForUserPropertiesUpdateEvents(OAuth2Credential credential, String userId) { return listenOnTopic(PubSubType.LISTEN, credential, "user-properties-update." + userId); } @Unofficial @Deprecated default PubSubSubscription listenForUserSubscribeEvents(OAuth2Credential credential, String userId) { return listenOnTopic(PubSubType.LISTEN, credential, "user-subscribe-events-v1." + userId); } @Unofficial @Deprecated default PubSubSubscription listenForUserImageUpdateEvents(OAuth2Credential credential, String userId) { return listenOnTopic(PubSubType.LISTEN, credential, "user-image-update." + userId); } /** * Event Listener: Anyone follows the specified channel. * * @param credential {@link OAuth2Credential} * @param channelId the id for the channel * @return PubSubSubscription * @deprecated Twitch has silently disabled this topic, even for first-party moderator tokens. * You should migrate to eventsub (websocket) channel.follow v2 subscription type. */ @Unofficial @Deprecated // https://github.com/twitchdev/issues/issues/843 @ApiStatus.ScheduledForRemoval(inVersion = "2.0.0") default PubSubSubscription listenForFollowingEvents(OAuth2Credential credential, String channelId) { return listenOnTopic(PubSubType.LISTEN, credential, "following." + channelId); } /** * Event Listener: Your account follows or unfollows any channel. *

* This is not a replacement for {@link #listenForFollowingEvents(OAuth2Credential, String)}. *

* Fires {@link com.github.twitch4j.pubsub.events.OutboundFollowPubSubEvent} and * {@link com.github.twitch4j.pubsub.events.OutboundUnfollowPubSubEvent}. *

* This is an unofficial topic that does not accept third-party tokens; it could stop working at any time. * * @param credential first-party user token * @param userId the id associated with the token for the user performing follows/unfollows * @return PubSubSubscription */ @Unofficial default PubSubSubscription listenForFollows(OAuth2Credential credential, String userId) { return listenOnTopic(PubSubType.LISTEN, credential, "follows." + userId); } /** * @param credential user access token * @param userId user id associated with the token * @return PubSubSubscription * @deprecated Friends are being removed by Twitch on 2022-05-25 */ @Unofficial @Deprecated @ApiStatus.ScheduledForRemoval(inVersion = "2.0.0") default PubSubSubscription listenForFriendshipEvents(OAuth2Credential credential, String userId) { return listenOnTopic(PubSubType.LISTEN, credential, "friendship." + userId); } @Unofficial default PubSubSubscription listenForOnsiteNotificationEvents(OAuth2Credential credential, String userId) { return listenOnTopic(PubSubType.LISTEN, credential, "onsite-notifications." + userId); } @Unofficial default PubSubSubscription listenForPollEvents(OAuth2Credential credential, String channelId) { return listenOnTopic(PubSubType.LISTEN, credential, "polls." + channelId); } /** * @param credential user access token * @param userId user id associated with the token * @return PubSubSubscription * @deprecated Friends are being removed by Twitch on 2022-05-25 */ @Unofficial @Deprecated @ApiStatus.ScheduledForRemoval(inVersion = "2.0.0") default PubSubSubscription listenForPresenceEvents(OAuth2Credential credential, String userId) { return listenOnTopic(PubSubType.LISTEN, credential, "presence." + userId); } /** * Unofficial: Listen for soundtrack events * * @param credential User Access Token * @param channelId Target Channel Id * @return PubSubSubscription * @deprecated Twitch is decommissioning Soundtrack on 2023-07-17 */ @Unofficial @Deprecated @ApiStatus.ScheduledForRemoval(inVersion = "2.0.0") default PubSubSubscription listenForRadioEvents(OAuth2Credential credential, String channelId) { return listenOnTopic(PubSubType.LISTEN, credential, "radio-events-v1." + channelId); } @Unofficial default PubSubSubscription listenForShieldModeEvents(OAuth2Credential credential, String userId, String channelId) { return listenOnTopic(PubSubType.LISTEN, credential, "shield-mode." + userId + '.' + channelId); } @Unofficial default PubSubSubscription listenForShoutoutEvents(OAuth2Credential credential, String channelId) { return listenOnTopic(PubSubType.LISTEN, credential, "shoutout." + channelId); } @Unofficial default PubSubSubscription listenForVideoPlaybackEvents(OAuth2Credential credential, String channelId) { return listenOnTopic(PubSubType.LISTEN, credential, "video-playback-by-id." + channelId); } @Unofficial default PubSubSubscription listenForVideoPlaybackByNameEvents(OAuth2Credential credential, String channelName) { return listenOnTopic(PubSubType.LISTEN, credential, "video-playback." + channelName.toLowerCase()); } @Unofficial @Deprecated @ApiStatus.ScheduledForRemoval(inVersion = "2.0.0") default PubSubSubscription listenForWatchPartyEvents(OAuth2Credential credential, String channelId) { return listenOnTopic(PubSubType.LISTEN, credential, "pv-watch-party-events." + channelId); } /** * @return the most recently measured round-trip latency for the socket(s) in milliseconds, or -1 if unknown */ long getLatency(); }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy