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; }
37namespace PlayerMessaging {
struct NetworkID; }
41 public ::std::enable_shared_from_this<::SignalingService> {
54 enum class ConnectionStatus : uchar {
59 enum class SignInError :
int {
61 EmptyAuthFromDiscovery = 100,
62 EmptyUrlFromDiscovery = 101,
63 ExpiredAuthFromDiscovery = 102,
69 enum class ServiceError :
int {
71 PlayerUnreachable = 1,
72 MessageDeliveryFailed = 2,
74 FallbackToBestEffortDelivery = 4,
96 Connection& operator=(Connection
const&);
97 Connection(Connection
const&);
103 virtual ~Connection() ;
105 virtual void onConnect() ;
107 virtual void onMessage(::std::string_view incomingMessage) ;
109 virtual bool shouldReconnect()
const ;
111 virtual ::Bedrock::Threading::Async<::Bedrock::Http::Url> getUrl() ;
113 virtual ::Bedrock::Threading::Async<::Bedrock::Http::HeaderCollection> getHeaders() ;
115 virtual ::Bedrock::Http::RetryPolicy getReconnectPolicy() ;
117 virtual void onDisconnect(
bool closeStatus, uint) ;
119 virtual void _requestTurnConfig()
const;
121 virtual void _sendPing()
const;
123 virtual void onAppSuspended() ;
125 virtual void onAppResumed() ;
132 ::std::variant<::PlayerMessaging::NetworkID, ::NetherNet::NetworkID>
id,
133 ::Bedrock::NotNullNonOwnerPtr<::ISignalingServiceConfigProvider> serviceConfigProvider,
134 ::Bedrock::NotNullNonOwnerPtr<::IMinecraftEventing> eventing,
136 ::std::chrono::seconds
const& pingInterval
140 ::SignalingService::Connection::ServiceError errorCode,
141 ::std::string
const& errorMessage,
142 ::std::string
const& messageId
147 MCNAPI
void _parseError(::std::string
const& message, ::std::string messageId);
149 MCNAPI ::Bedrock::Result<::std::vector<::NetherNet::StunRelayServer>, ::NetherNet::ESessionError>
152 MCNAPI ::Bedrock::Result<::std::vector<::NetherNet::StunRelayServer>, ::NetherNet::ESessionError>
156 ::NetherNet::ESessionError result,
157 ::std::vector<::NetherNet::StunRelayServer>
const& config
160 MCNAPI ::Bedrock::Threading::Async<::std::error_code>
connect();
163 MCNAPI ::std::variant<::PlayerMessaging::NetworkID, ::NetherNet::NetworkID> getId()
const;
165 MCNAPI ::Bedrock::Threading::Async<::std::vector<::NetherNet::StunRelayServer>> getRelayConfig()
const;
167 MCNAPI ::gsl::not_null<::std::shared_ptr<::ISignalingServiceTelemetry const>> getTelemetry()
const;
178 MCNAPI ::Bedrock::Threading::Async<::NetherNet::ESessionError>
188 ::std::variant<::PlayerMessaging::NetworkID, ::NetherNet::NetworkID>
id,
189 ::Bedrock::NotNullNonOwnerPtr<::ISignalingServiceConfigProvider> serviceConfigProvider,
190 ::Bedrock::NotNullNonOwnerPtr<::IMinecraftEventing> eventing,
192 ::std::chrono::seconds
const& pingInterval
211 MCNAPI ::Bedrock::Threading::Async<::Bedrock::Http::Url>
$getUrl();
213 MCNAPI ::Bedrock::Threading::Async<::Bedrock::Http::HeaderCollection>
$getHeaders();
255 Channel& operator=(Channel
const&);
256 Channel(Channel
const&);
262 virtual ~Channel() =
default;
264 virtual void SendSignal(
267 ::std::string
const& message,
268 ::std::function<
void(::NetherNet::ESessionError)>&& onComplete
271 virtual ::Bedrock::PubSub::Subscription
279 ::std::weak_ptr<::SignalingService::Connection>&& connection,
280 ::std::weak_ptr<::JsonRpc::WebRtcComponent>&& jsonRpcWebRtcComponent,
287 ::std::string
const& message,
288 ::std::function<
void(::NetherNet::ESessionError)>&& onComplete
296 ::std::weak_ptr<::SignalingService::Connection>&& connection,
297 ::std::weak_ptr<::JsonRpc::WebRtcComponent>&& jsonRpcWebRtcComponent,
308 ::std::string
const& message,
309 ::std::function<
void(::NetherNet::ESessionError)>&& onComplete
334 JsonRpcConnection& operator=(JsonRpcConnection
const&);
335 JsonRpcConnection(JsonRpcConnection
const&);
341 virtual ::Bedrock::Threading::Async<::Bedrock::Http::Url> getUrl() ;
343 virtual void onMessage(::std::string_view incomingMessage) ;
345 virtual void onConnect() ;
347 virtual ~JsonRpcConnection() =
default;
349 virtual void _sendPing()
const ;
351 virtual void _requestTurnConfig()
const ;
358 ::std::variant<::PlayerMessaging::NetworkID, ::NetherNet::NetworkID>
id,
359 ::Bedrock::NotNullNonOwnerPtr<::ISignalingServiceConfigProvider> serviceConfigProvider,
360 ::Bedrock::NotNullNonOwnerPtr<::IMinecraftEventing> eventing,
361 ::std::weak_ptr<::JsonRpc::JsonRpcProvider> jsonRpcProvider,
362 ::std::weak_ptr<::JsonRpc::WebRtcComponent> webRtcComponent,
363 ::std::chrono::seconds
const& pingInterval
366 MCNAPI ::Bedrock::Threading::Async<::Bedrock::Result<void, ::NetherNet::ESessionError>>
367 sendJsonRpc(::std::optional<::std::string>
const& messageId, ::std::string
const& message);
369 MCNAPI ::Bedrock::Threading::Async<::Bedrock::Result<void, ::NetherNet::ESessionError>>
sendJsonRpcTo(
371 ::std::optional<::std::string>
const& messageId,
372 ::std::string
const& message
376 MCNAPI
void setTurnConfig(
377 ::std::vector<::NetherNet::StunRelayServer>&& config,
378 ::std::chrono::steady_clock::time_point expiration
387 ::std::variant<::PlayerMessaging::NetworkID, ::NetherNet::NetworkID>
id,
388 ::Bedrock::NotNullNonOwnerPtr<::ISignalingServiceConfigProvider> serviceConfigProvider,
389 ::Bedrock::NotNullNonOwnerPtr<::IMinecraftEventing> eventing,
390 ::std::weak_ptr<::JsonRpc::JsonRpcProvider> jsonRpcProvider,
391 ::std::weak_ptr<::JsonRpc::WebRtcComponent> webRtcComponent,
392 ::std::chrono::seconds
const& pingInterval
399 MCNAPI ::Bedrock::Threading::Async<::Bedrock::Http::Url>
$getUrl();
430 JsonRpcInterop& operator=(JsonRpcInterop
const&);
431 JsonRpcInterop(JsonRpcInterop
const&);
437 virtual ~JsonRpcInterop() =
default;
439 virtual ::Bedrock::Threading::Async<::Bedrock::Result<void, ::NetherNet::ESessionError>> sendJsonRpcTo(
441 ::std::optional<::std::string>
const& messageId,
442 ::std::string
const& message
445 virtual ::Bedrock::Threading::Async<::Bedrock::Result<void, ::NetherNet::ESessionError>>
446 sendJsonRpc(::std::optional<::std::string>
const& messageId, ::std::string
const& message)
const ;
448 virtual ::std::shared_ptr<::MessageTracker> getMessageTracker() ;
455 virtual void setTurnConfig(
456 ::std::vector<::NetherNet::StunRelayServer>&& config,
457 ::std::chrono::steady_clock::time_point expiration
466 MCNAPI ::Bedrock::Threading::Async<::Bedrock::Result<void, ::NetherNet::ESessionError>>
$sendJsonRpcTo(
468 ::std::optional<::std::string>
const& messageId,
469 ::std::string
const& message
472 MCNAPI ::Bedrock::Threading::Async<::Bedrock::Result<void, ::NetherNet::ESessionError>>
473 $sendJsonRpc(::std::optional<::std::string>
const& messageId, ::std::string
const& message)
const;
482 ::std::vector<::NetherNet::StunRelayServer>&& config,
483 ::std::chrono::steady_clock::time_point expiration
519 SignalingService& operator=(SignalingService
const&);
520 SignalingService(SignalingService
const&);
526 virtual ~SignalingService() ;
533 ::Bedrock::NotNullNonOwnerPtr<::IMinecraftEventing> eventing,
534 ::std::vector<::std::shared_ptr<::IJsonRpcComponent>> additionalJsonRpcComponents
538 ::Bedrock::NotNullNonOwnerPtr<::IMinecraftEventing> eventing,
541 ::std::vector<::std::shared_ptr<::IJsonRpcComponent>> additionalJsonRpcComponents
544 MCNAPI ::std::shared_ptr<::SignalingService::Connection>
545 _makeConnection(::std::variant<::PlayerMessaging::NetworkID, ::NetherNet::NetworkID>
id);
551 MCNAPI ::gsl::not_null<::std::shared_ptr<::NetherNet::ISignalingInterface>>
getChannel();
554 MCNAPI ::Bedrock::Threading::Async<::std::vector<::NetherNet::StunRelayServer>> getRelayConfig()
const;
560 MCNAPI ::std::shared_ptr<::ISignalingServiceTelemetry const> getTelemetry()
const;
563 MCNAPI
void initialize(::std::unique_ptr<::ISignalingServiceConfigProvider> serviceConfigProvider);
568 ::std::function<
void(
569 ::std::variant<::PlayerMessaging::NetworkID, ::NetherNet::NetworkID>,
570 ::SignalingService::ConnectionStatus
574 MCNAPI ::Bedrock::Threading::Async<::std::error_code>
575 signIn(::std::variant<::PlayerMessaging::NetworkID, ::NetherNet::NetworkID> localId);
584 ::Bedrock::NotNullNonOwnerPtr<::IMinecraftEventing> eventing,
585 ::std::vector<::std::shared_ptr<::IJsonRpcComponent>> additionalJsonRpcComponents
589 ::Bedrock::NotNullNonOwnerPtr<::IMinecraftEventing> eventing,
592 ::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:138
Definition ISignalingJsonRpcInterop.h:20
Definition ISignalingServiceConfigProvider.h:14
Definition ISignalingServiceTelemetry.h:14
Definition JsonRpcProvider.h:20
Definition WebRtcComponent.h:23
Definition MessageTracker.h:19
Definition ISignalingInterface.h:17
Definition Scheduler.h:15
Definition SignalingConsumerRefCount.h:13
Definition SignalingService.h:243
MCAPI Channel(::std::weak_ptr<::SignalingService::Connection > &&connection, ::std::weak_ptr<::JsonRpc::WebRtcComponent > &&jsonRpcWebRtcComponent, bool useJsonRpc)
MCAPI void $SendSignal(::NetherNet::NetworkID from, ::NetherNet::NetworkID to, ::std::string const &message, ::std::function< void(::NetherNet::ESessionError)> &&onComplete)
MCAPI void _SendJsonRpcSignal(::NetherNet::NetworkID from, ::NetherNet::NetworkID to, ::std::string const &message, ::std::function< void(::NetherNet::ESessionError)> &&onComplete)
MCAPI void * $ctor(::std::weak_ptr<::SignalingService::Connection > &&connection, ::std::weak_ptr<::JsonRpc::WebRtcComponent > &&jsonRpcWebRtcComponent, bool useJsonRpc)
MCAPI::Bedrock::PubSub::Subscription $RegisterEventHandler(::NetherNet::ISignalingEventHandler *handler)
static MCAPI void ** $vftable()
Definition SignalingService.h:66
MCAPI ::Bedrock::Result<::std::vector<::NetherNet::StunRelayServer >, ::NetherNet::ESessionError > _parseTurnConfig(::std::string const &bodyText)
MCAPI void _parseError(::std::string const &message, ::std::string messageId)
MCAPI ::Bedrock::Threading::Async<::Bedrock::Http::Url > $getUrl()
MCAPI Connection(::std::variant<::PlayerMessaging::NetworkID, ::NetherNet::NetworkID > id, ::Bedrock::NotNullNonOwnerPtr<::ISignalingServiceConfigProvider > serviceConfigProvider, ::Bedrock::NotNullNonOwnerPtr<::IMinecraftEventing > eventing, bool useJsonRpc, ::std::chrono::seconds const &pingInterval)
MCAPI ::Bedrock::Result<::std::vector<::NetherNet::StunRelayServer >, ::NetherNet::ESessionError > _parseTurnConfig(::Json::Value const &config)
MCAPI void * $ctor(::std::variant<::PlayerMessaging::NetworkID, ::NetherNet::NetworkID > id, ::Bedrock::NotNullNonOwnerPtr<::ISignalingServiceConfigProvider > serviceConfigProvider, ::Bedrock::NotNullNonOwnerPtr<::IMinecraftEventing > eventing, bool useJsonRpc, ::std::chrono::seconds const &pingInterval)
MCAPI void parseTurnConfig(::std::string const &bodyText)
static MCAPI void ** $vftableForAppPlatformListener()
MCAPI void _onTurnConfigSuccess(::std::vector<::NetherNet::StunRelayServer > &&config)
MCAPI void _sendTurnConfigTelemetry(::NetherNet::ESessionError result, ::std::vector<::NetherNet::StunRelayServer > const &config)
static MCAPI void ** $vftableForPersistentWebSocket()
MCAPI void $onAppSuspended()
MCAPI::Bedrock::Http::RetryPolicy $getReconnectPolicy()
MCAPI void $onAppResumed()
MCAPI bool $shouldReconnect() const
MCAPI void parseTurnConfig(::Json::Value const &config)
MCAPI void $_sendPing() const
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 _handleError(::SignalingService::Connection::ServiceError errorCode, ::std::string const &errorMessage, ::std::string const &messageId)
MCAPI void $onDisconnect(bool closeStatus, uint)
MCAPI void parseSignal(::NetherNet::NetworkID fromNetworkID, ::std::string message, ::std::string messageId)
MCAPI ::Bedrock::Threading::Async<::Bedrock::Http::HeaderCollection > $getHeaders()
Definition SignalingService.h:239
Definition SignalingService.h:324
MCAPI JsonRpcConnection(::std::variant<::PlayerMessaging::NetworkID, ::NetherNet::NetworkID > id, ::Bedrock::NotNullNonOwnerPtr<::ISignalingServiceConfigProvider > serviceConfigProvider, ::Bedrock::NotNullNonOwnerPtr<::IMinecraftEventing > eventing, ::std::weak_ptr<::JsonRpc::JsonRpcProvider > jsonRpcProvider, ::std::weak_ptr<::JsonRpc::WebRtcComponent > webRtcComponent, ::std::chrono::seconds const &pingInterval)
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
MCAPI ::Bedrock::Threading::Async<::Bedrock::Result< void, ::NetherNet::ESessionError > > sendJsonRpc(::std::optional<::std::string > const &messageId, ::std::string const &message)
static MCAPI void ** $vftableForPersistentWebSocket()
MCAPI void * $ctor(::std::variant<::PlayerMessaging::NetworkID, ::NetherNet::NetworkID > id, ::Bedrock::NotNullNonOwnerPtr<::ISignalingServiceConfigProvider > serviceConfigProvider, ::Bedrock::NotNullNonOwnerPtr<::IMinecraftEventing > eventing, ::std::weak_ptr<::JsonRpc::JsonRpcProvider > jsonRpcProvider, ::std::weak_ptr<::JsonRpc::WebRtcComponent > webRtcComponent, ::std::chrono::seconds const &pingInterval)
MCAPI ::Bedrock::Threading::Async<::Bedrock::Http::Url > $getUrl()
static MCAPI void ** $vftableForAppPlatformListener()
Definition SignalingService.h:421
MCAPI ::Bedrock::Threading::Async<::Bedrock::Result< void, ::NetherNet::ESessionError > > $sendJsonRpc(::std::optional<::std::string > const &messageId, ::std::string const &message) const
MCAPI ::std::shared_ptr<::MessageTracker > $getMessageTracker()
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:241
MCAPI ::Bedrock::Threading::Async<::std::error_code > signIn(::std::variant<::PlayerMessaging::NetworkID, ::NetherNet::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 bool isSignedIn() const
MCAPI ::std::shared_ptr<::SignalingConsumerRefCount > getSignalingConsumerRefCount()
MCAPI ::std::shared_ptr<::SignalingService::Connection > _makeConnection(::std::variant<::PlayerMessaging::NetworkID, ::NetherNet::NetworkID > id)
MCAPI::Bedrock::PubSub::Subscription registerOnConnectionChanged(::std::function< void(::std::variant<::PlayerMessaging::NetworkID, ::NetherNet::NetworkID >, ::SignalingService::ConnectionStatus)> &&callback)
MCAPI void initialize(::std::unique_ptr<::ISignalingServiceConfigProvider > serviceConfigProvider)
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 ::gsl::not_null<::std::shared_ptr<::NetherNet::ISignalingInterface > > getChannel()
static MCAPI void ** $vftable()
Definition WorkerPool.h:20
Definition ISignalingEventHandler.h:12
Definition NetworkID.h:17
Definition StunRelayServer.h:7
Definition NetworkID.h:13