XGameStreamingGetSessionId
此 API 返回以 null 结尾的不透明字符串,该字符串唯一标识指定客户端的流式处理会话。
语法
HRESULT XGameStreamingGetSessionId(
XGameStreamingClientId client,
size_t sessionIdSize,
char* sessionId,
size_t* sessionIdUsed
)
参数
client _In_
类型:XGameStreamingClientId
正在被查询的流式处理客户端。
sessionIdSize _In_
类型:size_t
sessionId
缓冲区的大小。
sessionId _Out_writes_bytes_to_(sessionIdSize, *sessionIdUsed)
类型:char*
将用指定客户端 IP 地址填充的缓冲区。
sessionIdUsed _Out_opt_
类型:size_t*
sessionId
缓冲区(包括 null 终止符)中返回的值的大小(以字节为单位)。
返回值
类型:HRESULT
如果成功,则返回 S_OK;否则返回错误代码。
可能的错误
错误代码 | 错误值 | 错误原因 |
---|---|---|
E_GAMESTREAMING_NOT_INITIALIZED | 0x89245400 | XGameStreaming 运行时尚未初始化。 在调用其他 API 之前,请先调用 XGameStreamingInitialize。 |
E_GAMESTREAMING_CLIENT_NOT_CONNECTED | 0x89245401 | 指定客户端未连接。 |
E_GAMESTREAMING_NO_DATA | 0x89245402 | 请求的数据目前不可用, 数据可能稍后可用。 |
E_NOT_SUFFICIENT_BUFFER | 0x7A | sessionId 大小不足以容纳会话 ID 和 null 终止字符。 |
有关错误代码的列表,请参阅错误代码。
备注
写入 sessionId
的字符串永远不会大于 SessionIdMaxBytes
,因此可以预先分配。
sessionId
的布局/内容可能会在以后更改,因此只能解释为不透明的字符串。 与其他客户端属性 API 一样,建议使用 XGameStreamingRegisterClientPropertiesChanged
注册对 sessionId
的更改的回调。
示例
// Register for client properties changed notifications
void GameStreamingClientManager::OnClientConnected(XGameStreamingClientId client)
{
XGameStreamingClientPropertiesChangedRegistrationToken token = {0};
XGameStreamingRegisterClientPropertiesChanged(
client, m_taskQueue, this, &OnClientPropertiesChanged, &token);
}
void GameStreamingClientManager::OnClientPropertiesChanged(
void* context,
XGameStreamingClientId client,
uint32_t updatedPropertiesCount,
XGameStreamingClientProperty* updatedProperties)
{
for (uint32_t i = 0; i < updatedPropertiesCount; ++i)
{
switch (updatedProperties[i])
{
case XGameStreamingClientProperty::SessionId:
{
// allocate memory for sessionId
char sessionId[SessionIdMaxBytes];
// get session id of the client
size_t bytesUsed = 0;
HRESULT hr = XGameStreamingGetSessionId(client, _countof(sessionId), sessionId, &bytesUsed);
if (SUCCEEDED(hr)) {
// Game logic to use session id
}
else if (hr == E_GAMESTREAMING_NO_DATA) {
// Game logic to handle no data for client
}
else
{
// Default error case
LogFormat(L"XGameStreamingGetSessionId failed %x", hr);
}
break;
}
default:
// A characteristic we are not tracking - do nothing
break;
}
}
}
要求
头文件:xgamestreaming.h
库:xgameruntime.lib
支持平台:Windows、Xbox One 系列主机和 Xbox Series 主机