PartyManager::ConnectToNetwork

将异步连接到网络的尝试排入队列。

语法

PartyError ConnectToNetwork(  
    const PartyNetworkDescriptor* networkDescriptor,  
    void* asyncIdentifier,  
    PartyNetwork** network  
)  

参数

networkDescriptor PartyNetworkDescriptor*

与要建立连接的网络关联的描述符。

asyncIdentifier void*
可选

一个可选应用定义的指针大小的上下文值,可用于将完成状态更改与此调用关联起来。

network PartyNetwork**
可选、库分配的输出

可选的输出网络对象。

返回值

PartyError

如果连接到新网络的异步操作已开始,则为 c_partyErrorSuccess,否则为错误代码。 如果此方法失败,则不会生成任何相关的状态更改。 可通过 GetErrorMessage() 检索错误代码的可读形式。

备注

此方法通过协商并建立从本地设备到透明云中继服务器的安全 DTLS 连接,对连接到与 networkDescriptor 关联的网络的异步尝试进行排队。 异步操作完成后将提供 PartyConnectToNetworkCompletedStateChange,指示成功或失败。 成功后,本地设备将建立与透明云中继服务器的连接。 失败时,将生成 PartyNetworkDestroyedStateChange。 在至少一个本地用户通过 PartyNetwork::AuthenticateLocalUser () 成功进行身份验证之前,不会显示其他任何设备,并且本地设备不会对任何远程设备可见。

设备成功连接到网络后,必须通过 PartyNetwork::AuthenticateLocalUser() 向网络进行身份验证。 如果设备已连接到网络,但未经身份验证超过一分钟,则设备将断开连接,并生成 PartyNetworkDestroyedStateChange。 无论设备是从未进行身份验证还是在调用PartyNetwork::RemoveLocalUser()后丢失身份验证,都将发生这种情况。

此方法可选择提供 network 作为可立即用于执行异步网络操作的输出,例如 PartyNetwork::CreateInvitation()PartyNetwork::CreateEndpoint()。 这些异步操作将在内部排队,直到连接完成,此时它们将被处理。 此 network 还将在生成的 PartyConnectToNetworkCompletedStateChange 上提供,它将与提供的 asyncIdentifier完全连接和关联。

如果通过 CreateNewNetwork() 创建网络配置时指定的连接设备限制已达到,此操作将异步失败,PartyConnectToNetworkCompletedStateChange::result 将被设置为 PartyStateChangeResult::NetworkLimitReached

返回成功后,此方法会使GetLocalUsers()之前返回的任何数组的内存失效,因为它会同步将新网络添加到数组。 StartProcessingStateChanges() 也会使数组内存无效。 返回的network对象在 PartyDestroyLocalUserCompletedStateChange 生成并且引用该对象的所有状态更改都返回到FinishProcessingStateChanges()之前是有效的。

失败时重试

当 CreateNewNetwork() 异步失败时,StartProcessingStateChanges() 将提供 PartyConnectToNetworkCompletedStateChange 以指示结果。 可能会在延迟后重试该操作,具体取决于提供的 PartyStateChangeResult

结果 重试行为
InternetConnectivityError 以不小于 10 秒的小延迟重试。 对于应用,可能更适合立即向用户显示错误,而不是自动重试。
NetworkLimitReached 不要自动重试。 而是向用户显示一条消息,并等待用户发起另一次尝试。
NetworkNoLongerExists 不要重试。
VersionMismatch 不要重试。
FailedToBindToLocalUdpSocket 此结果表示库无法绑定到在 PartyOption::LocalUdpSocketBindAddress 选项中指定的本地 UDP 套接字。 游戏必须清理其库的实例,将 PartyOption::LocalUdpSocketBindAddress 选项更新为有效的可用绑定地址,并重新初始化库。

要求

标题: Party.h

另请参阅

PartyManager
PartyConnectToNetworkCompletedStateChange
PartyNetworkDestroyedStateChange
PartyNetworkConfiguration
PartyManager::CreateNewNetwork
PartyManager::GetNetworks
PartyNetwork::AuthenticateLocalUser
PartyNetwork::RemoveLocalUser
PartyNetwork::CreateInvitation
PartyNetwork::RevokeInvitation
PartyNetwork::CreateEndpoint
PartyNetwork::LeaveNetwork