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