3#include "mc/_HeaderOutputPredefine.h"
6#include "mc/deps/application/AppPlatformListener.h"
7#include "mc/deps/core/http/PersistentWebSocket.h"
8#include "mc/deps/core/threading/Async.h"
9#include "mc/deps/core/utility/EnableNonOwnerReferences.h"
10#include "mc/deps/core/utility/NonOwnerPointer.h"
11#include "mc/deps/nether_net/ESessionError.h"
12#include "mc/deps/nether_net/ISignalingInterface.h"
13#include "mc/network/services/signaling/ISignalingJsonRpcInterop.h"
14#include "mc/platform/ErrorInfo.h"
15#include "mc/platform/Result.h"
29namespace Bedrock::Http {
struct Url; }
31namespace Json {
class Value; }
35namespace PlayerMessaging {
struct NetworkID; }
39 public ::std::enable_shared_from_this<::SignalingService> {
52 enum class ConnectionStatus : uchar {
57 enum class SignInError :
int {
59 EmptyAuthFromDiscovery = 100,
60 EmptyUrlFromDiscovery = 101,
61 ExpiredAuthFromDiscovery = 102,
67 enum class ServiceError :
int {
69 PlayerUnreachable = 1,
70 MessageDeliveryFailed = 2,
72 FallbackToBestEffortDelivery = 4,
94 Connection& operator=(Connection
const&);
95 Connection(Connection
const&);
101 virtual ~Connection() ;
103 virtual void onConnect() ;
105 virtual void onMessage(::std::string_view incomingMessage) ;
107 virtual bool shouldReconnect()
const ;
109 virtual ::Bedrock::Threading::Async<::Bedrock::Http::Url> getUrl() ;
111 virtual ::Bedrock::Threading::Async<::Bedrock::Http::HeaderCollection> getHeaders() ;
113 virtual ::Bedrock::Http::RetryPolicy getReconnectPolicy() ;
115 virtual void onDisconnect(
bool, uint closeStatus) ;
117 virtual void _requestTurnConfig()
const;
119 virtual void _sendPing()
const;
121 virtual void onAppSuspended() ;
123 virtual void onAppResumed() ;
130 ::std::variant<::NetherNet::NetworkID, ::PlayerMessaging::NetworkID>
id,
131 ::Bedrock::NotNullNonOwnerPtr<::ISignalingServiceConfigProvider> serviceConfigProvider,
132 ::Bedrock::NotNullNonOwnerPtr<::IMinecraftEventing> eventing,
134 ::std::chrono::seconds
const& pingInterval
137 MCNAPI
void _parseError(::std::string
const& message, ::std::string messageId);
139 MCNAPI ::Bedrock::Result<::std::vector<::NetherNet::StunRelayServer>, ::NetherNet::ESessionError>
143 ::NetherNet::ESessionError result,
144 ::std::vector<::NetherNet::StunRelayServer>
const& config
147 MCNAPI ::Bedrock::Threading::Async<::std::error_code>
connect();
157 MCNAPI ::Bedrock::Threading::Async<::NetherNet::ESessionError>
167 ::std::variant<::NetherNet::NetworkID, ::PlayerMessaging::NetworkID>
id,
168 ::Bedrock::NotNullNonOwnerPtr<::ISignalingServiceConfigProvider> serviceConfigProvider,
169 ::Bedrock::NotNullNonOwnerPtr<::IMinecraftEventing> eventing,
171 ::std::chrono::seconds
const& pingInterval
190 MCNAPI ::Bedrock::Threading::Async<::Bedrock::Http::Url>
$getUrl();
192 MCNAPI ::Bedrock::Threading::Async<::Bedrock::Http::HeaderCollection>
$getHeaders();
230 Channel& operator=(Channel
const&);
231 Channel(Channel
const&);
237 virtual ~Channel() =
default;
239 virtual void SendSignal(
242 ::std::string
const& message,
243 ::std::function<
void(::NetherNet::ESessionError)>&& onComplete
246 virtual ::Bedrock::PubSub::Subscription
256 ::std::string
const& message,
257 ::std::function<
void(::NetherNet::ESessionError)>&& onComplete
286 JsonRpcConnection& operator=(JsonRpcConnection
const&);
287 JsonRpcConnection(JsonRpcConnection
const&);
293 virtual ::Bedrock::Threading::Async<::Bedrock::Http::Url> getUrl() ;
295 virtual void onMessage(::std::string_view incomingMessage) ;
297 virtual void onConnect() ;
299 virtual ~JsonRpcConnection() =
default;
301 virtual void _sendPing()
const ;
303 virtual void _requestTurnConfig()
const ;
309 MCNAPI ::Bedrock::Threading::Async<::Bedrock::Result<void, ::NetherNet::ESessionError>>
312 MCNAPI ::Bedrock::Threading::Async<::Bedrock::Result<void, ::NetherNet::ESessionError>>
sendJsonRpcTo(
314 ::std::optional<::std::string>
const& messageId,
315 ::std::string
const& message
322 MCNAPI ::Bedrock::Threading::Async<::Bedrock::Http::Url>
$getUrl();
353 JsonRpcInterop& operator=(JsonRpcInterop
const&);
354 JsonRpcInterop(JsonRpcInterop
const&);
360 virtual ~JsonRpcInterop() =
default;
362 virtual ::Bedrock::Threading::Async<::Bedrock::Result<void, ::NetherNet::ESessionError>> sendJsonRpcTo(
364 ::std::optional<::std::string>
const& messageId,
365 ::std::string
const& message
368 virtual ::Bedrock::Threading::Async<::Bedrock::Result<void, ::NetherNet::ESessionError>>
369 sendJsonRpc(::std::string
const& message)
const ;
371 virtual ::std::shared_ptr<::MessageTracker> getMessageTracker() ;
378 virtual void setTurnConfig(
379 ::std::vector<::NetherNet::StunRelayServer>&& config,
380 ::std::chrono::steady_clock::time_point expiration
389 MCNAPI ::Bedrock::Threading::Async<::Bedrock::Result<void, ::NetherNet::ESessionError>>
$sendJsonRpcTo(
391 ::std::optional<::std::string>
const& messageId,
392 ::std::string
const& message
395 MCNAPI ::Bedrock::Threading::Async<::Bedrock::Result<void, ::NetherNet::ESessionError>>
405 ::std::vector<::NetherNet::StunRelayServer>&& config,
406 ::std::chrono::steady_clock::time_point expiration
442 SignalingService& operator=(SignalingService
const&);
443 SignalingService(SignalingService
const&);
449 virtual ~SignalingService() ;
456 ::Bedrock::NotNullNonOwnerPtr<::IMinecraftEventing> eventing,
457 ::std::vector<::std::shared_ptr<::IJsonRpcComponent>> additionalJsonRpcComponents
461 ::Bedrock::NotNullNonOwnerPtr<::IMinecraftEventing> eventing,
464 ::std::vector<::std::shared_ptr<::IJsonRpcComponent>> additionalJsonRpcComponents
467 MCNAPI ::std::shared_ptr<::SignalingService::Connection>
468 _makeConnection(::std::variant<::NetherNet::NetworkID, ::PlayerMessaging::NetworkID>
id);
470 MCNAPI ::Bedrock::Threading::Async<::std::vector<::NetherNet::StunRelayServer>>
getRelayConfig()
const;
475 MCNAPI ::std::shared_ptr<::ISignalingServiceTelemetry const> getTelemetry()
const;
478 MCNAPI ::Bedrock::Threading::Async<::std::error_code>
479 signIn(::std::variant<::NetherNet::NetworkID, ::PlayerMessaging::NetworkID> localId);
486 ::Bedrock::NotNullNonOwnerPtr<::IMinecraftEventing> eventing,
487 ::std::vector<::std::shared_ptr<::IJsonRpcComponent>> additionalJsonRpcComponents
491 ::Bedrock::NotNullNonOwnerPtr<::IMinecraftEventing> eventing,
494 ::std::vector<::std::shared_ptr<::IJsonRpcComponent>> additionalJsonRpcComponents
Definition EnableNonOwnerReferences.h:7
Definition PersistentWebSocket.h:20
Definition RetryPolicy.h:12
Definition Subscription.h:10
Definition IJsonRpcComponent.h:10
Definition IMinecraftEventing.h:134
Definition ISignalingJsonRpcInterop.h:20
Definition ISignalingServiceConfigProvider.h:14
Definition ISignalingServiceTelemetry.h:14
Definition MessageTracker.h:19
Definition ISignalingInterface.h:17
Definition Scheduler.h:14
Definition SignalingConsumerRefCount.h:5
Definition SignalingService.h:218
MCAPI void $SendSignal(::NetherNet::NetworkID from, ::NetherNet::NetworkID to, ::std::string const &message, ::std::function< void(::NetherNet::ESessionError)> &&onComplete)
MCAPI::Bedrock::PubSub::Subscription $RegisterEventHandler(::NetherNet::ISignalingEventHandler *handler)
static MCAPI void ** $vftable()
Definition SignalingService.h:64
MCAPI void _parseError(::std::string const &message, ::std::string messageId)
MCAPI ::Bedrock::Threading::Async<::Bedrock::Http::Url > $getUrl()
MCAPI ::Bedrock::Result<::std::vector<::NetherNet::StunRelayServer >, ::NetherNet::ESessionError > _parseTurnConfig(::Json::Value const &config)
MCAPI void parseTurnConfig(::std::string const &bodyText)
static MCAPI void ** $vftableForAppPlatformListener()
MCAPI Connection(::std::variant<::NetherNet::NetworkID, ::PlayerMessaging::NetworkID > id, ::Bedrock::NotNullNonOwnerPtr<::ISignalingServiceConfigProvider > serviceConfigProvider, ::Bedrock::NotNullNonOwnerPtr<::IMinecraftEventing > eventing, bool useJsonRpc, ::std::chrono::seconds const &pingInterval)
MCAPI void _sendTurnConfigTelemetry(::NetherNet::ESessionError result, ::std::vector<::NetherNet::StunRelayServer > const &config)
static MCAPI void ** $vftableForPersistentWebSocket()
MCAPI void onTurnConfigFailure(::Bedrock::ErrorInfo<::NetherNet::ESessionError > const &error)
MCAPI void $onAppSuspended()
MCAPI void $onDisconnect(bool, uint closeStatus)
MCAPI::Bedrock::Http::RetryPolicy $getReconnectPolicy()
MCAPI void $onAppResumed()
MCAPI bool $shouldReconnect() const
MCAPI void parseTurnConfig(::Json::Value const &config)
MCAPI void $_sendPing() const
MCAPI void * $ctor(::std::variant<::NetherNet::NetworkID, ::PlayerMessaging::NetworkID > id, ::Bedrock::NotNullNonOwnerPtr<::ISignalingServiceConfigProvider > serviceConfigProvider, ::Bedrock::NotNullNonOwnerPtr<::IMinecraftEventing > eventing, bool useJsonRpc, ::std::chrono::seconds const &pingInterval)
MCAPI ::Bedrock::Threading::Async<::std::error_code > connect()
MCAPI void $_requestTurnConfig() const
MCAPI ::Bedrock::Threading::Async<::NetherNet::ESessionError > sendTo(::NetherNet::NetworkID to, ::std::string const &message)
MCAPI void $onMessage(::std::string_view incomingMessage)
MCAPI void parseSignal(::NetherNet::NetworkID fromNetworkID, ::std::string message, ::std::string messageId)
MCAPI ::Bedrock::Threading::Async<::Bedrock::Http::HeaderCollection > $getHeaders()
Definition SignalingService.h:272
Definition SignalingService.h:276
MCAPI ::Bedrock::Threading::Async<::Bedrock::Result< void, ::NetherNet::ESessionError > > sendJsonRpc(::std::string const &message)
MCAPI ::Bedrock::Threading::Async<::Bedrock::Result< void, ::NetherNet::ESessionError > > sendJsonRpcTo(::PlayerMessaging::NetworkID networkIdTo, ::std::optional<::std::string > const &messageId, ::std::string const &message)
MCAPI void $onMessage(::std::string_view incomingMessage)
MCAPI void $_sendPing() const
MCAPI void $_requestTurnConfig() const
static MCAPI void ** $vftableForPersistentWebSocket()
MCAPI ::Bedrock::Threading::Async<::Bedrock::Http::Url > $getUrl()
static MCAPI void ** $vftableForAppPlatformListener()
Definition SignalingService.h:344
MCAPI ::std::shared_ptr<::MessageTracker > $getMessageTracker()
MCAPI ::Bedrock::Threading::Async<::Bedrock::Result< void, ::NetherNet::ESessionError > > $sendJsonRpc(::std::string const &message) const
MCAPI ::Bedrock::Threading::Async<::Bedrock::Result< void, ::NetherNet::ESessionError > > $sendJsonRpcTo(::PlayerMessaging::NetworkID networkIdTo, ::std::optional<::std::string > const &messageId, ::std::string const &message) const
MCAPI void $parseSignal(::NetherNet::NetworkID fromNetworkID, ::std::string message, ::std::string messageId)
MCAPI void $setTurnConfig(::std::vector<::NetherNet::StunRelayServer > &&config, ::std::chrono::steady_clock::time_point expiration)
static MCAPI void ** $vftable()
MCAPI void $onTurnConfigFailure(::Bedrock::ErrorInfo<::NetherNet::ESessionError > const &error)
MCAPI void $parseTurnConfig(::Json::Value const &config)
Definition SignalingService.h:274
MCAPI ::Bedrock::Threading::Async<::std::error_code > signIn(::std::variant<::NetherNet::NetworkID, ::PlayerMessaging::NetworkID > localId)
MCAPI SignalingService(::Bedrock::NotNullNonOwnerPtr<::IMinecraftEventing > eventing, ::std::vector<::std::shared_ptr<::IJsonRpcComponent > > additionalJsonRpcComponents)
MCAPI void * $ctor(::Bedrock::NotNullNonOwnerPtr<::IMinecraftEventing > eventing, ::std::vector<::std::shared_ptr<::IJsonRpcComponent > > additionalJsonRpcComponents)
MCAPI ::std::shared_ptr<::SignalingConsumerRefCount > getSignalingConsumerRefCount()
MCAPI ::std::shared_ptr<::SignalingService::Connection > _makeConnection(::std::variant<::NetherNet::NetworkID, ::PlayerMessaging::NetworkID > id)
MCAPI void * $ctor(::Bedrock::NotNullNonOwnerPtr<::IMinecraftEventing > eventing, ::WorkerPool &pool, ::Scheduler &scheduler, ::std::vector<::std::shared_ptr<::IJsonRpcComponent > > additionalJsonRpcComponents)
MCAPI SignalingService(::Bedrock::NotNullNonOwnerPtr<::IMinecraftEventing > eventing, ::WorkerPool &pool, ::Scheduler &scheduler, ::std::vector<::std::shared_ptr<::IJsonRpcComponent > > additionalJsonRpcComponents)
MCAPI ::Bedrock::Threading::Async<::std::vector<::NetherNet::StunRelayServer > > getRelayConfig() const
static MCAPI void ** $vftable()
Definition WorkerPool.h:19
Definition ISignalingEventHandler.h:12
Definition NetworkID.h:17
Definition StunRelayServer.h:7
Definition NetworkID.h:12