2203 GDK (#584)
This commit is contained in:
Родитель
312e05d78b
Коммит
ac85ac1264
|
@ -33,7 +33,8 @@
|
|||
<TargetName>Microsoft.Xbox.Services.141.GDK.C.Thunks</TargetName>
|
||||
<RootNamespace>Microsoft.Xbox.Services</RootNamespace>
|
||||
<XsapiPlatform>GDK</XsapiPlatform>
|
||||
<XsapiBuildFromSource>1</XsapiBuildFromSource>
|
||||
<XsapiLibBuildFromSource>true</XsapiLibBuildFromSource>
|
||||
<LibHttpClientBuildFromSource>true</LibHttpClientBuildFromSource>
|
||||
</PropertyGroup>
|
||||
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), xsapi.gdk.bwoi.props))\xsapi.gdk.bwoi.props" />
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
|
|
|
@ -20,6 +20,7 @@ EXPORTS
|
|||
HCHttpCallRequestGetHeaderAtIndex
|
||||
HCHttpCallRequestGetNumHeaders
|
||||
HCHttpCallRequestGetRequestBodyBytes
|
||||
HCHttpCallRequestGetRequestBodyReadFunction
|
||||
HCHttpCallRequestGetRequestBodyString
|
||||
HCHttpCallRequestGetRetryAllowed
|
||||
HCHttpCallRequestGetRetryCacheId
|
||||
|
@ -29,6 +30,7 @@ EXPORTS
|
|||
HCHttpCallRequestGetUrl
|
||||
HCHttpCallRequestSetHeader
|
||||
HCHttpCallRequestSetRequestBodyBytes
|
||||
HCHttpCallRequestSetRequestBodyReadFunction
|
||||
HCHttpCallRequestSetRequestBodyString
|
||||
HCHttpCallRequestSetRetryAllowed
|
||||
HCHttpCallRequestSetRetryCacheId
|
||||
|
@ -45,6 +47,7 @@ EXPORTS
|
|||
HCHttpCallResponseGetPlatformNetworkErrorMessage
|
||||
HCHttpCallResponseGetResponseBodyBytes
|
||||
HCHttpCallResponseGetResponseBodyBytesSize
|
||||
HCHttpCallResponseGetResponseBodyWriteFunction
|
||||
HCHttpCallResponseGetResponseString
|
||||
HCHttpCallResponseGetStatusCode
|
||||
HCHttpCallResponseSetHeader
|
||||
|
@ -52,6 +55,7 @@ EXPORTS
|
|||
HCHttpCallResponseSetNetworkErrorCode
|
||||
HCHttpCallResponseSetPlatformNetworkErrorMessage
|
||||
HCHttpCallResponseSetResponseBodyBytes
|
||||
HCHttpCallResponseSetResponseBodyWriteFunction
|
||||
HCHttpCallResponseSetStatusCode
|
||||
HCHttpCallSetContext
|
||||
HCHttpCallSetTracing
|
||||
|
@ -497,6 +501,7 @@ EXPORTS
|
|||
XblRealTimeActivityRemoveResyncHandler
|
||||
XblRemoveServiceCallRoutedHandler
|
||||
XblSetOverrideConfiguration
|
||||
XblSetOverrideLocale
|
||||
XblSocialAddSocialRelationshipChangedHandler
|
||||
XblSocialGetSocialRelationshipsAsync
|
||||
XblSocialGetSocialRelationshipsResult
|
||||
|
|
|
@ -69,6 +69,41 @@
|
|||
<VCTargetsPath16>$(_AlternativeVCTargetsPath160)</VCTargetsPath16>
|
||||
</PropertyGroup>
|
||||
|
||||
<!--
|
||||
****************************************************************************************************
|
||||
VCTargetsPath redirection (VS 2022)
|
||||
For VS 2022, we have to copy the contents of
|
||||
C:\Program Files\Microsoft Visual Studio\2022\Enterprise\MSBuild\Microsoft\VC\v160
|
||||
to a temp location, then xcopy in the files from
|
||||
C:\Program Files (x86)\Microsoft GDK\211000\GXDK\VS2019\flatDeployment\MSBuild\Microsoft\VC\v160
|
||||
and
|
||||
C:\Program Files (x86)\Microsoft GDK\211000\GRDK\VS2019\flatDeployment\MSBuild\Microsoft\VC\v160
|
||||
and do the same for the v150 for v141 downlevel
|
||||
****************************************************************************************************
|
||||
-->
|
||||
<PropertyGroup Condition="'$(GDKUseBWOI)' == 'true'">
|
||||
<_AlternativeVCTargetsPath160>$(GDKMSBuildForVS2019)v160\</_AlternativeVCTargetsPath160>
|
||||
<_AlternativeVCTargetsPath150>$(GDKMSBuildForVS2019)v150\</_AlternativeVCTargetsPath150>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(GDKUseBWOI)' == 'true' and ('$(Platform)' == 'Gaming.Xbox.XboxOne.x64' and '$(VisualStudioVersion)' == '17.0')">
|
||||
<VCTargetsPath>$(_AlternativeVCTargetsPath160)</VCTargetsPath>
|
||||
<VCTargetsPath15 Condition="'$(_AlternativeVCTargetsPath150)'!=''">$(_AlternativeVCTargetsPath150)</VCTargetsPath15>
|
||||
<VCTargetsPath16>$(_AlternativeVCTargetsPath160)</VCTargetsPath16>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(GDKUseBWOI)' == 'true' and ('$(Platform)' == 'Gaming.Xbox.Scarlett.x64' and '$(VisualStudioVersion)' == '17.0')">
|
||||
<VCTargetsPath>$(_AlternativeVCTargetsPath160)</VCTargetsPath>
|
||||
<VCTargetsPath15 Condition="'$(_AlternativeVCTargetsPath150)'!=''">$(_AlternativeVCTargetsPath150)</VCTargetsPath15>
|
||||
<VCTargetsPath16>$(_AlternativeVCTargetsPath160)</VCTargetsPath16>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(GDKUseBWOI)' == 'true' and ('$(Platform)' == 'Gaming.Desktop.x64' and '$(VisualStudioVersion)' == '17.0')">
|
||||
<VCTargetsPath>$(_AlternativeVCTargetsPath160)</VCTargetsPath>
|
||||
<VCTargetsPath15 Condition="'$(_AlternativeVCTargetsPath150)'!=''">$(_AlternativeVCTargetsPath150)</VCTargetsPath15>
|
||||
<VCTargetsPath16>$(_AlternativeVCTargetsPath160)</VCTargetsPath16>
|
||||
</PropertyGroup>
|
||||
|
||||
<!--
|
||||
****************************************************************************************************
|
||||
Debugging
|
||||
|
|
|
@ -1 +1 @@
|
|||
Subproject commit ffbc58008ae4a8402f811893906ff782efda42ac
|
||||
Subproject commit 312552b182c99b05a81630fb19c71671830ebab6
|
|
@ -42,28 +42,39 @@ typedef enum XalPlatformOperationResult
|
|||
/// </summary>
|
||||
typedef enum XalShowUrlType
|
||||
{
|
||||
/// <summary>The client should show the URL in a shared system browser if
|
||||
/// <summary>
|
||||
/// The client should show the URL in a shared system browser if
|
||||
/// one is present, otherwise the client should use an embedded browser.
|
||||
/// </summary>
|
||||
XalShowUrlType_Normal = 0,
|
||||
/// <summary>The browser is being raised for the purposes of deleting
|
||||
/// cookies. If the client is able clear the user's cookies without showing
|
||||
/// UI the client should. Otherwise the URL should be loaded as normal.
|
||||
/// <summary>
|
||||
/// This case is deprecated and no longer used. Cookie removal is now
|
||||
/// signaled exclusively using
|
||||
/// XalShowUrlType_CookieRemovalSkipIfSharedCredentials.
|
||||
/// </summary>
|
||||
XalShowUrlType_CookieRemoval = 1,
|
||||
/// <summary>The browser is being raised for the purposes of deleting
|
||||
/// <remarks>
|
||||
/// Formerly, this value indicated that the browser was being raised for the
|
||||
/// purposes of deleting cookies from both shared and embedded browsers.
|
||||
/// </remarks>
|
||||
XalShowUrlType_CookieRemoval_DEPRECATED = 1,
|
||||
/// <summary>
|
||||
/// The browser is being raised for the purposes of deleting
|
||||
/// cookies. If the client is using a shared system browser, this call
|
||||
/// should be ignored and the client should immediately call
|
||||
/// XalPlatformWebShowUrlComplete passing in success, and forwarding the
|
||||
/// received final URL back into Xal. If an embedded browser is being used,
|
||||
/// the URL should be loaded as normal.</summary>
|
||||
/// the cookies should be cleared without showing UI if possible. If silent
|
||||
/// cookie-clearing is impossible, the URL should be loaded as normal.
|
||||
/// </summary>
|
||||
XalShowUrlType_CookieRemovalSkipIfSharedCredentials = 2,
|
||||
/// <summary>This is a web flow which does not rely on cookies. The client
|
||||
/// <summary>
|
||||
/// This is a web flow which does not rely on cookies. The client
|
||||
/// may use a shared system browser or an embedded browser depending on
|
||||
/// whichever browser would give the best user experience. If headers are
|
||||
/// required for the web request, this will be the show type asked for. If
|
||||
/// this is the case, an embedded browser might be required so those
|
||||
/// request headers can be set.</summary>
|
||||
/// request headers can be set.
|
||||
/// </summary>
|
||||
XalShowUrlType_NonAuthFlow = 3,
|
||||
} XalShowUrlType;
|
||||
|
||||
|
|
|
@ -400,25 +400,6 @@ typedef enum XalUserChangeType
|
|||
// That header is included at the top of this file
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// User detail change event handler.
|
||||
/// </summary>
|
||||
/// <param name="context">Optional pointer to data used by the event handler.
|
||||
/// </param>
|
||||
/// <param name="userId">The local id of the user that changed.</param>
|
||||
/// <param name="change">The type of change.</param>
|
||||
/// <returns></returns>
|
||||
#if !XAL_OS_IMPL
|
||||
typedef void (XalUserChangeEventHandler)(
|
||||
_In_opt_ void* context,
|
||||
_In_ XalUserLocalId userId,
|
||||
_In_ XalUserChangeType change
|
||||
);
|
||||
#else
|
||||
// XalUserChangeEventHandler is defined in the platform specific header.
|
||||
// That header is included at the top of this file
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// A token returned when registering a callback to identify the registration. This token
|
||||
/// is later used to unregister the callback.
|
||||
|
|
|
@ -321,6 +321,25 @@ STDAPI XalUserResolveIssueWithUiResult(
|
|||
//-----------------------------------------------------------------------------
|
||||
// Events
|
||||
|
||||
/// <summary>
|
||||
/// User detail change event handler.
|
||||
/// </summary>
|
||||
/// <param name="context">Optional pointer to data used by the event handler.
|
||||
/// </param>
|
||||
/// <param name="userId">The local id of the user that changed.</param>
|
||||
/// <param name="change">The type of change.</param>
|
||||
/// <returns></returns>
|
||||
#if !XAL_OS_IMPL
|
||||
typedef void (XalUserChangeEventHandler)(
|
||||
_In_opt_ void* context,
|
||||
_In_ XalUserLocalId userId,
|
||||
_In_ XalUserChangeType change
|
||||
);
|
||||
#else
|
||||
// XalUserChangeEventHandler is defined in the platform specific header.
|
||||
// That header is included in xal_types.h
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Register the event handler for user detail changes.
|
||||
/// </summary>
|
||||
|
|
|
@ -20,6 +20,6 @@ extern "C"
|
|||
/// YYYYMMDD Date string describing the date the build was created
|
||||
/// rrr QFE number (000 indicates base release)
|
||||
/// </summary>
|
||||
#define XAL_VERSION "2021.10.20220111.002"
|
||||
#define XAL_VERSION "2021.11.20211021.000"
|
||||
|
||||
}
|
||||
|
|
|
@ -751,6 +751,7 @@ STDAPI XblAchievementsUpdateAchievementForTitleIdAsync(
|
|||
/// <param name="async">Caller allocated AsyncBlock.</param>
|
||||
/// <returns>HRESULT return code for this API operation.</returns>
|
||||
/// <remarks>
|
||||
/// If multiple achievements are required, use the batch API instead: <see cref="XblAchievementsGetAchievementsForTitleIdAsync"/>
|
||||
/// To get the result, call <see cref="XblAchievementsGetAchievementResult"/> inside the AsyncBlock callback
|
||||
/// or after the AsyncBlock is complete.
|
||||
/// </remarks>
|
||||
|
|
|
@ -34,6 +34,7 @@ STDAPI XblNotificationSubscribeToNotificationsAsync(
|
|||
) XBL_NOEXCEPT;
|
||||
#endif
|
||||
|
||||
#if HC_PLATFORM == HC_PLATFORM_IOS || HC_PLATFORM == HC_PLATFORM_ANDROID || HC_PLATFORM == HC_PLATFORM_UWP
|
||||
/// <summary>
|
||||
/// Unsubscribes the title from push notifications.
|
||||
/// </summary>
|
||||
|
@ -44,4 +45,5 @@ STDAPI XblNotificationUnsubscribeFromNotificationsAsync(
|
|||
_In_ XblContextHandle xboxLiveContext,
|
||||
_In_ XAsyncBlock* asyncBlock
|
||||
) XBL_NOEXCEPT;
|
||||
#endif
|
||||
}
|
|
@ -525,6 +525,9 @@ STDAPI XblPresenceSetPresenceAsync(
|
|||
/// <param name="xuid">The Xbox User ID of the user to get presence for.</param>
|
||||
/// <param name="async">The AsyncBlock for this operation.</param>
|
||||
/// <returns>HRESULT return code for this API operation.</returns>
|
||||
/// <remarks>
|
||||
/// If presence info is needed for multiple users, use the batch API instead: <see cref="XblPresenceGetPresenceForMultipleUsersAsync"/>
|
||||
/// </remarks>
|
||||
STDAPI XblPresenceGetPresenceAsync(
|
||||
_In_ XblContextHandle xblContextHandle,
|
||||
_In_ uint64_t xuid,
|
||||
|
|
|
@ -515,6 +515,7 @@ STDAPI XblPrivacyGetAvoidListResult(
|
|||
/// <param name="async">The AsyncBlock for this operation.</param>
|
||||
/// <returns>HRESULT return code for this API operation.</returns>
|
||||
/// <remarks>
|
||||
/// If multiple permissions and/or target users are needed, use the batch API instead: <see cref="XblPrivacyBatchCheckPermissionAsync"/>
|
||||
/// Call <see cref="XblPrivacyCheckPermissionResultSize"/> and <see cref="XblPrivacyCheckPermissionResult"/>
|
||||
/// upon completion to get the result.
|
||||
/// </remarks>
|
||||
|
|
|
@ -94,6 +94,7 @@ typedef struct XblUserProfile
|
|||
/// <param name="async">Caller allocated AsyncBlock.</param>
|
||||
/// <returns>HRESULT return code for this API operation.</returns>
|
||||
/// <remarks>
|
||||
/// If profiles are needed for multiple users, use the batch API instead: <see cref="XblProfileGetUserProfilesAsync"/>
|
||||
/// To get the result, call <see cref="XblProfileGetUserProfileResult"/>
|
||||
/// inside the AsyncBlock callback or after the AsyncBlock is complete.
|
||||
/// </remarks>
|
||||
|
|
|
@ -212,7 +212,21 @@ typedef struct XblTitleHistory
|
|||
/// <summary>
|
||||
/// The last time the user had played.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Do not use both this and lastTimeUserPlayedText.
|
||||
/// For playtime within the past 14 days, this will be accurate for the date and fuzzily accurate for the time.
|
||||
/// For playtime older than 14 days, this will only be accurate to the year and month, up to a year ago. The date will be returned as the 1st of the month,
|
||||
/// but the play time could have occurred anywhere within that month.
|
||||
/// </remarks>
|
||||
time_t lastTimeUserPlayed;
|
||||
|
||||
/// <summary>
|
||||
/// The last time the user had played in a standardized plaintext format (e.g. "a few minutes ago" or "x hours/days/months ago" or "this/last month").
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Do not use both this and lastTimeUserPlayed.
|
||||
/// </remarks>
|
||||
char lastTimeUserPlayedText[XBL_LAST_TIME_PLAYED_CHAR_SIZE];
|
||||
} XblTitleHistory;
|
||||
|
||||
/// <summary>
|
||||
|
|
|
@ -39,6 +39,7 @@ extern "C"
|
|||
#define XBL_REAL_NAME_CHAR_SIZE (255 * 3)
|
||||
#define XBL_RICH_PRESENCE_CHAR_SIZE (100 * 3)
|
||||
#define XBL_XBOX_USER_ID_CHAR_SIZE (21 * 3)
|
||||
#define XBL_LAST_TIME_PLAYED_CHAR_SIZE 25
|
||||
|
||||
#define XBL_GUID_LENGTH 40
|
||||
#define XBL_SCID_LENGTH XBL_GUID_LENGTH
|
||||
|
@ -55,6 +56,7 @@ typedef XalUserHandle XblUserHandle;
|
|||
/// <summary>
|
||||
/// A context token returned when registering a callback/handler to identify the registration.
|
||||
/// This context token is later used to unregister the callback/handler.
|
||||
/// A value of 0 indicates and invalid handler token.
|
||||
/// </summary>
|
||||
typedef int32_t XblFunctionContext;
|
||||
|
||||
|
|
|
@ -135,6 +135,8 @@ typedef struct XblStatisticChangeEventArgs
|
|||
/// <param name="async">The AsyncBlock for this operation.</param>
|
||||
/// <returns>HRESULT return code for this API operation.</returns>
|
||||
/// <remarks>
|
||||
/// If multiple statistics are required for a single user, use this batch API instead: <see cref="XblUserStatisticsGetSingleUserStatisticsAsync"/>
|
||||
/// If statistics are needed for multiple users, use this batch API: <see cref="XblUserStatisticsGetMultipleUserStatisticsAsync"/>
|
||||
/// Call <see cref="XblUserStatisticsGetSingleUserStatisticResultSize"/> and <see cref="XblUserStatisticsGetSingleUserStatisticResult"/>
|
||||
/// upon completion to get the result.
|
||||
/// </remarks>
|
||||
|
|
|
@ -28,7 +28,7 @@ STDAPI XblContextCreateHandle(
|
|||
/// <returns>HRESULT return code for this API operation.</returns>
|
||||
/// <remarks>
|
||||
/// Use this method rather than creating a new context with the same user
|
||||
/// if the XblContextHandle is needed by multiple threads.
|
||||
/// if the XblContextHandle is needed by multiple components with independent lifespans.
|
||||
/// </remarks>
|
||||
STDAPI XblContextDuplicateHandle(
|
||||
_In_ XblContextHandle xboxLiveContextHandle,
|
||||
|
|
|
@ -11,7 +11,11 @@
|
|||
#pragma warning(disable: 4062)
|
||||
#endif
|
||||
|
||||
#if (!defined(HC_LINK_STATIC) || HC_LINK_STATIC == 0) && HC_PLATFORM_IS_APPLE
|
||||
#include <HttpClient/XAsync.h>
|
||||
#else
|
||||
#include <XAsync.h>
|
||||
#endif
|
||||
|
||||
extern "C"
|
||||
{
|
||||
|
@ -296,6 +300,15 @@ STDAPI XblSetOverrideConfiguration(
|
|||
_In_ uint32_t overrideTitleId
|
||||
) XBL_NOEXCEPT;
|
||||
|
||||
/// <summary>
|
||||
/// To override the locale used across XSAPI. If not set, the default is to use the OS locale
|
||||
/// </summary>
|
||||
/// <param name="overrideLocale">Override locale to be used</param>
|
||||
/// <returns>HRESULT return code for this API operation.</returns>
|
||||
STDAPI XblSetOverrideLocale(
|
||||
_In_ char const* overrideLocale
|
||||
) XBL_NOEXCEPT;
|
||||
|
||||
/// <summary>
|
||||
/// Contains information about a service call.
|
||||
/// </summary>
|
||||
|
|
|
@ -268,6 +268,7 @@ Global
|
|||
{DA74F6C1-9B77-4135-9C23-AA348AB0DC9C}.Debug|Gaming.Desktop.x64.Build.0 = Debug|Gaming.Desktop.x64
|
||||
{DA74F6C1-9B77-4135-9C23-AA348AB0DC9C}.Debug|Gaming.Xbox.Scarlett.x64.ActiveCfg = Debug|Gaming.Desktop.x64
|
||||
{DA74F6C1-9B77-4135-9C23-AA348AB0DC9C}.Debug|Gaming.Xbox.XboxOne.x64.ActiveCfg = Debug|Gaming.Desktop.x64
|
||||
{DA74F6C1-9B77-4135-9C23-AA348AB0DC9C}.Debug|Gaming.Xbox.XboxOne.x64.Build.0 = Debug|Gaming.Desktop.x64
|
||||
{DA74F6C1-9B77-4135-9C23-AA348AB0DC9C}.Debug|x64.ActiveCfg = Debug|Gaming.Desktop.x64
|
||||
{DA74F6C1-9B77-4135-9C23-AA348AB0DC9C}.Debug|x86.ActiveCfg = Debug|Gaming.Desktop.x64
|
||||
{DA74F6C1-9B77-4135-9C23-AA348AB0DC9C}.Profile|Any CPU.ActiveCfg = Release|Gaming.Desktop.x64
|
||||
|
|
|
@ -0,0 +1,467 @@
|
|||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio 15
|
||||
VisualStudioVersion = 15.0.26430.16
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "GDK", "GDK", "{C9C47451-FCA6-4B7F-9BD0-20AD3B119737}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "APIExplorer.Shared", "Tests\APIExplorer\APIExplorer.Shared.vcxitems", "{CBC0BEC4-131D-4868-9345-71813557FB39}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{DC381015-B171-4DA5-B7FA-7CDE8196C6D3}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Microsoft.Xbox.Services.142.GDK.C", "Build\Microsoft.Xbox.Services.142.GDK.C\Microsoft.Xbox.Services.142.GDK.C.vcxproj", "{60139F62-BF37-4F11-BD93-5FBF4E92100C}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DirectXTK12", "Tests\GDK\APIRunner.GDK\Kits\DirectXTK12\DirectXTK12_GDK_2017.vcxproj", "{052C4858-C76F-4CEA-8A1A-E8E5559E67C2}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "APIRunner.143.GDK.Src", "Tests\GDK\APIRunner.GDK\APIRunner.143.GDK.Src.vcxproj", "{46F31A54-4C74-41A8-B294-26B5689E51EF}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libHttpClient.142.GDK.C", "External\xal\External\libHttpClient\Build\libHttpClient.142.GDK.C\libHttpClient.142.GDK.C.vcxproj", "{80D8061D-BBEF-414D-8F08-4D8B52C02E85}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "UnitTests", "UnitTests", "{026C8F03-2B39-4984-9F71-D933E4455B2B}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Microsoft.Xbox.Services.UnitTest.142.TE", "Build\Microsoft.Xbox.Services.UnitTest.142.TE\Microsoft.Xbox.Services.UnitTest.142.TE.vcxproj", "{3092CCC9-DB6E-4199-95CC-4959950B95FA}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libcrypto.142.Win32", "External\xal\External\libHttpClient\Build\libcrypto.142.Win32\libcrypto.142.Win32.vcxproj", "{2C8E7AF1-A395-4695-A116-63000F910ABD}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libHttpClient.142.Win32.C", "External\xal\External\libHttpClient\Build\libHttpClient.142.Win32.C\libHttpClient.142.Win32.C.vcxproj", "{9164C6C9-3872-4922-A3E3-3822622D3E71}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libssl.142.Win32", "External\xal\External\libHttpClient\Build\libssl.142.Win32\libssl.142.Win32.vcxproj", "{13457617-8476-4708-A601-AF998F6EDF21}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SharedMSBuildProjectFiles) = preSolution
|
||||
Tests\APIExplorer\APIExplorer.Shared.vcxitems*{46f31a54-4c74-41a8-b294-26b5689e51ef}*SharedItemsImports = 4
|
||||
Tests\APIExplorer\APIExplorer.Shared.vcxitems*{cbc0bec4-131d-4868-9345-71813557fb39}*SharedItemsImports = 9
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Debug|ARM = Debug|ARM
|
||||
Debug|ARM64 = Debug|ARM64
|
||||
Debug|Gaming.Desktop.x64 = Debug|Gaming.Desktop.x64
|
||||
Debug|Gaming.Xbox.Scarlett.x64 = Debug|Gaming.Xbox.Scarlett.x64
|
||||
Debug|Gaming.Xbox.XboxOne.x64 = Debug|Gaming.Xbox.XboxOne.x64
|
||||
Debug|x64 = Debug|x64
|
||||
Debug|x86 = Debug|x86
|
||||
Profile|Any CPU = Profile|Any CPU
|
||||
Profile|ARM = Profile|ARM
|
||||
Profile|ARM64 = Profile|ARM64
|
||||
Profile|Gaming.Desktop.x64 = Profile|Gaming.Desktop.x64
|
||||
Profile|Gaming.Xbox.Scarlett.x64 = Profile|Gaming.Xbox.Scarlett.x64
|
||||
Profile|Gaming.Xbox.XboxOne.x64 = Profile|Gaming.Xbox.XboxOne.x64
|
||||
Profile|x64 = Profile|x64
|
||||
Profile|x86 = Profile|x86
|
||||
Release|Any CPU = Release|Any CPU
|
||||
Release|ARM = Release|ARM
|
||||
Release|ARM64 = Release|ARM64
|
||||
Release|Gaming.Desktop.x64 = Release|Gaming.Desktop.x64
|
||||
Release|Gaming.Xbox.Scarlett.x64 = Release|Gaming.Xbox.Scarlett.x64
|
||||
Release|Gaming.Xbox.XboxOne.x64 = Release|Gaming.Xbox.XboxOne.x64
|
||||
Release|x64 = Release|x64
|
||||
Release|x86 = Release|x86
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{60139F62-BF37-4F11-BD93-5FBF4E92100C}.Debug|Any CPU.ActiveCfg = Debug|Gaming.Desktop.x64
|
||||
{60139F62-BF37-4F11-BD93-5FBF4E92100C}.Debug|ARM.ActiveCfg = Debug|Gaming.Desktop.x64
|
||||
{60139F62-BF37-4F11-BD93-5FBF4E92100C}.Debug|ARM64.ActiveCfg = Debug|Gaming.Desktop.x64
|
||||
{60139F62-BF37-4F11-BD93-5FBF4E92100C}.Debug|Gaming.Desktop.x64.ActiveCfg = Debug|Gaming.Desktop.x64
|
||||
{60139F62-BF37-4F11-BD93-5FBF4E92100C}.Debug|Gaming.Desktop.x64.Build.0 = Debug|Gaming.Desktop.x64
|
||||
{60139F62-BF37-4F11-BD93-5FBF4E92100C}.Debug|Gaming.Xbox.Scarlett.x64.ActiveCfg = Debug|Gaming.Desktop.x64
|
||||
{60139F62-BF37-4F11-BD93-5FBF4E92100C}.Debug|Gaming.Xbox.Scarlett.x64.Build.0 = Debug|Gaming.Desktop.x64
|
||||
{60139F62-BF37-4F11-BD93-5FBF4E92100C}.Debug|Gaming.Xbox.XboxOne.x64.ActiveCfg = Debug|Gaming.Desktop.x64
|
||||
{60139F62-BF37-4F11-BD93-5FBF4E92100C}.Debug|Gaming.Xbox.XboxOne.x64.Build.0 = Debug|Gaming.Desktop.x64
|
||||
{60139F62-BF37-4F11-BD93-5FBF4E92100C}.Debug|x64.ActiveCfg = Debug|Gaming.Desktop.x64
|
||||
{60139F62-BF37-4F11-BD93-5FBF4E92100C}.Debug|x86.ActiveCfg = Debug|Gaming.Desktop.x64
|
||||
{60139F62-BF37-4F11-BD93-5FBF4E92100C}.Profile|Any CPU.ActiveCfg = Release|Gaming.Desktop.x64
|
||||
{60139F62-BF37-4F11-BD93-5FBF4E92100C}.Profile|Any CPU.Build.0 = Release|Gaming.Desktop.x64
|
||||
{60139F62-BF37-4F11-BD93-5FBF4E92100C}.Profile|ARM.ActiveCfg = Release|Gaming.Desktop.x64
|
||||
{60139F62-BF37-4F11-BD93-5FBF4E92100C}.Profile|ARM.Build.0 = Release|Gaming.Desktop.x64
|
||||
{60139F62-BF37-4F11-BD93-5FBF4E92100C}.Profile|ARM64.ActiveCfg = Release|Gaming.Desktop.x64
|
||||
{60139F62-BF37-4F11-BD93-5FBF4E92100C}.Profile|ARM64.Build.0 = Release|Gaming.Desktop.x64
|
||||
{60139F62-BF37-4F11-BD93-5FBF4E92100C}.Profile|Gaming.Desktop.x64.ActiveCfg = Release|Gaming.Desktop.x64
|
||||
{60139F62-BF37-4F11-BD93-5FBF4E92100C}.Profile|Gaming.Desktop.x64.Build.0 = Release|Gaming.Desktop.x64
|
||||
{60139F62-BF37-4F11-BD93-5FBF4E92100C}.Profile|Gaming.Xbox.Scarlett.x64.ActiveCfg = Release|Gaming.Desktop.x64
|
||||
{60139F62-BF37-4F11-BD93-5FBF4E92100C}.Profile|Gaming.Xbox.Scarlett.x64.Build.0 = Release|Gaming.Desktop.x64
|
||||
{60139F62-BF37-4F11-BD93-5FBF4E92100C}.Profile|Gaming.Xbox.XboxOne.x64.ActiveCfg = Release|Gaming.Desktop.x64
|
||||
{60139F62-BF37-4F11-BD93-5FBF4E92100C}.Profile|Gaming.Xbox.XboxOne.x64.Build.0 = Release|Gaming.Desktop.x64
|
||||
{60139F62-BF37-4F11-BD93-5FBF4E92100C}.Profile|x64.ActiveCfg = Release|Gaming.Desktop.x64
|
||||
{60139F62-BF37-4F11-BD93-5FBF4E92100C}.Profile|x64.Build.0 = Release|Gaming.Desktop.x64
|
||||
{60139F62-BF37-4F11-BD93-5FBF4E92100C}.Profile|x86.ActiveCfg = Release|Gaming.Desktop.x64
|
||||
{60139F62-BF37-4F11-BD93-5FBF4E92100C}.Profile|x86.Build.0 = Release|Gaming.Desktop.x64
|
||||
{60139F62-BF37-4F11-BD93-5FBF4E92100C}.Release|Any CPU.ActiveCfg = Release|Gaming.Desktop.x64
|
||||
{60139F62-BF37-4F11-BD93-5FBF4E92100C}.Release|ARM.ActiveCfg = Release|Gaming.Desktop.x64
|
||||
{60139F62-BF37-4F11-BD93-5FBF4E92100C}.Release|ARM64.ActiveCfg = Release|Gaming.Desktop.x64
|
||||
{60139F62-BF37-4F11-BD93-5FBF4E92100C}.Release|Gaming.Desktop.x64.ActiveCfg = Release|Gaming.Desktop.x64
|
||||
{60139F62-BF37-4F11-BD93-5FBF4E92100C}.Release|Gaming.Desktop.x64.Build.0 = Release|Gaming.Desktop.x64
|
||||
{60139F62-BF37-4F11-BD93-5FBF4E92100C}.Release|Gaming.Xbox.Scarlett.x64.ActiveCfg = Release|Gaming.Desktop.x64
|
||||
{60139F62-BF37-4F11-BD93-5FBF4E92100C}.Release|Gaming.Xbox.Scarlett.x64.Build.0 = Release|Gaming.Desktop.x64
|
||||
{60139F62-BF37-4F11-BD93-5FBF4E92100C}.Release|Gaming.Xbox.XboxOne.x64.ActiveCfg = Release|Gaming.Desktop.x64
|
||||
{60139F62-BF37-4F11-BD93-5FBF4E92100C}.Release|Gaming.Xbox.XboxOne.x64.Build.0 = Release|Gaming.Desktop.x64
|
||||
{60139F62-BF37-4F11-BD93-5FBF4E92100C}.Release|x64.ActiveCfg = Release|Gaming.Desktop.x64
|
||||
{60139F62-BF37-4F11-BD93-5FBF4E92100C}.Release|x86.ActiveCfg = Release|Gaming.Desktop.x64
|
||||
{E538394B-68CB-4597-87AD-7B6841CC1278}.Debug|Any CPU.ActiveCfg = Debug|Gaming.Desktop.x64
|
||||
{E538394B-68CB-4597-87AD-7B6841CC1278}.Debug|ARM.ActiveCfg = Debug|Gaming.Desktop.x64
|
||||
{E538394B-68CB-4597-87AD-7B6841CC1278}.Debug|ARM64.ActiveCfg = Debug|Gaming.Desktop.x64
|
||||
{E538394B-68CB-4597-87AD-7B6841CC1278}.Debug|Gaming.Desktop.x64.ActiveCfg = Debug|Gaming.Desktop.x64
|
||||
{E538394B-68CB-4597-87AD-7B6841CC1278}.Debug|Gaming.Desktop.x64.Build.0 = Debug|Gaming.Desktop.x64
|
||||
{E538394B-68CB-4597-87AD-7B6841CC1278}.Debug|Gaming.Xbox.Scarlett.x64.ActiveCfg = Debug|Gaming.Desktop.x64
|
||||
{E538394B-68CB-4597-87AD-7B6841CC1278}.Debug|Gaming.Xbox.Scarlett.x64.Build.0 = Debug|Gaming.Desktop.x64
|
||||
{E538394B-68CB-4597-87AD-7B6841CC1278}.Debug|Gaming.Xbox.XboxOne.x64.ActiveCfg = Debug|Gaming.Desktop.x64
|
||||
{E538394B-68CB-4597-87AD-7B6841CC1278}.Debug|Gaming.Xbox.XboxOne.x64.Build.0 = Debug|Gaming.Desktop.x64
|
||||
{E538394B-68CB-4597-87AD-7B6841CC1278}.Debug|x64.ActiveCfg = Debug|Gaming.Desktop.x64
|
||||
{E538394B-68CB-4597-87AD-7B6841CC1278}.Debug|x86.ActiveCfg = Debug|Gaming.Desktop.x64
|
||||
{E538394B-68CB-4597-87AD-7B6841CC1278}.Profile|Any CPU.ActiveCfg = Release|Gaming.Desktop.x64
|
||||
{E538394B-68CB-4597-87AD-7B6841CC1278}.Profile|Any CPU.Build.0 = Release|Gaming.Desktop.x64
|
||||
{E538394B-68CB-4597-87AD-7B6841CC1278}.Profile|ARM.ActiveCfg = Release|Gaming.Desktop.x64
|
||||
{E538394B-68CB-4597-87AD-7B6841CC1278}.Profile|ARM.Build.0 = Release|Gaming.Desktop.x64
|
||||
{E538394B-68CB-4597-87AD-7B6841CC1278}.Profile|ARM64.ActiveCfg = Release|Gaming.Desktop.x64
|
||||
{E538394B-68CB-4597-87AD-7B6841CC1278}.Profile|ARM64.Build.0 = Release|Gaming.Desktop.x64
|
||||
{E538394B-68CB-4597-87AD-7B6841CC1278}.Profile|Gaming.Desktop.x64.ActiveCfg = Release|Gaming.Desktop.x64
|
||||
{E538394B-68CB-4597-87AD-7B6841CC1278}.Profile|Gaming.Desktop.x64.Build.0 = Release|Gaming.Desktop.x64
|
||||
{E538394B-68CB-4597-87AD-7B6841CC1278}.Profile|Gaming.Xbox.Scarlett.x64.ActiveCfg = Release|Gaming.Desktop.x64
|
||||
{E538394B-68CB-4597-87AD-7B6841CC1278}.Profile|Gaming.Xbox.Scarlett.x64.Build.0 = Release|Gaming.Desktop.x64
|
||||
{E538394B-68CB-4597-87AD-7B6841CC1278}.Profile|Gaming.Xbox.XboxOne.x64.ActiveCfg = Release|Gaming.Desktop.x64
|
||||
{E538394B-68CB-4597-87AD-7B6841CC1278}.Profile|Gaming.Xbox.XboxOne.x64.Build.0 = Release|Gaming.Desktop.x64
|
||||
{E538394B-68CB-4597-87AD-7B6841CC1278}.Profile|x64.ActiveCfg = Release|Gaming.Desktop.x64
|
||||
{E538394B-68CB-4597-87AD-7B6841CC1278}.Profile|x64.Build.0 = Release|Gaming.Desktop.x64
|
||||
{E538394B-68CB-4597-87AD-7B6841CC1278}.Profile|x86.ActiveCfg = Release|Gaming.Desktop.x64
|
||||
{E538394B-68CB-4597-87AD-7B6841CC1278}.Profile|x86.Build.0 = Release|Gaming.Desktop.x64
|
||||
{E538394B-68CB-4597-87AD-7B6841CC1278}.Release|Any CPU.ActiveCfg = Release|Gaming.Desktop.x64
|
||||
{E538394B-68CB-4597-87AD-7B6841CC1278}.Release|ARM.ActiveCfg = Release|Gaming.Desktop.x64
|
||||
{E538394B-68CB-4597-87AD-7B6841CC1278}.Release|ARM64.ActiveCfg = Release|Gaming.Desktop.x64
|
||||
{E538394B-68CB-4597-87AD-7B6841CC1278}.Release|Gaming.Desktop.x64.ActiveCfg = Release|Gaming.Desktop.x64
|
||||
{E538394B-68CB-4597-87AD-7B6841CC1278}.Release|Gaming.Desktop.x64.Build.0 = Release|Gaming.Desktop.x64
|
||||
{E538394B-68CB-4597-87AD-7B6841CC1278}.Release|Gaming.Xbox.Scarlett.x64.ActiveCfg = Release|Gaming.Desktop.x64
|
||||
{E538394B-68CB-4597-87AD-7B6841CC1278}.Release|Gaming.Xbox.Scarlett.x64.Build.0 = Release|Gaming.Desktop.x64
|
||||
{E538394B-68CB-4597-87AD-7B6841CC1278}.Release|Gaming.Xbox.XboxOne.x64.ActiveCfg = Release|Gaming.Desktop.x64
|
||||
{E538394B-68CB-4597-87AD-7B6841CC1278}.Release|Gaming.Xbox.XboxOne.x64.Build.0 = Release|Gaming.Desktop.x64
|
||||
{E538394B-68CB-4597-87AD-7B6841CC1278}.Release|x64.ActiveCfg = Release|Gaming.Desktop.x64
|
||||
{E538394B-68CB-4597-87AD-7B6841CC1278}.Release|x86.ActiveCfg = Release|Gaming.Desktop.x64
|
||||
{052C4858-C76F-4CEA-8A1A-E8E5559E67C2}.Debug|Any CPU.ActiveCfg = Debug|Gaming.Xbox.XboxOne.x64
|
||||
{052C4858-C76F-4CEA-8A1A-E8E5559E67C2}.Debug|ARM.ActiveCfg = Debug|Gaming.Xbox.Scarlett.x64
|
||||
{052C4858-C76F-4CEA-8A1A-E8E5559E67C2}.Debug|ARM64.ActiveCfg = Debug|Gaming.Xbox.Scarlett.x64
|
||||
{052C4858-C76F-4CEA-8A1A-E8E5559E67C2}.Debug|Gaming.Desktop.x64.ActiveCfg = Debug|Gaming.Desktop.x64
|
||||
{052C4858-C76F-4CEA-8A1A-E8E5559E67C2}.Debug|Gaming.Desktop.x64.Build.0 = Debug|Gaming.Desktop.x64
|
||||
{052C4858-C76F-4CEA-8A1A-E8E5559E67C2}.Debug|Gaming.Xbox.Scarlett.x64.ActiveCfg = Debug|Gaming.Xbox.Scarlett.x64
|
||||
{052C4858-C76F-4CEA-8A1A-E8E5559E67C2}.Debug|Gaming.Xbox.Scarlett.x64.Build.0 = Debug|Gaming.Xbox.Scarlett.x64
|
||||
{052C4858-C76F-4CEA-8A1A-E8E5559E67C2}.Debug|Gaming.Xbox.XboxOne.x64.ActiveCfg = Debug|Gaming.Xbox.XboxOne.x64
|
||||
{052C4858-C76F-4CEA-8A1A-E8E5559E67C2}.Debug|Gaming.Xbox.XboxOne.x64.Build.0 = Debug|Gaming.Xbox.XboxOne.x64
|
||||
{052C4858-C76F-4CEA-8A1A-E8E5559E67C2}.Debug|x64.ActiveCfg = Debug|Gaming.Xbox.Scarlett.x64
|
||||
{052C4858-C76F-4CEA-8A1A-E8E5559E67C2}.Debug|x86.ActiveCfg = Debug|Gaming.Xbox.Scarlett.x64
|
||||
{052C4858-C76F-4CEA-8A1A-E8E5559E67C2}.Profile|Any CPU.ActiveCfg = Profile|Gaming.Xbox.XboxOne.x64
|
||||
{052C4858-C76F-4CEA-8A1A-E8E5559E67C2}.Profile|ARM.ActiveCfg = Profile|Gaming.Xbox.Scarlett.x64
|
||||
{052C4858-C76F-4CEA-8A1A-E8E5559E67C2}.Profile|ARM64.ActiveCfg = Profile|Gaming.Xbox.Scarlett.x64
|
||||
{052C4858-C76F-4CEA-8A1A-E8E5559E67C2}.Profile|Gaming.Desktop.x64.ActiveCfg = Profile|Gaming.Desktop.x64
|
||||
{052C4858-C76F-4CEA-8A1A-E8E5559E67C2}.Profile|Gaming.Desktop.x64.Build.0 = Profile|Gaming.Desktop.x64
|
||||
{052C4858-C76F-4CEA-8A1A-E8E5559E67C2}.Profile|Gaming.Xbox.Scarlett.x64.ActiveCfg = Profile|Gaming.Xbox.Scarlett.x64
|
||||
{052C4858-C76F-4CEA-8A1A-E8E5559E67C2}.Profile|Gaming.Xbox.Scarlett.x64.Build.0 = Profile|Gaming.Xbox.Scarlett.x64
|
||||
{052C4858-C76F-4CEA-8A1A-E8E5559E67C2}.Profile|Gaming.Xbox.XboxOne.x64.ActiveCfg = Profile|Gaming.Xbox.XboxOne.x64
|
||||
{052C4858-C76F-4CEA-8A1A-E8E5559E67C2}.Profile|Gaming.Xbox.XboxOne.x64.Build.0 = Profile|Gaming.Xbox.XboxOne.x64
|
||||
{052C4858-C76F-4CEA-8A1A-E8E5559E67C2}.Profile|x64.ActiveCfg = Profile|Gaming.Xbox.Scarlett.x64
|
||||
{052C4858-C76F-4CEA-8A1A-E8E5559E67C2}.Profile|x86.ActiveCfg = Profile|Gaming.Xbox.Scarlett.x64
|
||||
{052C4858-C76F-4CEA-8A1A-E8E5559E67C2}.Release|Any CPU.ActiveCfg = Release|Gaming.Xbox.XboxOne.x64
|
||||
{052C4858-C76F-4CEA-8A1A-E8E5559E67C2}.Release|ARM.ActiveCfg = Release|Gaming.Xbox.Scarlett.x64
|
||||
{052C4858-C76F-4CEA-8A1A-E8E5559E67C2}.Release|ARM64.ActiveCfg = Release|Gaming.Xbox.Scarlett.x64
|
||||
{052C4858-C76F-4CEA-8A1A-E8E5559E67C2}.Release|Gaming.Desktop.x64.ActiveCfg = Release|Gaming.Desktop.x64
|
||||
{052C4858-C76F-4CEA-8A1A-E8E5559E67C2}.Release|Gaming.Desktop.x64.Build.0 = Release|Gaming.Desktop.x64
|
||||
{052C4858-C76F-4CEA-8A1A-E8E5559E67C2}.Release|Gaming.Xbox.Scarlett.x64.ActiveCfg = Release|Gaming.Xbox.Scarlett.x64
|
||||
{052C4858-C76F-4CEA-8A1A-E8E5559E67C2}.Release|Gaming.Xbox.Scarlett.x64.Build.0 = Release|Gaming.Xbox.Scarlett.x64
|
||||
{052C4858-C76F-4CEA-8A1A-E8E5559E67C2}.Release|Gaming.Xbox.XboxOne.x64.ActiveCfg = Release|Gaming.Xbox.XboxOne.x64
|
||||
{052C4858-C76F-4CEA-8A1A-E8E5559E67C2}.Release|Gaming.Xbox.XboxOne.x64.Build.0 = Release|Gaming.Xbox.XboxOne.x64
|
||||
{052C4858-C76F-4CEA-8A1A-E8E5559E67C2}.Release|x64.ActiveCfg = Release|Gaming.Xbox.Scarlett.x64
|
||||
{052C4858-C76F-4CEA-8A1A-E8E5559E67C2}.Release|x86.ActiveCfg = Release|Gaming.Xbox.Scarlett.x64
|
||||
{46F31A54-4C74-41A8-B294-26B5689E51EF}.Debug|Any CPU.ActiveCfg = Debug|Gaming.Xbox.XboxOne.x64
|
||||
{46F31A54-4C74-41A8-B294-26B5689E51EF}.Debug|ARM.ActiveCfg = Debug|Gaming.Xbox.Scarlett.x64
|
||||
{46F31A54-4C74-41A8-B294-26B5689E51EF}.Debug|ARM64.ActiveCfg = Debug|Gaming.Xbox.Scarlett.x64
|
||||
{46F31A54-4C74-41A8-B294-26B5689E51EF}.Debug|Gaming.Desktop.x64.ActiveCfg = Debug|Gaming.Desktop.x64
|
||||
{46F31A54-4C74-41A8-B294-26B5689E51EF}.Debug|Gaming.Desktop.x64.Build.0 = Debug|Gaming.Desktop.x64
|
||||
{46F31A54-4C74-41A8-B294-26B5689E51EF}.Debug|Gaming.Desktop.x64.Deploy.0 = Debug|Gaming.Desktop.x64
|
||||
{46F31A54-4C74-41A8-B294-26B5689E51EF}.Debug|Gaming.Xbox.Scarlett.x64.ActiveCfg = Debug|Gaming.Xbox.Scarlett.x64
|
||||
{46F31A54-4C74-41A8-B294-26B5689E51EF}.Debug|Gaming.Xbox.Scarlett.x64.Build.0 = Debug|Gaming.Xbox.Scarlett.x64
|
||||
{46F31A54-4C74-41A8-B294-26B5689E51EF}.Debug|Gaming.Xbox.Scarlett.x64.Deploy.0 = Debug|Gaming.Xbox.Scarlett.x64
|
||||
{46F31A54-4C74-41A8-B294-26B5689E51EF}.Debug|Gaming.Xbox.XboxOne.x64.ActiveCfg = Debug|Gaming.Xbox.XboxOne.x64
|
||||
{46F31A54-4C74-41A8-B294-26B5689E51EF}.Debug|Gaming.Xbox.XboxOne.x64.Build.0 = Debug|Gaming.Xbox.XboxOne.x64
|
||||
{46F31A54-4C74-41A8-B294-26B5689E51EF}.Debug|Gaming.Xbox.XboxOne.x64.Deploy.0 = Debug|Gaming.Xbox.XboxOne.x64
|
||||
{46F31A54-4C74-41A8-B294-26B5689E51EF}.Debug|x64.ActiveCfg = Debug|Gaming.Xbox.Scarlett.x64
|
||||
{46F31A54-4C74-41A8-B294-26B5689E51EF}.Debug|x86.ActiveCfg = Debug|Gaming.Xbox.Scarlett.x64
|
||||
{46F31A54-4C74-41A8-B294-26B5689E51EF}.Profile|Any CPU.ActiveCfg = Profile|Gaming.Xbox.XboxOne.x64
|
||||
{46F31A54-4C74-41A8-B294-26B5689E51EF}.Profile|ARM.ActiveCfg = Profile|Gaming.Xbox.Scarlett.x64
|
||||
{46F31A54-4C74-41A8-B294-26B5689E51EF}.Profile|ARM64.ActiveCfg = Profile|Gaming.Xbox.Scarlett.x64
|
||||
{46F31A54-4C74-41A8-B294-26B5689E51EF}.Profile|Gaming.Desktop.x64.ActiveCfg = Profile|Gaming.Desktop.x64
|
||||
{46F31A54-4C74-41A8-B294-26B5689E51EF}.Profile|Gaming.Desktop.x64.Build.0 = Profile|Gaming.Desktop.x64
|
||||
{46F31A54-4C74-41A8-B294-26B5689E51EF}.Profile|Gaming.Desktop.x64.Deploy.0 = Profile|Gaming.Desktop.x64
|
||||
{46F31A54-4C74-41A8-B294-26B5689E51EF}.Profile|Gaming.Xbox.Scarlett.x64.ActiveCfg = Profile|Gaming.Xbox.Scarlett.x64
|
||||
{46F31A54-4C74-41A8-B294-26B5689E51EF}.Profile|Gaming.Xbox.Scarlett.x64.Build.0 = Profile|Gaming.Xbox.Scarlett.x64
|
||||
{46F31A54-4C74-41A8-B294-26B5689E51EF}.Profile|Gaming.Xbox.Scarlett.x64.Deploy.0 = Profile|Gaming.Xbox.Scarlett.x64
|
||||
{46F31A54-4C74-41A8-B294-26B5689E51EF}.Profile|Gaming.Xbox.XboxOne.x64.ActiveCfg = Profile|Gaming.Xbox.XboxOne.x64
|
||||
{46F31A54-4C74-41A8-B294-26B5689E51EF}.Profile|Gaming.Xbox.XboxOne.x64.Build.0 = Profile|Gaming.Xbox.XboxOne.x64
|
||||
{46F31A54-4C74-41A8-B294-26B5689E51EF}.Profile|Gaming.Xbox.XboxOne.x64.Deploy.0 = Profile|Gaming.Xbox.XboxOne.x64
|
||||
{46F31A54-4C74-41A8-B294-26B5689E51EF}.Profile|x64.ActiveCfg = Profile|Gaming.Xbox.Scarlett.x64
|
||||
{46F31A54-4C74-41A8-B294-26B5689E51EF}.Profile|x86.ActiveCfg = Profile|Gaming.Xbox.Scarlett.x64
|
||||
{46F31A54-4C74-41A8-B294-26B5689E51EF}.Release|Any CPU.ActiveCfg = Release|Gaming.Xbox.XboxOne.x64
|
||||
{46F31A54-4C74-41A8-B294-26B5689E51EF}.Release|ARM.ActiveCfg = Release|Gaming.Xbox.Scarlett.x64
|
||||
{46F31A54-4C74-41A8-B294-26B5689E51EF}.Release|ARM64.ActiveCfg = Release|Gaming.Xbox.Scarlett.x64
|
||||
{46F31A54-4C74-41A8-B294-26B5689E51EF}.Release|Gaming.Desktop.x64.ActiveCfg = Release|Gaming.Desktop.x64
|
||||
{46F31A54-4C74-41A8-B294-26B5689E51EF}.Release|Gaming.Desktop.x64.Build.0 = Release|Gaming.Desktop.x64
|
||||
{46F31A54-4C74-41A8-B294-26B5689E51EF}.Release|Gaming.Desktop.x64.Deploy.0 = Release|Gaming.Desktop.x64
|
||||
{46F31A54-4C74-41A8-B294-26B5689E51EF}.Release|Gaming.Xbox.Scarlett.x64.ActiveCfg = Release|Gaming.Xbox.Scarlett.x64
|
||||
{46F31A54-4C74-41A8-B294-26B5689E51EF}.Release|Gaming.Xbox.Scarlett.x64.Build.0 = Release|Gaming.Xbox.Scarlett.x64
|
||||
{46F31A54-4C74-41A8-B294-26B5689E51EF}.Release|Gaming.Xbox.Scarlett.x64.Deploy.0 = Release|Gaming.Xbox.Scarlett.x64
|
||||
{46F31A54-4C74-41A8-B294-26B5689E51EF}.Release|Gaming.Xbox.XboxOne.x64.ActiveCfg = Release|Gaming.Xbox.XboxOne.x64
|
||||
{46F31A54-4C74-41A8-B294-26B5689E51EF}.Release|Gaming.Xbox.XboxOne.x64.Build.0 = Release|Gaming.Xbox.XboxOne.x64
|
||||
{46F31A54-4C74-41A8-B294-26B5689E51EF}.Release|Gaming.Xbox.XboxOne.x64.Deploy.0 = Release|Gaming.Xbox.XboxOne.x64
|
||||
{46F31A54-4C74-41A8-B294-26B5689E51EF}.Release|x64.ActiveCfg = Release|Gaming.Xbox.Scarlett.x64
|
||||
{46F31A54-4C74-41A8-B294-26B5689E51EF}.Release|x86.ActiveCfg = Release|Gaming.Xbox.Scarlett.x64
|
||||
{21C651D1-61D7-46C5-BD23-128E40329AA5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{21C651D1-61D7-46C5-BD23-128E40329AA5}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{21C651D1-61D7-46C5-BD23-128E40329AA5}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||
{21C651D1-61D7-46C5-BD23-128E40329AA5}.Debug|ARM.Build.0 = Debug|Any CPU
|
||||
{21C651D1-61D7-46C5-BD23-128E40329AA5}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
||||
{21C651D1-61D7-46C5-BD23-128E40329AA5}.Debug|ARM64.Build.0 = Debug|Any CPU
|
||||
{21C651D1-61D7-46C5-BD23-128E40329AA5}.Debug|Gaming.Desktop.x64.ActiveCfg = Debug|Any CPU
|
||||
{21C651D1-61D7-46C5-BD23-128E40329AA5}.Debug|Gaming.Desktop.x64.Build.0 = Debug|Any CPU
|
||||
{21C651D1-61D7-46C5-BD23-128E40329AA5}.Debug|Gaming.Xbox.Scarlett.x64.ActiveCfg = Debug|Any CPU
|
||||
{21C651D1-61D7-46C5-BD23-128E40329AA5}.Debug|Gaming.Xbox.Scarlett.x64.Build.0 = Debug|Any CPU
|
||||
{21C651D1-61D7-46C5-BD23-128E40329AA5}.Debug|Gaming.Xbox.XboxOne.x64.ActiveCfg = Debug|Any CPU
|
||||
{21C651D1-61D7-46C5-BD23-128E40329AA5}.Debug|Gaming.Xbox.XboxOne.x64.Build.0 = Debug|Any CPU
|
||||
{21C651D1-61D7-46C5-BD23-128E40329AA5}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{21C651D1-61D7-46C5-BD23-128E40329AA5}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{21C651D1-61D7-46C5-BD23-128E40329AA5}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{21C651D1-61D7-46C5-BD23-128E40329AA5}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{21C651D1-61D7-46C5-BD23-128E40329AA5}.Profile|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{21C651D1-61D7-46C5-BD23-128E40329AA5}.Profile|Any CPU.Build.0 = Release|Any CPU
|
||||
{21C651D1-61D7-46C5-BD23-128E40329AA5}.Profile|ARM.ActiveCfg = Release|Any CPU
|
||||
{21C651D1-61D7-46C5-BD23-128E40329AA5}.Profile|ARM.Build.0 = Release|Any CPU
|
||||
{21C651D1-61D7-46C5-BD23-128E40329AA5}.Profile|ARM64.ActiveCfg = Release|Any CPU
|
||||
{21C651D1-61D7-46C5-BD23-128E40329AA5}.Profile|ARM64.Build.0 = Release|Any CPU
|
||||
{21C651D1-61D7-46C5-BD23-128E40329AA5}.Profile|Gaming.Desktop.x64.ActiveCfg = Release|Any CPU
|
||||
{21C651D1-61D7-46C5-BD23-128E40329AA5}.Profile|Gaming.Desktop.x64.Build.0 = Release|Any CPU
|
||||
{21C651D1-61D7-46C5-BD23-128E40329AA5}.Profile|Gaming.Xbox.Scarlett.x64.ActiveCfg = Release|Any CPU
|
||||
{21C651D1-61D7-46C5-BD23-128E40329AA5}.Profile|Gaming.Xbox.Scarlett.x64.Build.0 = Release|Any CPU
|
||||
{21C651D1-61D7-46C5-BD23-128E40329AA5}.Profile|Gaming.Xbox.XboxOne.x64.ActiveCfg = Release|Any CPU
|
||||
{21C651D1-61D7-46C5-BD23-128E40329AA5}.Profile|Gaming.Xbox.XboxOne.x64.Build.0 = Release|Any CPU
|
||||
{21C651D1-61D7-46C5-BD23-128E40329AA5}.Profile|x64.ActiveCfg = Release|Any CPU
|
||||
{21C651D1-61D7-46C5-BD23-128E40329AA5}.Profile|x64.Build.0 = Release|Any CPU
|
||||
{21C651D1-61D7-46C5-BD23-128E40329AA5}.Profile|x86.ActiveCfg = Release|Any CPU
|
||||
{21C651D1-61D7-46C5-BD23-128E40329AA5}.Profile|x86.Build.0 = Release|Any CPU
|
||||
{21C651D1-61D7-46C5-BD23-128E40329AA5}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{21C651D1-61D7-46C5-BD23-128E40329AA5}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{21C651D1-61D7-46C5-BD23-128E40329AA5}.Release|ARM.ActiveCfg = Release|Any CPU
|
||||
{21C651D1-61D7-46C5-BD23-128E40329AA5}.Release|ARM.Build.0 = Release|Any CPU
|
||||
{21C651D1-61D7-46C5-BD23-128E40329AA5}.Release|ARM64.ActiveCfg = Release|Any CPU
|
||||
{21C651D1-61D7-46C5-BD23-128E40329AA5}.Release|ARM64.Build.0 = Release|Any CPU
|
||||
{21C651D1-61D7-46C5-BD23-128E40329AA5}.Release|Gaming.Desktop.x64.ActiveCfg = Release|Any CPU
|
||||
{21C651D1-61D7-46C5-BD23-128E40329AA5}.Release|Gaming.Desktop.x64.Build.0 = Release|Any CPU
|
||||
{21C651D1-61D7-46C5-BD23-128E40329AA5}.Release|Gaming.Xbox.Scarlett.x64.ActiveCfg = Release|Any CPU
|
||||
{21C651D1-61D7-46C5-BD23-128E40329AA5}.Release|Gaming.Xbox.Scarlett.x64.Build.0 = Release|Any CPU
|
||||
{21C651D1-61D7-46C5-BD23-128E40329AA5}.Release|Gaming.Xbox.XboxOne.x64.ActiveCfg = Release|Any CPU
|
||||
{21C651D1-61D7-46C5-BD23-128E40329AA5}.Release|Gaming.Xbox.XboxOne.x64.Build.0 = Release|Any CPU
|
||||
{21C651D1-61D7-46C5-BD23-128E40329AA5}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{21C651D1-61D7-46C5-BD23-128E40329AA5}.Release|x64.Build.0 = Release|Any CPU
|
||||
{21C651D1-61D7-46C5-BD23-128E40329AA5}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{21C651D1-61D7-46C5-BD23-128E40329AA5}.Release|x86.Build.0 = Release|Any CPU
|
||||
{80D8061D-BBEF-414D-8F08-4D8B52C02E85}.Debug|Any CPU.ActiveCfg = Debug|Gaming.Desktop.x64
|
||||
{80D8061D-BBEF-414D-8F08-4D8B52C02E85}.Debug|ARM.ActiveCfg = Debug|Gaming.Desktop.x64
|
||||
{80D8061D-BBEF-414D-8F08-4D8B52C02E85}.Debug|ARM64.ActiveCfg = Debug|Gaming.Desktop.x64
|
||||
{80D8061D-BBEF-414D-8F08-4D8B52C02E85}.Debug|Gaming.Desktop.x64.ActiveCfg = Debug|Gaming.Desktop.x64
|
||||
{80D8061D-BBEF-414D-8F08-4D8B52C02E85}.Debug|Gaming.Desktop.x64.Build.0 = Debug|Gaming.Desktop.x64
|
||||
{80D8061D-BBEF-414D-8F08-4D8B52C02E85}.Debug|Gaming.Xbox.Scarlett.x64.ActiveCfg = Debug|Gaming.Desktop.x64
|
||||
{80D8061D-BBEF-414D-8F08-4D8B52C02E85}.Debug|Gaming.Xbox.XboxOne.x64.ActiveCfg = Debug|Gaming.Desktop.x64
|
||||
{80D8061D-BBEF-414D-8F08-4D8B52C02E85}.Debug|x64.ActiveCfg = Debug|Gaming.Desktop.x64
|
||||
{80D8061D-BBEF-414D-8F08-4D8B52C02E85}.Debug|x86.ActiveCfg = Debug|Gaming.Desktop.x64
|
||||
{80D8061D-BBEF-414D-8F08-4D8B52C02E85}.Profile|Any CPU.ActiveCfg = Release|Gaming.Desktop.x64
|
||||
{80D8061D-BBEF-414D-8F08-4D8B52C02E85}.Profile|Any CPU.Build.0 = Release|Gaming.Desktop.x64
|
||||
{80D8061D-BBEF-414D-8F08-4D8B52C02E85}.Profile|ARM.ActiveCfg = Release|Gaming.Desktop.x64
|
||||
{80D8061D-BBEF-414D-8F08-4D8B52C02E85}.Profile|ARM.Build.0 = Release|Gaming.Desktop.x64
|
||||
{80D8061D-BBEF-414D-8F08-4D8B52C02E85}.Profile|ARM64.ActiveCfg = Release|Gaming.Desktop.x64
|
||||
{80D8061D-BBEF-414D-8F08-4D8B52C02E85}.Profile|ARM64.Build.0 = Release|Gaming.Desktop.x64
|
||||
{80D8061D-BBEF-414D-8F08-4D8B52C02E85}.Profile|Gaming.Desktop.x64.ActiveCfg = Release|Gaming.Desktop.x64
|
||||
{80D8061D-BBEF-414D-8F08-4D8B52C02E85}.Profile|Gaming.Desktop.x64.Build.0 = Release|Gaming.Desktop.x64
|
||||
{80D8061D-BBEF-414D-8F08-4D8B52C02E85}.Profile|Gaming.Xbox.Scarlett.x64.ActiveCfg = Release|Gaming.Desktop.x64
|
||||
{80D8061D-BBEF-414D-8F08-4D8B52C02E85}.Profile|Gaming.Xbox.Scarlett.x64.Build.0 = Release|Gaming.Desktop.x64
|
||||
{80D8061D-BBEF-414D-8F08-4D8B52C02E85}.Profile|Gaming.Xbox.XboxOne.x64.ActiveCfg = Release|Gaming.Desktop.x64
|
||||
{80D8061D-BBEF-414D-8F08-4D8B52C02E85}.Profile|Gaming.Xbox.XboxOne.x64.Build.0 = Release|Gaming.Desktop.x64
|
||||
{80D8061D-BBEF-414D-8F08-4D8B52C02E85}.Profile|x64.ActiveCfg = Release|Gaming.Desktop.x64
|
||||
{80D8061D-BBEF-414D-8F08-4D8B52C02E85}.Profile|x64.Build.0 = Release|Gaming.Desktop.x64
|
||||
{80D8061D-BBEF-414D-8F08-4D8B52C02E85}.Profile|x86.ActiveCfg = Release|Gaming.Desktop.x64
|
||||
{80D8061D-BBEF-414D-8F08-4D8B52C02E85}.Profile|x86.Build.0 = Release|Gaming.Desktop.x64
|
||||
{80D8061D-BBEF-414D-8F08-4D8B52C02E85}.Release|Any CPU.ActiveCfg = Release|Gaming.Desktop.x64
|
||||
{80D8061D-BBEF-414D-8F08-4D8B52C02E85}.Release|ARM.ActiveCfg = Release|Gaming.Desktop.x64
|
||||
{80D8061D-BBEF-414D-8F08-4D8B52C02E85}.Release|ARM64.ActiveCfg = Release|Gaming.Desktop.x64
|
||||
{80D8061D-BBEF-414D-8F08-4D8B52C02E85}.Release|Gaming.Desktop.x64.ActiveCfg = Release|Gaming.Desktop.x64
|
||||
{80D8061D-BBEF-414D-8F08-4D8B52C02E85}.Release|Gaming.Desktop.x64.Build.0 = Release|Gaming.Desktop.x64
|
||||
{80D8061D-BBEF-414D-8F08-4D8B52C02E85}.Release|Gaming.Xbox.Scarlett.x64.ActiveCfg = Release|Gaming.Desktop.x64
|
||||
{80D8061D-BBEF-414D-8F08-4D8B52C02E85}.Release|Gaming.Xbox.XboxOne.x64.ActiveCfg = Release|Gaming.Desktop.x64
|
||||
{80D8061D-BBEF-414D-8F08-4D8B52C02E85}.Release|x64.ActiveCfg = Release|Gaming.Desktop.x64
|
||||
{80D8061D-BBEF-414D-8F08-4D8B52C02E85}.Release|x86.ActiveCfg = Release|Gaming.Desktop.x64
|
||||
{3092CCC9-DB6E-4199-95CC-4959950B95FA}.Debug|Any CPU.ActiveCfg = Debug|Win32
|
||||
{3092CCC9-DB6E-4199-95CC-4959950B95FA}.Debug|ARM.ActiveCfg = Debug|Win32
|
||||
{3092CCC9-DB6E-4199-95CC-4959950B95FA}.Debug|ARM64.ActiveCfg = Debug|Win32
|
||||
{3092CCC9-DB6E-4199-95CC-4959950B95FA}.Debug|Gaming.Desktop.x64.ActiveCfg = Debug|Win32
|
||||
{3092CCC9-DB6E-4199-95CC-4959950B95FA}.Debug|Gaming.Xbox.Scarlett.x64.ActiveCfg = Debug|Win32
|
||||
{3092CCC9-DB6E-4199-95CC-4959950B95FA}.Debug|Gaming.Xbox.XboxOne.x64.ActiveCfg = Debug|Win32
|
||||
{3092CCC9-DB6E-4199-95CC-4959950B95FA}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{3092CCC9-DB6E-4199-95CC-4959950B95FA}.Debug|x64.Build.0 = Debug|x64
|
||||
{3092CCC9-DB6E-4199-95CC-4959950B95FA}.Debug|x86.ActiveCfg = Debug|Win32
|
||||
{3092CCC9-DB6E-4199-95CC-4959950B95FA}.Debug|x86.Build.0 = Debug|Win32
|
||||
{3092CCC9-DB6E-4199-95CC-4959950B95FA}.Profile|Any CPU.ActiveCfg = Release|x64
|
||||
{3092CCC9-DB6E-4199-95CC-4959950B95FA}.Profile|Any CPU.Build.0 = Release|x64
|
||||
{3092CCC9-DB6E-4199-95CC-4959950B95FA}.Profile|ARM.ActiveCfg = Release|Win32
|
||||
{3092CCC9-DB6E-4199-95CC-4959950B95FA}.Profile|ARM.Build.0 = Release|Win32
|
||||
{3092CCC9-DB6E-4199-95CC-4959950B95FA}.Profile|ARM64.ActiveCfg = Release|Win32
|
||||
{3092CCC9-DB6E-4199-95CC-4959950B95FA}.Profile|ARM64.Build.0 = Release|Win32
|
||||
{3092CCC9-DB6E-4199-95CC-4959950B95FA}.Profile|Gaming.Desktop.x64.ActiveCfg = Release|x64
|
||||
{3092CCC9-DB6E-4199-95CC-4959950B95FA}.Profile|Gaming.Desktop.x64.Build.0 = Release|x64
|
||||
{3092CCC9-DB6E-4199-95CC-4959950B95FA}.Profile|Gaming.Xbox.Scarlett.x64.ActiveCfg = Release|x64
|
||||
{3092CCC9-DB6E-4199-95CC-4959950B95FA}.Profile|Gaming.Xbox.Scarlett.x64.Build.0 = Release|x64
|
||||
{3092CCC9-DB6E-4199-95CC-4959950B95FA}.Profile|Gaming.Xbox.XboxOne.x64.ActiveCfg = Release|x64
|
||||
{3092CCC9-DB6E-4199-95CC-4959950B95FA}.Profile|Gaming.Xbox.XboxOne.x64.Build.0 = Release|x64
|
||||
{3092CCC9-DB6E-4199-95CC-4959950B95FA}.Profile|x64.ActiveCfg = Release|x64
|
||||
{3092CCC9-DB6E-4199-95CC-4959950B95FA}.Profile|x64.Build.0 = Release|x64
|
||||
{3092CCC9-DB6E-4199-95CC-4959950B95FA}.Profile|x86.ActiveCfg = Release|Win32
|
||||
{3092CCC9-DB6E-4199-95CC-4959950B95FA}.Profile|x86.Build.0 = Release|Win32
|
||||
{3092CCC9-DB6E-4199-95CC-4959950B95FA}.Release|Any CPU.ActiveCfg = Release|Win32
|
||||
{3092CCC9-DB6E-4199-95CC-4959950B95FA}.Release|ARM.ActiveCfg = Release|Win32
|
||||
{3092CCC9-DB6E-4199-95CC-4959950B95FA}.Release|ARM64.ActiveCfg = Release|Win32
|
||||
{3092CCC9-DB6E-4199-95CC-4959950B95FA}.Release|Gaming.Desktop.x64.ActiveCfg = Release|Win32
|
||||
{3092CCC9-DB6E-4199-95CC-4959950B95FA}.Release|Gaming.Xbox.Scarlett.x64.ActiveCfg = Release|Win32
|
||||
{3092CCC9-DB6E-4199-95CC-4959950B95FA}.Release|Gaming.Xbox.XboxOne.x64.ActiveCfg = Release|Win32
|
||||
{3092CCC9-DB6E-4199-95CC-4959950B95FA}.Release|x64.ActiveCfg = Release|x64
|
||||
{3092CCC9-DB6E-4199-95CC-4959950B95FA}.Release|x64.Build.0 = Release|x64
|
||||
{3092CCC9-DB6E-4199-95CC-4959950B95FA}.Release|x86.ActiveCfg = Release|Win32
|
||||
{3092CCC9-DB6E-4199-95CC-4959950B95FA}.Release|x86.Build.0 = Release|Win32
|
||||
{2C8E7AF1-A395-4695-A116-63000F910ABD}.Debug|Any CPU.ActiveCfg = Debug|Win32
|
||||
{2C8E7AF1-A395-4695-A116-63000F910ABD}.Debug|ARM.ActiveCfg = Debug|Win32
|
||||
{2C8E7AF1-A395-4695-A116-63000F910ABD}.Debug|ARM64.ActiveCfg = Debug|ARM64
|
||||
{2C8E7AF1-A395-4695-A116-63000F910ABD}.Debug|ARM64.Build.0 = Debug|ARM64
|
||||
{2C8E7AF1-A395-4695-A116-63000F910ABD}.Debug|Gaming.Desktop.x64.ActiveCfg = Debug|Win32
|
||||
{2C8E7AF1-A395-4695-A116-63000F910ABD}.Debug|Gaming.Xbox.Scarlett.x64.ActiveCfg = Debug|Win32
|
||||
{2C8E7AF1-A395-4695-A116-63000F910ABD}.Debug|Gaming.Xbox.XboxOne.x64.ActiveCfg = Debug|Win32
|
||||
{2C8E7AF1-A395-4695-A116-63000F910ABD}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{2C8E7AF1-A395-4695-A116-63000F910ABD}.Debug|x64.Build.0 = Debug|x64
|
||||
{2C8E7AF1-A395-4695-A116-63000F910ABD}.Debug|x86.ActiveCfg = Debug|Win32
|
||||
{2C8E7AF1-A395-4695-A116-63000F910ABD}.Debug|x86.Build.0 = Debug|Win32
|
||||
{2C8E7AF1-A395-4695-A116-63000F910ABD}.Profile|Any CPU.ActiveCfg = Release|x64
|
||||
{2C8E7AF1-A395-4695-A116-63000F910ABD}.Profile|Any CPU.Build.0 = Release|x64
|
||||
{2C8E7AF1-A395-4695-A116-63000F910ABD}.Profile|ARM.ActiveCfg = Release|x64
|
||||
{2C8E7AF1-A395-4695-A116-63000F910ABD}.Profile|ARM.Build.0 = Release|x64
|
||||
{2C8E7AF1-A395-4695-A116-63000F910ABD}.Profile|ARM64.ActiveCfg = Release|ARM64
|
||||
{2C8E7AF1-A395-4695-A116-63000F910ABD}.Profile|ARM64.Build.0 = Release|ARM64
|
||||
{2C8E7AF1-A395-4695-A116-63000F910ABD}.Profile|Gaming.Desktop.x64.ActiveCfg = Release|x64
|
||||
{2C8E7AF1-A395-4695-A116-63000F910ABD}.Profile|Gaming.Desktop.x64.Build.0 = Release|x64
|
||||
{2C8E7AF1-A395-4695-A116-63000F910ABD}.Profile|Gaming.Xbox.Scarlett.x64.ActiveCfg = Release|x64
|
||||
{2C8E7AF1-A395-4695-A116-63000F910ABD}.Profile|Gaming.Xbox.Scarlett.x64.Build.0 = Release|x64
|
||||
{2C8E7AF1-A395-4695-A116-63000F910ABD}.Profile|Gaming.Xbox.XboxOne.x64.ActiveCfg = Release|x64
|
||||
{2C8E7AF1-A395-4695-A116-63000F910ABD}.Profile|Gaming.Xbox.XboxOne.x64.Build.0 = Release|x64
|
||||
{2C8E7AF1-A395-4695-A116-63000F910ABD}.Profile|x64.ActiveCfg = Release|x64
|
||||
{2C8E7AF1-A395-4695-A116-63000F910ABD}.Profile|x64.Build.0 = Release|x64
|
||||
{2C8E7AF1-A395-4695-A116-63000F910ABD}.Profile|x86.ActiveCfg = Release|Win32
|
||||
{2C8E7AF1-A395-4695-A116-63000F910ABD}.Profile|x86.Build.0 = Release|Win32
|
||||
{2C8E7AF1-A395-4695-A116-63000F910ABD}.Release|Any CPU.ActiveCfg = Release|Win32
|
||||
{2C8E7AF1-A395-4695-A116-63000F910ABD}.Release|ARM.ActiveCfg = Release|Win32
|
||||
{2C8E7AF1-A395-4695-A116-63000F910ABD}.Release|ARM64.ActiveCfg = Release|ARM64
|
||||
{2C8E7AF1-A395-4695-A116-63000F910ABD}.Release|ARM64.Build.0 = Release|ARM64
|
||||
{2C8E7AF1-A395-4695-A116-63000F910ABD}.Release|Gaming.Desktop.x64.ActiveCfg = Release|Win32
|
||||
{2C8E7AF1-A395-4695-A116-63000F910ABD}.Release|Gaming.Xbox.Scarlett.x64.ActiveCfg = Release|Win32
|
||||
{2C8E7AF1-A395-4695-A116-63000F910ABD}.Release|Gaming.Xbox.XboxOne.x64.ActiveCfg = Release|Win32
|
||||
{2C8E7AF1-A395-4695-A116-63000F910ABD}.Release|x64.ActiveCfg = Release|x64
|
||||
{2C8E7AF1-A395-4695-A116-63000F910ABD}.Release|x64.Build.0 = Release|x64
|
||||
{2C8E7AF1-A395-4695-A116-63000F910ABD}.Release|x86.ActiveCfg = Release|Win32
|
||||
{2C8E7AF1-A395-4695-A116-63000F910ABD}.Release|x86.Build.0 = Release|Win32
|
||||
{9164C6C9-3872-4922-A3E3-3822622D3E71}.Debug|Any CPU.ActiveCfg = Debug|Win32
|
||||
{9164C6C9-3872-4922-A3E3-3822622D3E71}.Debug|ARM.ActiveCfg = Debug|ARM
|
||||
{9164C6C9-3872-4922-A3E3-3822622D3E71}.Debug|ARM.Build.0 = Debug|ARM
|
||||
{9164C6C9-3872-4922-A3E3-3822622D3E71}.Debug|ARM64.ActiveCfg = Debug|ARM64
|
||||
{9164C6C9-3872-4922-A3E3-3822622D3E71}.Debug|ARM64.Build.0 = Debug|ARM64
|
||||
{9164C6C9-3872-4922-A3E3-3822622D3E71}.Debug|Gaming.Desktop.x64.ActiveCfg = Debug|Win32
|
||||
{9164C6C9-3872-4922-A3E3-3822622D3E71}.Debug|Gaming.Xbox.Scarlett.x64.ActiveCfg = Debug|Win32
|
||||
{9164C6C9-3872-4922-A3E3-3822622D3E71}.Debug|Gaming.Xbox.XboxOne.x64.ActiveCfg = Debug|Win32
|
||||
{9164C6C9-3872-4922-A3E3-3822622D3E71}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{9164C6C9-3872-4922-A3E3-3822622D3E71}.Debug|x64.Build.0 = Debug|x64
|
||||
{9164C6C9-3872-4922-A3E3-3822622D3E71}.Debug|x86.ActiveCfg = Debug|Win32
|
||||
{9164C6C9-3872-4922-A3E3-3822622D3E71}.Debug|x86.Build.0 = Debug|Win32
|
||||
{9164C6C9-3872-4922-A3E3-3822622D3E71}.Profile|Any CPU.ActiveCfg = Release|x64
|
||||
{9164C6C9-3872-4922-A3E3-3822622D3E71}.Profile|Any CPU.Build.0 = Release|x64
|
||||
{9164C6C9-3872-4922-A3E3-3822622D3E71}.Profile|ARM.ActiveCfg = Release|ARM
|
||||
{9164C6C9-3872-4922-A3E3-3822622D3E71}.Profile|ARM.Build.0 = Release|ARM
|
||||
{9164C6C9-3872-4922-A3E3-3822622D3E71}.Profile|ARM64.ActiveCfg = Release|ARM64
|
||||
{9164C6C9-3872-4922-A3E3-3822622D3E71}.Profile|ARM64.Build.0 = Release|ARM64
|
||||
{9164C6C9-3872-4922-A3E3-3822622D3E71}.Profile|Gaming.Desktop.x64.ActiveCfg = Release|x64
|
||||
{9164C6C9-3872-4922-A3E3-3822622D3E71}.Profile|Gaming.Desktop.x64.Build.0 = Release|x64
|
||||
{9164C6C9-3872-4922-A3E3-3822622D3E71}.Profile|Gaming.Xbox.Scarlett.x64.ActiveCfg = Release|x64
|
||||
{9164C6C9-3872-4922-A3E3-3822622D3E71}.Profile|Gaming.Xbox.Scarlett.x64.Build.0 = Release|x64
|
||||
{9164C6C9-3872-4922-A3E3-3822622D3E71}.Profile|Gaming.Xbox.XboxOne.x64.ActiveCfg = Release|x64
|
||||
{9164C6C9-3872-4922-A3E3-3822622D3E71}.Profile|Gaming.Xbox.XboxOne.x64.Build.0 = Release|x64
|
||||
{9164C6C9-3872-4922-A3E3-3822622D3E71}.Profile|x64.ActiveCfg = Release|x64
|
||||
{9164C6C9-3872-4922-A3E3-3822622D3E71}.Profile|x64.Build.0 = Release|x64
|
||||
{9164C6C9-3872-4922-A3E3-3822622D3E71}.Profile|x86.ActiveCfg = Release|Win32
|
||||
{9164C6C9-3872-4922-A3E3-3822622D3E71}.Profile|x86.Build.0 = Release|Win32
|
||||
{9164C6C9-3872-4922-A3E3-3822622D3E71}.Release|Any CPU.ActiveCfg = Release|Win32
|
||||
{9164C6C9-3872-4922-A3E3-3822622D3E71}.Release|ARM.ActiveCfg = Release|ARM
|
||||
{9164C6C9-3872-4922-A3E3-3822622D3E71}.Release|ARM.Build.0 = Release|ARM
|
||||
{9164C6C9-3872-4922-A3E3-3822622D3E71}.Release|ARM64.ActiveCfg = Release|ARM64
|
||||
{9164C6C9-3872-4922-A3E3-3822622D3E71}.Release|ARM64.Build.0 = Release|ARM64
|
||||
{9164C6C9-3872-4922-A3E3-3822622D3E71}.Release|Gaming.Desktop.x64.ActiveCfg = Release|Win32
|
||||
{9164C6C9-3872-4922-A3E3-3822622D3E71}.Release|Gaming.Xbox.Scarlett.x64.ActiveCfg = Release|Win32
|
||||
{9164C6C9-3872-4922-A3E3-3822622D3E71}.Release|Gaming.Xbox.XboxOne.x64.ActiveCfg = Release|Win32
|
||||
{9164C6C9-3872-4922-A3E3-3822622D3E71}.Release|x64.ActiveCfg = Release|x64
|
||||
{9164C6C9-3872-4922-A3E3-3822622D3E71}.Release|x64.Build.0 = Release|x64
|
||||
{9164C6C9-3872-4922-A3E3-3822622D3E71}.Release|x86.ActiveCfg = Release|Win32
|
||||
{9164C6C9-3872-4922-A3E3-3822622D3E71}.Release|x86.Build.0 = Release|Win32
|
||||
{13457617-8476-4708-A601-AF998F6EDF21}.Debug|Any CPU.ActiveCfg = Debug|Win32
|
||||
{13457617-8476-4708-A601-AF998F6EDF21}.Debug|ARM.ActiveCfg = Debug|Win32
|
||||
{13457617-8476-4708-A601-AF998F6EDF21}.Debug|ARM64.ActiveCfg = Debug|ARM64
|
||||
{13457617-8476-4708-A601-AF998F6EDF21}.Debug|ARM64.Build.0 = Debug|ARM64
|
||||
{13457617-8476-4708-A601-AF998F6EDF21}.Debug|Gaming.Desktop.x64.ActiveCfg = Debug|Win32
|
||||
{13457617-8476-4708-A601-AF998F6EDF21}.Debug|Gaming.Xbox.Scarlett.x64.ActiveCfg = Debug|Win32
|
||||
{13457617-8476-4708-A601-AF998F6EDF21}.Debug|Gaming.Xbox.XboxOne.x64.ActiveCfg = Debug|Win32
|
||||
{13457617-8476-4708-A601-AF998F6EDF21}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{13457617-8476-4708-A601-AF998F6EDF21}.Debug|x64.Build.0 = Debug|x64
|
||||
{13457617-8476-4708-A601-AF998F6EDF21}.Debug|x86.ActiveCfg = Debug|Win32
|
||||
{13457617-8476-4708-A601-AF998F6EDF21}.Debug|x86.Build.0 = Debug|Win32
|
||||
{13457617-8476-4708-A601-AF998F6EDF21}.Profile|Any CPU.ActiveCfg = Release|x64
|
||||
{13457617-8476-4708-A601-AF998F6EDF21}.Profile|Any CPU.Build.0 = Release|x64
|
||||
{13457617-8476-4708-A601-AF998F6EDF21}.Profile|ARM.ActiveCfg = Release|x64
|
||||
{13457617-8476-4708-A601-AF998F6EDF21}.Profile|ARM.Build.0 = Release|x64
|
||||
{13457617-8476-4708-A601-AF998F6EDF21}.Profile|ARM64.ActiveCfg = Release|ARM64
|
||||
{13457617-8476-4708-A601-AF998F6EDF21}.Profile|ARM64.Build.0 = Release|ARM64
|
||||
{13457617-8476-4708-A601-AF998F6EDF21}.Profile|Gaming.Desktop.x64.ActiveCfg = Release|x64
|
||||
{13457617-8476-4708-A601-AF998F6EDF21}.Profile|Gaming.Desktop.x64.Build.0 = Release|x64
|
||||
{13457617-8476-4708-A601-AF998F6EDF21}.Profile|Gaming.Xbox.Scarlett.x64.ActiveCfg = Release|x64
|
||||
{13457617-8476-4708-A601-AF998F6EDF21}.Profile|Gaming.Xbox.Scarlett.x64.Build.0 = Release|x64
|
||||
{13457617-8476-4708-A601-AF998F6EDF21}.Profile|Gaming.Xbox.XboxOne.x64.ActiveCfg = Release|x64
|
||||
{13457617-8476-4708-A601-AF998F6EDF21}.Profile|Gaming.Xbox.XboxOne.x64.Build.0 = Release|x64
|
||||
{13457617-8476-4708-A601-AF998F6EDF21}.Profile|x64.ActiveCfg = Release|x64
|
||||
{13457617-8476-4708-A601-AF998F6EDF21}.Profile|x64.Build.0 = Release|x64
|
||||
{13457617-8476-4708-A601-AF998F6EDF21}.Profile|x86.ActiveCfg = Release|Win32
|
||||
{13457617-8476-4708-A601-AF998F6EDF21}.Profile|x86.Build.0 = Release|Win32
|
||||
{13457617-8476-4708-A601-AF998F6EDF21}.Release|Any CPU.ActiveCfg = Release|Win32
|
||||
{13457617-8476-4708-A601-AF998F6EDF21}.Release|ARM.ActiveCfg = Release|Win32
|
||||
{13457617-8476-4708-A601-AF998F6EDF21}.Release|ARM64.ActiveCfg = Release|ARM64
|
||||
{13457617-8476-4708-A601-AF998F6EDF21}.Release|ARM64.Build.0 = Release|ARM64
|
||||
{13457617-8476-4708-A601-AF998F6EDF21}.Release|Gaming.Desktop.x64.ActiveCfg = Release|Win32
|
||||
{13457617-8476-4708-A601-AF998F6EDF21}.Release|Gaming.Xbox.Scarlett.x64.ActiveCfg = Release|Win32
|
||||
{13457617-8476-4708-A601-AF998F6EDF21}.Release|Gaming.Xbox.XboxOne.x64.ActiveCfg = Release|Win32
|
||||
{13457617-8476-4708-A601-AF998F6EDF21}.Release|x64.ActiveCfg = Release|x64
|
||||
{13457617-8476-4708-A601-AF998F6EDF21}.Release|x64.Build.0 = Release|x64
|
||||
{13457617-8476-4708-A601-AF998F6EDF21}.Release|x86.ActiveCfg = Release|Win32
|
||||
{13457617-8476-4708-A601-AF998F6EDF21}.Release|x86.Build.0 = Release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(NestedProjects) = preSolution
|
||||
{CBC0BEC4-131D-4868-9345-71813557FB39} = {DC381015-B171-4DA5-B7FA-7CDE8196C6D3}
|
||||
{DC381015-B171-4DA5-B7FA-7CDE8196C6D3} = {C9C47451-FCA6-4B7F-9BD0-20AD3B119737}
|
||||
{60139F62-BF37-4F11-BD93-5FBF4E92100C} = {C9C47451-FCA6-4B7F-9BD0-20AD3B119737}
|
||||
{E538394B-68CB-4597-87AD-7B6841CC1278} = {C9C47451-FCA6-4B7F-9BD0-20AD3B119737}
|
||||
{052C4858-C76F-4CEA-8A1A-E8E5559E67C2} = {DC381015-B171-4DA5-B7FA-7CDE8196C6D3}
|
||||
{46F31A54-4C74-41A8-B294-26B5689E51EF} = {DC381015-B171-4DA5-B7FA-7CDE8196C6D3}
|
||||
{21C651D1-61D7-46C5-BD23-128E40329AA5} = {C9C47451-FCA6-4B7F-9BD0-20AD3B119737}
|
||||
{80D8061D-BBEF-414D-8F08-4D8B52C02E85} = {C9C47451-FCA6-4B7F-9BD0-20AD3B119737}
|
||||
{3092CCC9-DB6E-4199-95CC-4959950B95FA} = {026C8F03-2B39-4984-9F71-D933E4455B2B}
|
||||
{2C8E7AF1-A395-4695-A116-63000F910ABD} = {026C8F03-2B39-4984-9F71-D933E4455B2B}
|
||||
{9164C6C9-3872-4922-A3E3-3822622D3E71} = {026C8F03-2B39-4984-9F71-D933E4455B2B}
|
||||
{13457617-8476-4708-A601-AF998F6EDF21} = {026C8F03-2B39-4984-9F71-D933E4455B2B}
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {622BB9B5-938F-41A2-BC8B-B7B3A64A73B5}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
|
@ -26,7 +26,6 @@ public:
|
|||
|
||||
protected:
|
||||
void OnEvent(const JsonValue& data) noexcept override;
|
||||
void OnResync() noexcept override;
|
||||
|
||||
private:
|
||||
Map<XblFunctionContext, AchievementProgressChangeHandler> m_handlers;
|
||||
|
|
|
@ -203,8 +203,4 @@ void AchievementProgressChangeSubscription::OnEvent(
|
|||
}
|
||||
}
|
||||
|
||||
void AchievementProgressChangeSubscription::OnResync() noexcept
|
||||
{
|
||||
LOGS_ERROR << __FUNCTION__ << ": Achievement Progress events may have been missed";
|
||||
}
|
||||
NAMESPACE_MICROSOFT_XBOX_SERVICES_ACHIEVEMENTS_CPP_END
|
||||
NAMESPACE_MICROSOFT_XBOX_SERVICES_ACHIEVEMENTS_CPP_END
|
||||
|
|
|
@ -87,7 +87,7 @@ HRESULT XblContext::Initialize(
|
|||
{
|
||||
Result<xbox::services::User> userResult = m_user.Copy();
|
||||
RETURN_HR_IF_FAILED(userResult.Hresult());
|
||||
m_presenceService = MakeShared<xbox::services::presence::PresenceService>(userResult.ExtractPayload(), m_xboxLiveContextSettings, rtaManager);
|
||||
m_presenceService = MakeShared<xbox::services::presence::PresenceService>(userResult.ExtractPayload(), globalQueue, m_xboxLiveContextSettings, rtaManager);
|
||||
}
|
||||
|
||||
{
|
||||
|
@ -123,7 +123,7 @@ HRESULT XblContext::Initialize(
|
|||
{
|
||||
Result<xbox::services::User> userResult = m_user.Copy();
|
||||
RETURN_HR_IF_FAILED(userResult.Hresult());
|
||||
m_userStatisticsService = MakeShared<xbox::services::user_statistics::UserStatisticsService>(userResult.ExtractPayload(), m_xboxLiveContextSettings, rtaManager);
|
||||
m_userStatisticsService = MakeShared<xbox::services::user_statistics::UserStatisticsService>(userResult.ExtractPayload(), globalQueue, m_xboxLiveContextSettings, rtaManager);
|
||||
}
|
||||
|
||||
{
|
||||
|
|
|
@ -191,6 +191,26 @@ try
|
|||
}
|
||||
CATCH_RETURN()
|
||||
|
||||
STDAPI XblSetOverrideLocale(
|
||||
_In_ char const* overrideLocale
|
||||
) XBL_NOEXCEPT
|
||||
try
|
||||
{
|
||||
RETURN_HR_INVALIDARGUMENT_IF_NULL(overrideLocale);
|
||||
VERIFY_XBL_INITIALIZED();
|
||||
auto state{ GlobalState::Get() };
|
||||
if (state)
|
||||
{
|
||||
state->OverrideLocale(overrideLocale);
|
||||
return S_OK;
|
||||
}
|
||||
else
|
||||
{
|
||||
return E_FAIL;
|
||||
}
|
||||
}
|
||||
CATCH_RETURN()
|
||||
|
||||
STDAPI_(XblFunctionContext) XblAddServiceCallRoutedHandler(
|
||||
_In_ XblCallRoutedHandler handler,
|
||||
_In_opt_ void* context
|
||||
|
|
|
@ -11,13 +11,6 @@ using namespace xbox::services::multiplayer;
|
|||
|
||||
NAMESPACE_MICROSOFT_XBOX_SERVICES_MULTIPLAYER_MANAGER_CPP_BEGIN
|
||||
|
||||
MultiplayerLocalUserManager::MultiplayerLocalUserManager() :
|
||||
m_sessionChangeEventHandlerCounter(0),
|
||||
m_multiplayerSubscriptionLostEventHandlerCounter(0),
|
||||
m_rtaResyncEventHandlerCounter(0)
|
||||
{
|
||||
}
|
||||
|
||||
MultiplayerLocalUserManager::~MultiplayerLocalUserManager()
|
||||
{
|
||||
ChangeAllLocalUserLobbyState(MultiplayerLocalUserLobbyState::Remove);
|
||||
|
@ -348,11 +341,11 @@ MultiplayerLocalUserManager::AddMultiplayerSessionChangedHandler(
|
|||
{
|
||||
std::lock_guard<std::mutex> lock(m_subscriptionLock);
|
||||
|
||||
XblFunctionContext context = -1;
|
||||
XblFunctionContext context = 0;
|
||||
if (handler != nullptr)
|
||||
{
|
||||
context = ++m_sessionChangeEventHandlerCounter;
|
||||
m_sessionChangeEventHandler[m_sessionChangeEventHandlerCounter] = std::move(handler);
|
||||
context = m_sessionChangeEventHandlerCounter;
|
||||
m_sessionChangeEventHandler[m_sessionChangeEventHandlerCounter++] = std::move(handler);
|
||||
}
|
||||
|
||||
return context;
|
||||
|
@ -402,11 +395,11 @@ MultiplayerLocalUserManager::AddMultiplayerConnectionIdChangedHandler(
|
|||
{
|
||||
std::lock_guard<std::mutex> lock(m_subscriptionLock);
|
||||
|
||||
XblFunctionContext context = -1;
|
||||
XblFunctionContext context = 0;
|
||||
if (handler != nullptr)
|
||||
{
|
||||
context = ++m_multiplayerConnectionIdChangedEventHandlerCounter;
|
||||
m_multiplayerConnectionIdChangedEventHandler[m_multiplayerConnectionIdChangedEventHandlerCounter] = std::move(handler);
|
||||
context = m_multiplayerConnectionIdChangedEventHandlerCounter;
|
||||
m_multiplayerConnectionIdChangedEventHandler[m_multiplayerConnectionIdChangedEventHandlerCounter++] = std::move(handler);
|
||||
}
|
||||
|
||||
return context;
|
||||
|
@ -455,11 +448,11 @@ MultiplayerLocalUserManager::AddMultiplayerSubscriptionLostHandler(
|
|||
{
|
||||
std::lock_guard<std::mutex> lock(m_subscriptionLock);
|
||||
|
||||
XblFunctionContext context = -1;
|
||||
XblFunctionContext context = 0;
|
||||
if (handler != nullptr)
|
||||
{
|
||||
context = ++m_multiplayerSubscriptionLostEventHandlerCounter;
|
||||
m_multiplayerSubscriptionLostEventHandler[m_multiplayerSubscriptionLostEventHandlerCounter] = std::move(handler);
|
||||
context = m_multiplayerSubscriptionLostEventHandlerCounter;
|
||||
m_multiplayerSubscriptionLostEventHandler[m_multiplayerSubscriptionLostEventHandlerCounter++] = std::move(handler);
|
||||
}
|
||||
|
||||
return context;
|
||||
|
@ -520,11 +513,11 @@ MultiplayerLocalUserManager::AddRtaResyncHandler(
|
|||
{
|
||||
std::lock_guard<std::mutex> lock(m_subscriptionLock);
|
||||
|
||||
XblFunctionContext context = -1;
|
||||
XblFunctionContext context = 0;
|
||||
if (handler != nullptr)
|
||||
{
|
||||
context = ++m_rtaResyncEventHandlerCounter;
|
||||
m_rtaResyncEventHandler[m_rtaResyncEventHandlerCounter] = std::move(handler);
|
||||
context = m_rtaResyncEventHandlerCounter;
|
||||
m_rtaResyncEventHandler[m_rtaResyncEventHandlerCounter++] = std::move(handler);
|
||||
}
|
||||
|
||||
return context;
|
||||
|
|
|
@ -823,7 +823,7 @@ private:
|
|||
std::mutex m_resyncLock;
|
||||
|
||||
std::mutex m_stateLock;
|
||||
XblFunctionContext m_sessionUpdateEventHandlerCounter{ 0 };
|
||||
XblFunctionContext m_sessionUpdateEventHandlerCounter{ 1 };
|
||||
UnorderedMap<uint32_t, Callback<const std::shared_ptr<XblMultiplayerSession>>> m_sessionUpdateEventHandler;
|
||||
|
||||
uint64_t m_id{ 0 }; // used to ignore calls made before resetting the state via destory()
|
||||
|
@ -1280,7 +1280,7 @@ private:
|
|||
class MultiplayerLocalUserManager : public std::enable_shared_from_this<MultiplayerLocalUserManager>
|
||||
{
|
||||
public:
|
||||
MultiplayerLocalUserManager();
|
||||
MultiplayerLocalUserManager() = default;
|
||||
~MultiplayerLocalUserManager();
|
||||
|
||||
std::shared_ptr<XblContext> GetPrimaryContext();
|
||||
|
@ -1343,10 +1343,10 @@ private:
|
|||
void OnResyncMessageReceived();
|
||||
|
||||
std::mutex m_subscriptionLock;
|
||||
XblFunctionContext m_sessionChangeEventHandlerCounter{};
|
||||
XblFunctionContext m_multiplayerConnectionIdChangedEventHandlerCounter{};
|
||||
XblFunctionContext m_multiplayerSubscriptionLostEventHandlerCounter{};
|
||||
XblFunctionContext m_rtaResyncEventHandlerCounter{};
|
||||
XblFunctionContext m_sessionChangeEventHandlerCounter{ 1 };
|
||||
XblFunctionContext m_multiplayerConnectionIdChangedEventHandlerCounter{ 1 };
|
||||
XblFunctionContext m_multiplayerSubscriptionLostEventHandlerCounter{ 1 };
|
||||
XblFunctionContext m_rtaResyncEventHandlerCounter{ 1 };
|
||||
xsapi_internal_unordered_map<uint32_t, Callback<XblMultiplayerSessionChangeEventArgs>> m_sessionChangeEventHandler;
|
||||
xsapi_internal_unordered_map<uint32_t, Function<void()>> m_multiplayerConnectionIdChangedEventHandler;
|
||||
xsapi_internal_unordered_map<uint32_t, Function<void()>> m_multiplayerSubscriptionLostEventHandler;
|
||||
|
|
|
@ -81,10 +81,10 @@ MultiplayerSessionWriter::AddMultiplayerSessionUpdatedHandler(
|
|||
{
|
||||
std::lock_guard<std::mutex> lock(m_stateLock);
|
||||
|
||||
XblFunctionContext context = -1;
|
||||
XblFunctionContext context = 0;
|
||||
if (handler != nullptr)
|
||||
{
|
||||
context = ++m_sessionUpdateEventHandlerCounter;
|
||||
context = m_sessionUpdateEventHandlerCounter++;
|
||||
m_sessionUpdateEventHandler[m_sessionUpdateEventHandlerCounter] = std::move(handler);
|
||||
}
|
||||
|
||||
|
|
|
@ -296,7 +296,6 @@ public:
|
|||
protected:
|
||||
void OnSubscribe(_In_ const JsonValue& data) noexcept override;
|
||||
void OnEvent(_In_ const JsonValue& data) noexcept override;
|
||||
void OnResync() noexcept override;
|
||||
|
||||
private:
|
||||
String m_connectionId;
|
||||
|
@ -530,7 +529,7 @@ private:
|
|||
// RTA state
|
||||
std::shared_ptr<MultiplayerSubscription> m_subscription;
|
||||
|
||||
XblFunctionContext m_rtaConnectionStateChangedToken{};
|
||||
XblFunctionContext m_rtaConnectionStateChangedToken{ 0 };
|
||||
XblFunctionContext m_nextClientToken{ 1 };
|
||||
Map<XblFunctionContext, SubscriptionLostHandler> m_subscriptionLostHandlers;
|
||||
Map<XblFunctionContext, MultiplayerSubscription::ConnectionIdChangedHandler> m_connectionIdChangedHandlers;
|
||||
|
|
|
@ -131,10 +131,4 @@ void MultiplayerSubscription::OnEvent(
|
|||
}
|
||||
}
|
||||
|
||||
void MultiplayerSubscription::OnResync() noexcept
|
||||
{
|
||||
// Since clients are manually managing sessions, they will need to resync them
|
||||
LOGS_DEBUG << __FUNCTION__ << ": MPSD Session taps may have been missed";
|
||||
}
|
||||
|
||||
NAMESPACE_MICROSOFT_XBOX_SERVICES_MULTIPLAYER_CPP_END
|
|
@ -167,12 +167,6 @@ void NotificationSubscription::OnEvent(
|
|||
}
|
||||
}
|
||||
|
||||
void NotificationSubscription::OnResync() noexcept
|
||||
{
|
||||
// Don't think there is much we can do here - just log an error
|
||||
LOGS_ERROR << __FUNCTION__ << ": Notification service events may have been missed";
|
||||
}
|
||||
|
||||
GameInviteNotificationEventArgs::GameInviteNotificationEventArgs(
|
||||
const GameInviteNotificationEventArgs& other
|
||||
) noexcept
|
||||
|
|
|
@ -91,13 +91,12 @@ public:
|
|||
|
||||
protected:
|
||||
void OnEvent(_In_ const JsonValue& event) noexcept override;
|
||||
void OnResync() noexcept override;
|
||||
|
||||
private:
|
||||
User m_user;
|
||||
TaskQueue m_queue;
|
||||
std::mutex m_mutex;
|
||||
XblFunctionContext m_nextToken{ 0 };
|
||||
XblFunctionContext m_nextToken{ 1 };
|
||||
|
||||
Map<XblFunctionContext, MPSDInviteHandler> m_mpsdInviteHandlers;
|
||||
Map<XblFunctionContext, MultiplayerActivityInviteHandler> m_mpaInviteHandlers;
|
||||
|
|
|
@ -61,29 +61,4 @@ void DevicePresenceChangeSubscription::OnEvent(
|
|||
}
|
||||
}
|
||||
|
||||
void DevicePresenceChangeSubscription::OnResync() noexcept
|
||||
{
|
||||
auto presenceService{ m_presenceService.lock() };
|
||||
if (presenceService)
|
||||
{
|
||||
presenceService->GetPresence(m_xuid, {
|
||||
[
|
||||
sharedThis{ shared_from_this() },
|
||||
presenceService
|
||||
]
|
||||
(Result<std::shared_ptr<XblPresenceRecord>> result)
|
||||
{
|
||||
if (Succeeded(result))
|
||||
{
|
||||
for (const auto& deviceRecord : result.Payload()->DeviceRecords())
|
||||
{
|
||||
presenceService->HandleDevicePresenceChanged(sharedThis->m_xuid, deviceRecord.deviceType, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
NAMESPACE_MICROSOFT_XBOX_SERVICES_PRESENCE_CPP_END
|
|
@ -73,7 +73,6 @@ public:
|
|||
protected:
|
||||
void OnSubscribe(const JsonValue& data) noexcept override;
|
||||
void OnEvent(const JsonValue& event) noexcept override;
|
||||
void OnResync() noexcept override;
|
||||
|
||||
private:
|
||||
uint64_t m_xuid;
|
||||
|
@ -92,7 +91,6 @@ public:
|
|||
protected:
|
||||
void OnSubscribe(const JsonValue& data) noexcept override;
|
||||
void OnEvent(_In_ const JsonValue& event) noexcept override;
|
||||
void OnResync() noexcept override;
|
||||
|
||||
private:
|
||||
uint64_t m_xuid;
|
||||
|
@ -139,6 +137,7 @@ class PresenceService : public std::enable_shared_from_this<PresenceService>
|
|||
public:
|
||||
PresenceService(
|
||||
_In_ User&& user,
|
||||
_In_ const TaskQueue& backgroundQueue,
|
||||
_In_ std::shared_ptr<xbox::services::XboxLiveContextSettings> xboxLiveContextSettings,
|
||||
_In_ std::shared_ptr<xbox::services::real_time_activity::RealTimeActivityManager> rtaManager
|
||||
) noexcept;
|
||||
|
@ -196,6 +195,7 @@ public:
|
|||
_In_ AsyncContext<Result<Vector<std::shared_ptr<XblPresenceRecord>>>> async
|
||||
) const noexcept;
|
||||
|
||||
private:
|
||||
void HandleDevicePresenceChanged(
|
||||
_In_ uint64_t xuid,
|
||||
_In_ XblPresenceDeviceType deviceType,
|
||||
|
@ -208,15 +208,18 @@ public:
|
|||
_In_ XblPresenceTitleState state
|
||||
) const noexcept;
|
||||
|
||||
private:
|
||||
void HandleRTAResync();
|
||||
|
||||
static Result<Vector<std::shared_ptr<XblPresenceRecord>>> DeserializeBatchPresenceRecordsResponse(
|
||||
const JsonValue& json
|
||||
) noexcept;
|
||||
|
||||
User m_user;
|
||||
TaskQueue m_queue;
|
||||
std::shared_ptr<xbox::services::XboxLiveContextSettings> m_xboxLiveContextSettings;
|
||||
std::shared_ptr<real_time_activity::RealTimeActivityManager> m_rtaManager;
|
||||
|
||||
XblFunctionContext m_resyncHandlerToken{ 0 };
|
||||
Map<XblFunctionContext, DevicePresenceChangedHandler> m_devicePresenceChangedHandlers;
|
||||
Map<XblFunctionContext, TitlePresenceChangedHandler> m_titlePresenceChangedHandlers;
|
||||
XblFunctionContext m_nextHandlerToken{ 1 };
|
||||
|
@ -233,6 +236,9 @@ private:
|
|||
uint32_t const m_titleId;
|
||||
|
||||
mutable std::mutex m_mutex;
|
||||
|
||||
friend class DevicePresenceChangeSubscription;
|
||||
friend class TitlePresenceChangeSubscription;
|
||||
};
|
||||
|
||||
NAMESPACE_MICROSOFT_XBOX_SERVICES_PRESENCE_CPP_END
|
||||
|
|
|
@ -13,10 +13,12 @@ NAMESPACE_MICROSOFT_XBOX_SERVICES_PRESENCE_CPP_BEGIN
|
|||
|
||||
PresenceService::PresenceService(
|
||||
_In_ User&& user,
|
||||
_In_ const TaskQueue& queue,
|
||||
_In_ std::shared_ptr<xbox::services::XboxLiveContextSettings> xboxLiveContextSettings,
|
||||
_In_ std::shared_ptr<xbox::services::real_time_activity::RealTimeActivityManager> rtaManager
|
||||
) noexcept
|
||||
: m_user{ std::move(user) },
|
||||
m_queue{ queue.DeriveWorkerQueue() },
|
||||
m_xboxLiveContextSettings{ xboxLiveContextSettings },
|
||||
m_rtaManager{ rtaManager },
|
||||
m_titleId{ AppConfig::Instance()->TitleId() }
|
||||
|
@ -27,6 +29,11 @@ PresenceService::PresenceService(
|
|||
|
||||
PresenceService::~PresenceService() noexcept
|
||||
{
|
||||
if (m_resyncHandlerToken)
|
||||
{
|
||||
m_rtaManager->RemoveResyncHandler(m_user, m_resyncHandlerToken);
|
||||
}
|
||||
|
||||
for (auto& xuidPair : m_trackedXuids)
|
||||
{
|
||||
if (!m_devicePresenceChangedHandlers.empty())
|
||||
|
@ -56,6 +63,7 @@ XblFunctionContext PresenceService::AddTitlePresenceChangedHandler(
|
|||
{
|
||||
for (auto& titlePair : xuidPair.second.titlePresenceChangedSubscriptions)
|
||||
{
|
||||
titlePair.second = MakeShared<TitlePresenceChangeSubscription>(xuidPair.first, titlePair.first, shared_from_this());
|
||||
m_rtaManager->AddSubscription(m_user, titlePair.second);
|
||||
}
|
||||
}
|
||||
|
@ -79,6 +87,7 @@ void PresenceService::RemoveTitlePresenceChangedHandler(
|
|||
for (auto& titlePair : xuidPair.second.titlePresenceChangedSubscriptions)
|
||||
{
|
||||
m_rtaManager->RemoveSubscription(m_user, titlePair.second);
|
||||
titlePair.second.reset();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -95,6 +104,7 @@ XblFunctionContext PresenceService::AddDevicePresenceChangedHandler(
|
|||
{
|
||||
for (auto& pair : m_trackedXuids)
|
||||
{
|
||||
pair.second.devicePresenceChangedSub = MakeShared<DevicePresenceChangeSubscription>(pair.first, shared_from_this());
|
||||
m_rtaManager->AddSubscription(m_user, pair.second.devicePresenceChangedSub);
|
||||
}
|
||||
}
|
||||
|
@ -115,6 +125,7 @@ void PresenceService::RemoveDevicePresenceChangedHandler(
|
|||
for (auto& pair : m_trackedXuids)
|
||||
{
|
||||
m_rtaManager->RemoveSubscription(m_user, pair.second.devicePresenceChangedSub);
|
||||
pair.second.devicePresenceChangedSub.reset();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -125,6 +136,18 @@ HRESULT PresenceService::TrackUsers(
|
|||
{
|
||||
std::lock_guard<std::mutex> lock{ m_mutex };
|
||||
|
||||
if (!m_resyncHandlerToken)
|
||||
{
|
||||
m_resyncHandlerToken = m_rtaManager->AddResyncHandler(m_user, [weakThis = std::weak_ptr<PresenceService>{ shared_from_this() } ]
|
||||
{
|
||||
auto sharedThis = weakThis.lock();
|
||||
if (sharedThis)
|
||||
{
|
||||
sharedThis->HandleRTAResync();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
for (auto& xuid : xuids)
|
||||
{
|
||||
// If we don't have them already, create RTA subscriptions for the new user
|
||||
|
@ -133,23 +156,21 @@ HRESULT PresenceService::TrackUsers(
|
|||
{
|
||||
TrackedXuidSubscriptions newSubs{};
|
||||
newSubs.refCount = 1;
|
||||
newSubs.devicePresenceChangedSub = MakeShared<DevicePresenceChangeSubscription>(xuid, shared_from_this());
|
||||
for (auto& pair : m_trackedTitles)
|
||||
{
|
||||
auto& title{ pair.first };
|
||||
newSubs.titlePresenceChangedSubscriptions[title] = MakeShared<TitlePresenceChangeSubscription>(xuid, title, shared_from_this());
|
||||
}
|
||||
|
||||
// If there are existing handlers, add the new subs to RTA managers
|
||||
if (!m_devicePresenceChangedHandlers.empty())
|
||||
{
|
||||
newSubs.devicePresenceChangedSub = MakeShared<DevicePresenceChangeSubscription>(xuid, shared_from_this());
|
||||
RETURN_HR_IF_FAILED(m_rtaManager->AddSubscription(m_user, newSubs.devicePresenceChangedSub));
|
||||
}
|
||||
|
||||
if (!m_titlePresenceChangedHandlers.empty())
|
||||
{
|
||||
for (auto& pair : newSubs.titlePresenceChangedSubscriptions)
|
||||
for (auto& pair : m_trackedTitles)
|
||||
{
|
||||
RETURN_HR_IF_FAILED(m_rtaManager->AddSubscription(m_user, pair.second));
|
||||
auto sub{ MakeShared<TitlePresenceChangeSubscription>(xuid, pair.first, shared_from_this()) };
|
||||
newSubs.titlePresenceChangedSubscriptions[pair.first] = sub;
|
||||
RETURN_HR_IF_FAILED(m_rtaManager->AddSubscription(m_user, sub));
|
||||
}
|
||||
}
|
||||
m_trackedXuids[xuid] = std::move(newSubs);
|
||||
|
@ -207,12 +228,11 @@ HRESULT PresenceService::TrackAdditionalTitles(
|
|||
// If its a new title, create the appropriate subscriptions
|
||||
for (auto& pair : m_trackedXuids)
|
||||
{
|
||||
auto sub{ MakeShared<TitlePresenceChangeSubscription>(pair.first, titleId, shared_from_this()) };
|
||||
pair.second.titlePresenceChangedSubscriptions[titleId] = sub;
|
||||
|
||||
// Add new subs to RTA manager if we have handlers
|
||||
if (!m_titlePresenceChangedHandlers.empty())
|
||||
{
|
||||
auto sub{ MakeShared<TitlePresenceChangeSubscription>(pair.first, titleId, shared_from_this()) };
|
||||
pair.second.titlePresenceChangedSubscriptions[titleId] = sub;
|
||||
RETURN_HR_IF_FAILED(m_rtaManager->AddSubscription(m_user, sub));
|
||||
}
|
||||
}
|
||||
|
@ -420,6 +440,97 @@ void PresenceService::HandleTitlePresenceChanged(
|
|||
}
|
||||
}
|
||||
|
||||
void PresenceService::HandleRTAResync()
|
||||
{
|
||||
std::unique_lock<std::mutex> lock{ m_mutex };
|
||||
|
||||
LOGS_DEBUG << "Resyncing " << m_trackedXuids.size() << " Presence Subscriptions";
|
||||
|
||||
auto weakThis = std::weak_ptr<PresenceService>{ shared_from_this() };
|
||||
auto handleGetPresenceResult = [weakThis, this](Result<Vector<std::shared_ptr<XblPresenceRecord>>> result)
|
||||
{
|
||||
auto sharedThis = weakThis.lock();
|
||||
if (!sharedThis)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
std::unique_lock<std::mutex> lock{ m_mutex };
|
||||
|
||||
if(Succeeded(result))
|
||||
{
|
||||
Vector<uint32_t> trackedTitles;
|
||||
for (auto& pair : m_trackedTitles)
|
||||
{
|
||||
trackedTitles.push_back(pair.first);
|
||||
}
|
||||
auto titlePresenceChangedHandlers{ m_titlePresenceChangedHandlers };
|
||||
auto devicePresenceChangedHandlers{ m_devicePresenceChangedHandlers };
|
||||
|
||||
lock.unlock();
|
||||
|
||||
for (auto& presenceRecord : result.Payload())
|
||||
{
|
||||
// Invoke title presence changed subs for tracked titles
|
||||
for (auto titleId : trackedTitles)
|
||||
{
|
||||
bool isPlaying = presenceRecord->IsUserPlayingTitle(titleId);
|
||||
for (auto& pair : titlePresenceChangedHandlers)
|
||||
{
|
||||
pair.second(presenceRecord->Xuid(), titleId, isPlaying ? XblPresenceTitleState::Started : XblPresenceTitleState::Ended);
|
||||
}
|
||||
}
|
||||
|
||||
// Invoke device presence changed handlers
|
||||
for (const auto& deviceRecord : presenceRecord->DeviceRecords())
|
||||
{
|
||||
for (auto& pair : devicePresenceChangedHandlers)
|
||||
{
|
||||
pair.second(presenceRecord->Xuid(), deviceRecord.deviceType, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
Vector<uint64_t> trackedXuids;
|
||||
for (auto& pair : m_trackedXuids)
|
||||
{
|
||||
trackedXuids.push_back(pair.first);
|
||||
}
|
||||
|
||||
if (trackedXuids.empty())
|
||||
{
|
||||
// nothing to resync
|
||||
return;
|
||||
}
|
||||
else if (trackedXuids.size() > 1)
|
||||
{
|
||||
// Make batch query
|
||||
GetBatchPresence(
|
||||
UserBatchRequest{ trackedXuids.data(), trackedXuids.size(), nullptr },
|
||||
AsyncContext<Result<Vector<std::shared_ptr<XblPresenceRecord>>>>{ m_queue, std::move(handleGetPresenceResult) }
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
GetPresence(
|
||||
trackedXuids.front(),
|
||||
AsyncContext<Result<std::shared_ptr<XblPresenceRecord>>>{m_queue, [batchResultHandler = std::move(handleGetPresenceResult)](Result<std::shared_ptr<XblPresenceRecord>> result)
|
||||
{
|
||||
if (Succeeded(result))
|
||||
{
|
||||
batchResultHandler(Vector<std::shared_ptr<XblPresenceRecord>>{ result.ExtractPayload() });
|
||||
}
|
||||
else
|
||||
{
|
||||
batchResultHandler(result.Hresult());
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Result<Vector<std::shared_ptr<XblPresenceRecord>>> PresenceService::DeserializeBatchPresenceRecordsResponse(
|
||||
const JsonValue& json
|
||||
) noexcept
|
||||
|
|
|
@ -59,30 +59,4 @@ void TitlePresenceChangeSubscription::OnEvent(
|
|||
}
|
||||
}
|
||||
|
||||
void TitlePresenceChangeSubscription::OnResync() noexcept
|
||||
{
|
||||
auto presenceService{ m_presenceService.lock() };
|
||||
if (presenceService)
|
||||
{
|
||||
presenceService->GetPresence(m_xuid, {
|
||||
[
|
||||
sharedThis{ shared_from_this() },
|
||||
presenceService
|
||||
]
|
||||
(Result<std::shared_ptr<XblPresenceRecord>> result)
|
||||
{
|
||||
if (Succeeded(result))
|
||||
{
|
||||
bool isPlaying{ result.Payload()->IsUserPlayingTitle(sharedThis->m_titleId) };
|
||||
presenceService->HandleTitlePresenceChanged(
|
||||
sharedThis->m_xuid,
|
||||
sharedThis->m_titleId,
|
||||
isPlaying ? XblPresenceTitleState::Started : XblPresenceTitleState::Ended
|
||||
);
|
||||
}
|
||||
}}
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
NAMESPACE_MICROSOFT_XBOX_SERVICES_PRESENCE_CPP_END
|
|
@ -92,13 +92,6 @@ Connection::~Connection() noexcept
|
|||
LOGS_DEBUG << __FUNCTION__ << "[" << this << "]";
|
||||
|
||||
m_queue.Terminate(false);
|
||||
#if HC_PLATFORM == HC_PLATFORM_GDK
|
||||
auto state{ GlobalState::Get() };
|
||||
if (state)
|
||||
{
|
||||
state->RemoveAppChangeNotificationHandler(m_registrationID);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
Result<std::shared_ptr<Connection>> Connection::Make(
|
||||
|
@ -120,31 +113,8 @@ Result<std::shared_ptr<Connection>> Connection::Make(
|
|||
Allocator<Connection>()
|
||||
);
|
||||
|
||||
auto hr = rtaConnection->InitializeWebsocket();
|
||||
if (FAILED(hr))
|
||||
{
|
||||
return hr;
|
||||
}
|
||||
|
||||
rtaConnection->m_stateChangedHandler(rtaConnection->m_state);
|
||||
rtaConnection->m_websocket->Connect(s_rtaUri, s_rtaSubprotocol);
|
||||
|
||||
#if HC_PLATFORM == HC_PLATFORM_GDK
|
||||
auto state{ GlobalState::Get() };
|
||||
if (state)
|
||||
{
|
||||
rtaConnection->m_registrationID = state->AddAppChangeNotificationHandler(
|
||||
[weakThis = std::weak_ptr<Connection>{ rtaConnection }](bool isSuspended)
|
||||
{
|
||||
std::shared_ptr<Connection> connection = weakThis.lock();
|
||||
if (connection)
|
||||
{
|
||||
connection->AppStateChangeNotificationReceived(isSuspended);
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
#endif
|
||||
rtaConnection->ScheduleConnect();
|
||||
|
||||
return rtaConnection;
|
||||
}
|
||||
|
@ -152,11 +122,13 @@ Result<std::shared_ptr<Connection>> Connection::Make(
|
|||
void Connection::Cleanup()
|
||||
{
|
||||
std::unique_lock<std::mutex> lock{ m_lock };
|
||||
assert(m_websocket);
|
||||
|
||||
// Clear our disconnect handler to disable auto-reconnect logic
|
||||
m_websocket->SetDisconnectHandler(nullptr);
|
||||
m_websocket->Disconnect();
|
||||
if (m_websocket)
|
||||
{
|
||||
// Clear our disconnect handler to disable auto-reconnect logic
|
||||
m_websocket->SetDisconnectHandler(nullptr);
|
||||
m_websocket->Disconnect();
|
||||
}
|
||||
|
||||
List<AsyncContext<Result<void>>> pendingAsyncContexts;
|
||||
for (auto& pair : m_subscribeAsyncContexts)
|
||||
|
@ -183,21 +155,6 @@ void Connection::Cleanup()
|
|||
);
|
||||
}
|
||||
|
||||
#if HC_PLATFORM == HC_PLATFORM_GDK
|
||||
void Connection::AppStateChangeNotificationReceived(
|
||||
bool isSuspended
|
||||
) noexcept
|
||||
{
|
||||
std::unique_lock<std::mutex> lock{ m_lock };
|
||||
this->m_isSuspended = isSuspended;
|
||||
|
||||
if (!this->m_isSuspended && this->m_state == XblRealTimeActivityConnectionState::Disconnected)
|
||||
{
|
||||
Reconnect(std::move(lock));
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
HRESULT Connection::AddSubscription(
|
||||
std::shared_ptr<Subscription> sub,
|
||||
AsyncContext<Result<void>> async
|
||||
|
@ -214,7 +171,7 @@ HRESULT Connection::AddSubscription(
|
|||
|
||||
m_subs[sub->m_state->clientId] = sub;
|
||||
|
||||
LOGS_DEBUG << __FUNCTION__ << ": [" << sub->m_state->clientId << "] ServiceStatus=" << EnumName(sub->m_state->serviceStatus);
|
||||
LOGS_DEBUG << __FUNCTION__ << ": [" << sub->m_state->clientId << "] Uri=" << sub->m_resourceUri;
|
||||
|
||||
switch (sub->m_state->serviceStatus)
|
||||
{
|
||||
|
@ -225,7 +182,7 @@ HRESULT Connection::AddSubscription(
|
|||
// If our connection is active, immediately register with RTA service
|
||||
if (m_state == XblRealTimeActivityConnectionState::Connected)
|
||||
{
|
||||
return SendSubscribeMessage(sub);
|
||||
return SendSubscribeMessage(sub, std::move(lock));
|
||||
}
|
||||
return S_OK;
|
||||
}
|
||||
|
@ -273,7 +230,7 @@ HRESULT Connection::RemoveSubscription(
|
|||
assert(iter != m_subs.end());
|
||||
(void)(iter); // suppress unused warning
|
||||
|
||||
LOGS_DEBUG << __FUNCTION__ << ": [" << sub->m_state->clientId << "] ServiceStatus=" << EnumName(sub->m_state->serviceStatus);
|
||||
LOGS_DEBUG << __FUNCTION__ << ": [" << sub->m_state->clientId << "] Uri=" << sub->m_resourceUri << ", ServiceStatus=" << EnumName(sub->m_state->serviceStatus);
|
||||
|
||||
switch (sub->m_state->serviceStatus)
|
||||
{
|
||||
|
@ -292,7 +249,7 @@ HRESULT Connection::RemoveSubscription(
|
|||
{
|
||||
// Unregister subscription from RTA service
|
||||
m_unsubscribeAsyncContexts[sub->m_state->clientId] = std::move(async);
|
||||
return SendUnsubscribeMessage(sub);
|
||||
return SendUnsubscribeMessage(sub, std::move(lock));
|
||||
}
|
||||
case Subscription::State::ServiceStatus::PendingSubscribe:
|
||||
{
|
||||
|
@ -333,9 +290,7 @@ size_t Connection::SubscriptionCount() const noexcept
|
|||
return m_subs.size();
|
||||
}
|
||||
|
||||
HRESULT Connection::SendSubscribeMessage(
|
||||
std::shared_ptr<Subscription> sub
|
||||
) const noexcept
|
||||
JsonDocument Connection::AssembleSubscribeMessage(std::shared_ptr<Subscription> sub) const noexcept
|
||||
{
|
||||
// Payload format [<API_ID>, <SEQUENCE_N>, “<RESOURCE_URI>”]
|
||||
|
||||
|
@ -348,6 +303,23 @@ HRESULT Connection::SendSubscribeMessage(
|
|||
request.PushBack(sub->m_state->clientId, a);
|
||||
request.PushBack(JsonValue{ sub->m_resourceUri.data(), a }, a);
|
||||
|
||||
return request;
|
||||
}
|
||||
|
||||
HRESULT Connection::SendSubscribeMessage(
|
||||
std::shared_ptr<Subscription> sub,
|
||||
std::unique_lock<std::mutex>&& lock
|
||||
) const noexcept
|
||||
{
|
||||
JsonDocument request = AssembleSubscribeMessage(sub);
|
||||
|
||||
lock.unlock();
|
||||
|
||||
return SendAssembledMessage(request);
|
||||
}
|
||||
|
||||
HRESULT Connection::SendAssembledMessage(_In_ const JsonValue& request) const noexcept
|
||||
{
|
||||
String requestString{ JsonUtils::SerializeJson(request) };
|
||||
LOGS_DEBUG << __FUNCTION__ << "[" << this << "]: " << requestString;
|
||||
|
||||
|
@ -355,7 +327,8 @@ HRESULT Connection::SendSubscribeMessage(
|
|||
}
|
||||
|
||||
HRESULT Connection::SendUnsubscribeMessage(
|
||||
std::shared_ptr<Subscription> sub
|
||||
std::shared_ptr<Subscription> sub,
|
||||
std::unique_lock<std::mutex>&& lock
|
||||
) const noexcept
|
||||
{
|
||||
// Payload format [<API_ID>, <SEQUENCE_N>, <SUB_ID>]
|
||||
|
@ -369,6 +342,8 @@ HRESULT Connection::SendUnsubscribeMessage(
|
|||
request.PushBack(sub->m_state->clientId, a);
|
||||
request.PushBack(sub->m_state->serviceId, a);
|
||||
|
||||
lock.unlock();
|
||||
|
||||
String requestString{ JsonUtils::SerializeJson(request) };
|
||||
LOGS_DEBUG << __FUNCTION__ << "[" << this << "]: " << requestString;
|
||||
|
||||
|
@ -409,6 +384,9 @@ void Connection::SubscribeResponseHandler(_In_ const JsonValue& message) noexcep
|
|||
m_activeSubs[sub->m_state->serviceId][sub->m_state->clientId] = sub;
|
||||
}
|
||||
|
||||
AsyncContext<Result<void>> asyncContext{ std::move(m_subscribeAsyncContexts[sub->m_state->clientId]) };
|
||||
m_subscribeAsyncContexts.erase(sub->m_state->clientId);
|
||||
|
||||
switch (sub->m_state->serviceStatus)
|
||||
{
|
||||
case Subscription::State::ServiceStatus::Subscribing:
|
||||
|
@ -420,7 +398,7 @@ void Connection::SubscribeResponseHandler(_In_ const JsonValue& message) noexcep
|
|||
{
|
||||
// Client has removed the subscription while subscribe handshake was happening,
|
||||
// so immediately begin unsubscribing.
|
||||
SendUnsubscribeMessage(sub);
|
||||
SendUnsubscribeMessage(sub, std::move(lock));
|
||||
break;
|
||||
}
|
||||
default:
|
||||
|
@ -431,10 +409,10 @@ void Connection::SubscribeResponseHandler(_In_ const JsonValue& message) noexcep
|
|||
}
|
||||
}
|
||||
|
||||
AsyncContext<Result<void>> asyncContext{ std::move(m_subscribeAsyncContexts[sub->m_state->clientId]) };
|
||||
m_subscribeAsyncContexts.erase(sub->m_state->clientId);
|
||||
|
||||
lock.unlock();
|
||||
if (lock)
|
||||
{
|
||||
lock.unlock();
|
||||
}
|
||||
|
||||
asyncContext.Complete(ConvertRTAErrorCode(errorCode));
|
||||
sub->OnSubscribe(data);
|
||||
|
@ -526,6 +504,9 @@ void Connection::UnsubscribeResponseHandler(_In_ const JsonValue& message) noexc
|
|||
|
||||
LOGS_DEBUG << __FUNCTION__ << ": [" << sub->m_state->clientId <<"] ServiceStatus=" << EnumName(sub->m_state->serviceStatus);
|
||||
|
||||
AsyncContext<Result<void>> asyncContext{ std::move(m_unsubscribeAsyncContexts[clientId]) };
|
||||
m_unsubscribeAsyncContexts.erase(clientId);
|
||||
|
||||
switch (sub->m_state->serviceStatus)
|
||||
{
|
||||
case Subscription::State::ServiceStatus::Unsubscribing:
|
||||
|
@ -539,7 +520,7 @@ void Connection::UnsubscribeResponseHandler(_In_ const JsonValue& message) noexc
|
|||
{
|
||||
// Client has re-added the subscription while unsubscibe handshake was happening,
|
||||
// so immediately begin subscribing.
|
||||
SendSubscribeMessage(sub);
|
||||
SendSubscribeMessage(sub, std::move(lock));
|
||||
break;
|
||||
}
|
||||
default:
|
||||
|
@ -549,10 +530,10 @@ void Connection::UnsubscribeResponseHandler(_In_ const JsonValue& message) noexc
|
|||
}
|
||||
}
|
||||
|
||||
AsyncContext<Result<void>> asyncContext{ std::move(m_unsubscribeAsyncContexts[clientId]) };
|
||||
m_unsubscribeAsyncContexts.erase(clientId);
|
||||
|
||||
lock.unlock();
|
||||
if (lock)
|
||||
{
|
||||
lock.unlock();
|
||||
}
|
||||
|
||||
asyncContext.Complete(ConvertRTAErrorCode(errorCode));
|
||||
}
|
||||
|
@ -578,27 +559,6 @@ void Connection::EventHandler(_In_ const JsonValue& message) const noexcept
|
|||
}
|
||||
}
|
||||
|
||||
void Connection::ResyncHandler() const noexcept
|
||||
{
|
||||
List<std::shared_ptr<Subscription>> subs;
|
||||
|
||||
std::unique_lock<std::mutex> lock{ m_lock };
|
||||
for (auto& pair : m_subs)
|
||||
{
|
||||
subs.push_back(pair.second);
|
||||
}
|
||||
lock.unlock();
|
||||
|
||||
// In some cases, subscriptions have enough context to handle a resync internally. In other cases,
|
||||
// there is some client context required, so we also will raise the resync to the client.
|
||||
for (auto& sub : subs)
|
||||
{
|
||||
sub->OnResync();
|
||||
}
|
||||
|
||||
m_resyncHandler();
|
||||
}
|
||||
|
||||
void Connection::ConnectCompleteHandler(WebsocketResult result) noexcept
|
||||
{
|
||||
LOGS_DEBUG << __FUNCTION__ << ": WebsocketResult [" << result.hr << "," << result.platformErrorCode << "]";
|
||||
|
@ -609,12 +569,15 @@ void Connection::ConnectCompleteHandler(WebsocketResult result) noexcept
|
|||
{
|
||||
m_state = XblRealTimeActivityConnectionState::Connected;
|
||||
m_connectTime = std::chrono::system_clock::now();
|
||||
m_connectAttempt = 0;
|
||||
|
||||
assert(m_activeSubs.empty());
|
||||
|
||||
List<JsonDocument> subMessages{};
|
||||
for (auto& pair : m_subs)
|
||||
{
|
||||
assert(pair.second->m_state->serviceStatus == Subscription::State::ServiceStatus::Inactive);
|
||||
SendSubscribeMessage(pair.second);
|
||||
subMessages.push_back(AssembleSubscribeMessage(pair.second));
|
||||
}
|
||||
|
||||
// RTA v2 has a lifetime of 2 hours. After 2 hours RTA service will disconnect the title. On some platforms
|
||||
|
@ -638,62 +601,64 @@ void Connection::ConnectCompleteHandler(WebsocketResult result) noexcept
|
|||
},
|
||||
CONNECTION_TIMEOUT_MS
|
||||
);
|
||||
|
||||
lock.unlock();
|
||||
|
||||
for (auto& request : subMessages)
|
||||
{
|
||||
SendAssembledMessage(request);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
m_state = XblRealTimeActivityConnectionState::Disconnected;
|
||||
|
||||
//libHttpClient websocket does not support connecting
|
||||
// the same websocket handle multiple times, so create a new one.
|
||||
auto hr = InitializeWebsocket();
|
||||
if (FAILED(hr))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Backoff and attempt to connect again.
|
||||
m_connectAttempt++;
|
||||
uint64_t backoff = __min(std::pow(m_connectAttempt, 2), 60) * 1000;
|
||||
|
||||
m_queue.RunWork([weakThis = std::weak_ptr<Connection>{ shared_from_this() }]
|
||||
{
|
||||
auto sharedThis{ weakThis.lock() };
|
||||
if (sharedThis)
|
||||
{
|
||||
{
|
||||
std::unique_lock<std::mutex> lock{ sharedThis->m_lock };
|
||||
sharedThis->m_state = XblRealTimeActivityConnectionState::Connecting;
|
||||
}
|
||||
sharedThis->m_stateChangedHandler(sharedThis->m_state);
|
||||
sharedThis->m_websocket->Connect(s_rtaUri, s_rtaSubprotocol);
|
||||
}
|
||||
},
|
||||
backoff
|
||||
);
|
||||
ScheduleConnect();
|
||||
}
|
||||
|
||||
lock.unlock();
|
||||
m_stateChangedHandler(m_state);
|
||||
}
|
||||
|
||||
void Connection::Reconnect(std::unique_lock<std::mutex>&& lock) noexcept
|
||||
{
|
||||
// Immediately attempt to reconnect. libHttpClient websocket does not support connecting
|
||||
// the same websocket handle multiple times, so create a new one.
|
||||
auto hr = InitializeWebsocket();
|
||||
if (FAILED(hr))
|
||||
if (lock)
|
||||
{
|
||||
return;
|
||||
lock.unlock();
|
||||
}
|
||||
|
||||
m_connectAttempt = 0;
|
||||
m_state = XblRealTimeActivityConnectionState::Connecting;
|
||||
lock.unlock();
|
||||
|
||||
m_stateChangedHandler(m_state);
|
||||
m_websocket->Connect(s_rtaUri, s_rtaSubprotocol);
|
||||
}
|
||||
|
||||
void Connection::ScheduleConnect() noexcept
|
||||
{
|
||||
LOGS_DEBUG << __FUNCTION__;
|
||||
|
||||
// Backoff and attempt to connect again.
|
||||
uint64_t backoff = __min(std::pow(m_connectAttempt++, 2), 60) * 1000;
|
||||
|
||||
m_queue.RunWork([weakThis = std::weak_ptr<Connection>{ shared_from_this() }, this]
|
||||
{
|
||||
auto sharedThis{ weakThis.lock() };
|
||||
if (sharedThis)
|
||||
{
|
||||
std::unique_lock<std::mutex> lock{ m_lock };
|
||||
|
||||
LOGS_DEBUG << "RTA::Connection Initializing WebSocket and attempting connect. Subcount=" << m_subs.size();
|
||||
|
||||
auto hr = InitializeWebsocket();
|
||||
if (FAILED(hr))
|
||||
{
|
||||
ScheduleConnect();
|
||||
}
|
||||
else
|
||||
{
|
||||
m_state = XblRealTimeActivityConnectionState::Connecting;
|
||||
lock.unlock();
|
||||
|
||||
sharedThis->m_stateChangedHandler(sharedThis->m_state);
|
||||
sharedThis->m_websocket->Connect(s_rtaUri, s_rtaSubprotocol); // Do synchronous failures need to be handled here?
|
||||
}
|
||||
}
|
||||
},
|
||||
backoff
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
void Connection::DisconnectHandler(WebSocketCloseStatus status) noexcept
|
||||
{
|
||||
LOGS_DEBUG << __FUNCTION__ << ": WebocketCloseStatus [" << static_cast<uint32_t>(status) << "]";
|
||||
|
@ -759,22 +724,8 @@ void Connection::DisconnectHandler(WebSocketCloseStatus status) noexcept
|
|||
}
|
||||
|
||||
m_state = XblRealTimeActivityConnectionState::Disconnected;
|
||||
|
||||
// On GDK, if the cause of the disconnection is that the title went into suspended mode
|
||||
// Don't reconnect right away and wait for the title to exit suspended mode first.
|
||||
// Otherwise, attempt to reconnect.
|
||||
#if HC_PLATFORM == HC_PLATFORM_GDK
|
||||
if (!this->m_isSuspended) {
|
||||
#endif
|
||||
Reconnect(std::move(lock));
|
||||
|
||||
#if HC_PLATFORM == HC_PLATFORM_GDK
|
||||
}
|
||||
else
|
||||
{
|
||||
lock.unlock();
|
||||
}
|
||||
#endif
|
||||
ScheduleConnect();
|
||||
lock.unlock();
|
||||
|
||||
for (auto& async : unsubscribeAsyncContexts)
|
||||
{
|
||||
|
@ -818,7 +769,7 @@ void Connection::WebsocketMessageReceived(const String& message) noexcept
|
|||
}
|
||||
case MessageType::Resync:
|
||||
{
|
||||
ResyncHandler();
|
||||
m_resyncHandler();
|
||||
break;
|
||||
}
|
||||
default:
|
||||
|
@ -831,6 +782,8 @@ void Connection::WebsocketMessageReceived(const String& message) noexcept
|
|||
|
||||
HRESULT Connection::InitializeWebsocket() noexcept
|
||||
{
|
||||
LOGS_DEBUG << __FUNCTION__;
|
||||
|
||||
if (m_websocket)
|
||||
{
|
||||
m_websocket->SetConnectCompleteHandler([](WebsocketResult) {});
|
||||
|
|
|
@ -49,26 +49,31 @@ private:
|
|||
ResyncHandler resyncHandler
|
||||
) noexcept;
|
||||
|
||||
JsonDocument AssembleSubscribeMessage(std::shared_ptr<Subscription> sub) const noexcept;
|
||||
|
||||
// RTA protocol implementation
|
||||
HRESULT SendSubscribeMessage(
|
||||
std::shared_ptr<Subscription> subscription
|
||||
std::shared_ptr<Subscription> subscription,
|
||||
std::unique_lock<std::mutex>&& lock
|
||||
) const noexcept;
|
||||
|
||||
HRESULT SendUnsubscribeMessage(
|
||||
std::shared_ptr<Subscription> subscription
|
||||
std::shared_ptr<Subscription> subscription,
|
||||
std::unique_lock<std::mutex>&& lock
|
||||
) const noexcept;
|
||||
|
||||
HRESULT SendAssembledMessage(_In_ const JsonValue& message) const noexcept;
|
||||
|
||||
void SubscribeResponseHandler(_In_ const JsonValue& message) noexcept;
|
||||
void UnsubscribeResponseHandler(_In_ const JsonValue& message) noexcept;
|
||||
void EventHandler(_In_ const JsonValue& message) const noexcept;
|
||||
void ResyncHandler() const noexcept;
|
||||
|
||||
// IWebsocket handlers
|
||||
void ConnectCompleteHandler(WebsocketResult result) noexcept;
|
||||
void DisconnectHandler(WebSocketCloseStatus result) noexcept;
|
||||
void WebsocketMessageReceived(const String& message) noexcept;
|
||||
HRESULT InitializeWebsocket() noexcept;
|
||||
void Reconnect(std::unique_lock<std::mutex>&& lock) noexcept;
|
||||
void ScheduleConnect() noexcept;
|
||||
|
||||
User m_user;
|
||||
TaskQueue const m_queue;
|
||||
|
@ -86,15 +91,6 @@ private:
|
|||
|
||||
uint32_t m_nextSubId{ 1 };
|
||||
|
||||
#if HC_PLATFORM == HC_PLATFORM_GDK
|
||||
// This flag is used to indicate whether the title is in the middle of being suspended
|
||||
// In that case, the connection won't attempt to reconnect until the title is out of the 'suspended' state
|
||||
bool m_isSuspended = false;
|
||||
|
||||
// Holds the registration ID for receiving App State Notifications (aka Quick Resume)
|
||||
XblFunctionContext m_registrationID;
|
||||
#endif
|
||||
|
||||
mutable std::mutex m_lock;
|
||||
};
|
||||
|
||||
|
|
|
@ -189,6 +189,21 @@ void RealTimeActivityManager::Deactivate(
|
|||
}
|
||||
}
|
||||
|
||||
void RealTimeActivityManager::TriggerResync() const noexcept
|
||||
{
|
||||
std::unique_lock<std::recursive_mutex> lock{ m_lock };
|
||||
auto handlers{ m_resyncHandlers };
|
||||
lock.unlock();
|
||||
|
||||
for (auto& userPair : handlers)
|
||||
{
|
||||
for (auto& handlerPair : userPair.second)
|
||||
{
|
||||
handlerPair.second();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Result<std::shared_ptr<Connection>> RealTimeActivityManager::GetConnection(
|
||||
const User& user
|
||||
) noexcept
|
||||
|
@ -261,4 +276,17 @@ Result<std::shared_ptr<Connection>> RealTimeActivityManager::GetConnection(
|
|||
return connection;
|
||||
}
|
||||
|
||||
NAMESPACE_MICROSOFT_XBOX_SERVICES_RTA_CPP_END
|
||||
NAMESPACE_MICROSOFT_XBOX_SERVICES_RTA_CPP_END
|
||||
|
||||
// Test Hook
|
||||
HRESULT XblTestHooksTriggerRTAResync()
|
||||
{
|
||||
auto state = GlobalState::Get();
|
||||
if (!state)
|
||||
{
|
||||
return E_XBL_NOT_INITIALIZED;
|
||||
}
|
||||
state->RTAManager()->TriggerResync();
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
|
|
@ -61,6 +61,9 @@ public:
|
|||
const User& user
|
||||
) noexcept;
|
||||
|
||||
// Test Hook
|
||||
void TriggerResync() const noexcept;
|
||||
|
||||
private:
|
||||
Result<std::shared_ptr<class Connection>> GetConnection(
|
||||
const User& user
|
||||
|
|
|
@ -33,7 +33,6 @@ protected:
|
|||
assert(data.IsNull());
|
||||
};
|
||||
virtual void OnEvent(const JsonValue& event) noexcept = 0;
|
||||
virtual void OnResync() noexcept = 0;
|
||||
|
||||
String m_resourceUri;
|
||||
|
||||
|
|
|
@ -99,7 +99,7 @@ HRESULT PeoplehubService::MakeServiceCall(
|
|||
xbox_live_api::get_social_graph
|
||||
));
|
||||
|
||||
httpCall->SetXblServiceContractVersion(3);
|
||||
httpCall->SetXblServiceContractVersion(5);
|
||||
|
||||
if (!bodyJson.IsNull())
|
||||
{
|
||||
|
@ -309,9 +309,9 @@ Result<XblTitleHistory> PeoplehubService::DeserializeTitleHistory(
|
|||
return titleHistory;
|
||||
}
|
||||
|
||||
// If PeopleHub service fails to query TitleHistory, the "LastTimePlayed" field may be null.
|
||||
// If PeopleHub service fails to query TitleHistory, the "lastTimePlayed" field may be null.
|
||||
// We don't want to fail deserialization in this case, so just return that the user has not played
|
||||
constexpr const char* lastTimePlayedKey{ "LastTimePlayed" };
|
||||
constexpr const char* lastTimePlayedKey{ "lastTimePlayed" };
|
||||
if (json.HasMember(lastTimePlayedKey) && json[lastTimePlayedKey].IsString())
|
||||
{
|
||||
RETURN_HR_IF_FAILED(JsonUtils::ExtractJsonTimeT(
|
||||
|
@ -322,6 +322,17 @@ Result<XblTitleHistory> PeoplehubService::DeserializeTitleHistory(
|
|||
));
|
||||
}
|
||||
|
||||
constexpr const char* lastTimePlayedTextKey{ "lastTimePlayedText" };
|
||||
if (json.HasMember(lastTimePlayedTextKey) && json[lastTimePlayedTextKey].IsString())
|
||||
{
|
||||
RETURN_HR_IF_FAILED(JsonUtils::ExtractJsonStringToCharArray(
|
||||
json,
|
||||
lastTimePlayedTextKey,
|
||||
titleHistory.lastTimeUserPlayedText,
|
||||
XBL_LAST_TIME_PLAYED_CHAR_SIZE
|
||||
));
|
||||
}
|
||||
|
||||
titleHistory.hasUserPlayed = titleHistory.lastTimeUserPlayed != 0;
|
||||
|
||||
return Result<XblTitleHistory>{ titleHistory };
|
||||
|
|
|
@ -63,7 +63,6 @@ public:
|
|||
|
||||
protected:
|
||||
void OnEvent(const JsonValue& data) noexcept override;
|
||||
void OnResync() noexcept override;
|
||||
|
||||
private:
|
||||
uint64_t m_xuid;
|
||||
|
|
|
@ -81,11 +81,4 @@ void SocialRelationshipChangeSubscription::OnEvent(
|
|||
}
|
||||
}
|
||||
|
||||
void SocialRelationshipChangeSubscription::OnResync() noexcept
|
||||
{
|
||||
// Can't easily tell what might have been missed without keeping track of a full
|
||||
// SocialGraph locally. Log the service error and continue.
|
||||
LOGS_DEBUG << __FUNCTION__ << ": Resync received, relationship changes may have been missed";
|
||||
}
|
||||
|
||||
NAMESPACE_MICROSOFT_XBOX_SERVICES_SOCIAL_CPP_END
|
||||
|
|
|
@ -10,7 +10,7 @@ StatisticChangeSubscription::StatisticChangeSubscription(
|
|||
_In_ uint64_t xuid,
|
||||
_In_ String scid,
|
||||
_In_ String statisticName,
|
||||
_In_ std::shared_ptr<UserStatisticsService const> statisticsService
|
||||
_In_ std::shared_ptr<UserStatisticsService> statisticsService
|
||||
) noexcept :
|
||||
m_xuid{ xuid },
|
||||
m_scid{ std::move(scid) },
|
||||
|
@ -122,38 +122,6 @@ void StatisticChangeSubscription::OnEvent(
|
|||
}
|
||||
}
|
||||
|
||||
void StatisticChangeSubscription::OnResync() noexcept
|
||||
{
|
||||
if (auto statisticsService{ m_statisticsService.lock() })
|
||||
{
|
||||
statisticsService->GetSingleUserStatistic(m_xuid, m_scid, m_statisticName, {
|
||||
[
|
||||
sharedThis{ shared_from_this() },
|
||||
statisticsService
|
||||
]
|
||||
(Result<UserStatisticsResult> result)
|
||||
{
|
||||
if (Succeeded(result))
|
||||
{
|
||||
auto& payload{ result.Payload() };
|
||||
if (payload.ServiceConfigurationStatistics().size() >= 1 &&
|
||||
payload.ServiceConfigurationStatistics()[0].Statistics().size() >= 1)
|
||||
{
|
||||
statisticsService->HandleStatisticChanged(StatisticChangeEventArgs
|
||||
{
|
||||
sharedThis->m_xuid,
|
||||
sharedThis->m_scid,
|
||||
sharedThis->m_statisticName,
|
||||
sharedThis->m_statisticType,
|
||||
payload.ServiceConfigurationStatistics()[0].Statistics()[0].Value()
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
StatisticChangeEventArgs::StatisticChangeEventArgs(
|
||||
_In_ uint64_t _xboxUserId,
|
||||
_In_ const String& _serviceConfigurationId,
|
||||
|
|
|
@ -143,20 +143,19 @@ public:
|
|||
_In_ uint64_t xuid,
|
||||
_In_ String scid,
|
||||
_In_ String statisticName,
|
||||
_In_ std::shared_ptr<class UserStatisticsService const> statisticsService
|
||||
_In_ std::shared_ptr<class UserStatisticsService> statisticsService
|
||||
) noexcept;
|
||||
|
||||
protected:
|
||||
void OnSubscribe(_In_ const JsonValue& data) noexcept override;
|
||||
void OnEvent(_In_ const JsonValue& data) noexcept override;
|
||||
void OnResync() noexcept override;
|
||||
|
||||
private:
|
||||
const uint64_t m_xuid;
|
||||
const String m_scid;
|
||||
const String m_statisticName;
|
||||
String m_statisticType;
|
||||
const std::weak_ptr<class UserStatisticsService const> m_statisticsService;
|
||||
const std::weak_ptr<class UserStatisticsService> m_statisticsService;
|
||||
};
|
||||
|
||||
class UserStatisticsService : public std::enable_shared_from_this<UserStatisticsService>
|
||||
|
@ -164,6 +163,7 @@ class UserStatisticsService : public std::enable_shared_from_this<UserStatistics
|
|||
public:
|
||||
UserStatisticsService(
|
||||
_In_ User&& user,
|
||||
_In_ const TaskQueue& backgroundQueue,
|
||||
_In_ std::shared_ptr<xbox::services::XboxLiveContextSettings> xboxLiveContextSettings,
|
||||
_In_ std::shared_ptr<xbox::services::real_time_activity::RealTimeActivityManager> rtaManager
|
||||
) noexcept;
|
||||
|
@ -223,11 +223,13 @@ public:
|
|||
_In_ const Vector<uint64_t>& xuids
|
||||
) noexcept;
|
||||
|
||||
private:
|
||||
void HandleStatisticChanged(
|
||||
const StatisticChangeEventArgs& args
|
||||
) const noexcept;
|
||||
|
||||
private:
|
||||
void HandleRTAResync();
|
||||
|
||||
static String UserStatsSubpath(
|
||||
_In_ uint64_t xuid,
|
||||
_In_ const String& serviceConfigurationId,
|
||||
|
@ -235,9 +237,11 @@ private:
|
|||
) noexcept;
|
||||
|
||||
User m_user;
|
||||
TaskQueue m_queue;
|
||||
std::shared_ptr<xbox::services::XboxLiveContextSettings> m_xboxLiveContextSettings;
|
||||
std::shared_ptr<xbox::services::real_time_activity::RealTimeActivityManager> m_rtaManager;
|
||||
|
||||
XblFunctionContext m_resyncHandlerToken{ 0 };
|
||||
Map<XblFunctionContext, StatisticChangeHandler> m_statisticChangeHandlers;
|
||||
XblFunctionContext m_nextToken{ 1 };
|
||||
|
||||
|
@ -248,9 +252,14 @@ private:
|
|||
};
|
||||
// Indexing on Xuid before StatName because the set of tracked Users is probably more
|
||||
// likely to change than the set of tracked Stats.
|
||||
Map<uint64_t, Map<std::pair<String, String>, SubscriptionHolder>> m_trackedStats;
|
||||
Map<uint64_t, Map<std::pair<String, String>, SubscriptionHolder>> m_trackedStatsByUser;
|
||||
|
||||
// Tracked stats by scid. Needed to perform RTA resync
|
||||
Map<String, Vector<String>> m_trackedStatsByScid;
|
||||
|
||||
mutable std::mutex m_mutex;
|
||||
|
||||
friend class StatisticChangeSubscription;
|
||||
};
|
||||
|
||||
NAMESPACE_MICROSOFT_XBOX_SERVICES_USERSTATISTICS_CPP_END
|
|
@ -10,10 +10,12 @@ NAMESPACE_MICROSOFT_XBOX_SERVICES_USERSTATISTICS_CPP_BEGIN
|
|||
|
||||
UserStatisticsService::UserStatisticsService(
|
||||
_In_ User&& user,
|
||||
_In_ const TaskQueue& backgroundQueue,
|
||||
_In_ std::shared_ptr<xbox::services::XboxLiveContextSettings> xboxLiveContextSettings,
|
||||
_In_ std::shared_ptr<xbox::services::real_time_activity::RealTimeActivityManager> rtaManager
|
||||
) noexcept :
|
||||
m_user{ std::move(user) },
|
||||
m_queue{ backgroundQueue.DeriveWorkerQueue() },
|
||||
m_xboxLiveContextSettings{ std::move(xboxLiveContextSettings) },
|
||||
m_rtaManager{ std::move(rtaManager) }
|
||||
{
|
||||
|
@ -21,9 +23,14 @@ UserStatisticsService::UserStatisticsService(
|
|||
|
||||
UserStatisticsService::~UserStatisticsService() noexcept
|
||||
{
|
||||
if (m_resyncHandlerToken)
|
||||
{
|
||||
m_rtaManager->RemoveResyncHandler(m_user, m_resyncHandlerToken);
|
||||
}
|
||||
|
||||
if (!m_statisticChangeHandlers.empty())
|
||||
{
|
||||
for (auto& userPair : m_trackedStats)
|
||||
for (auto& userPair : m_trackedStatsByUser)
|
||||
{
|
||||
for (auto& statPair : userPair.second)
|
||||
{
|
||||
|
@ -211,13 +218,26 @@ XblFunctionContext UserStatisticsService::AddStatisticChangedHandler(
|
|||
{
|
||||
std::lock_guard<std::mutex> lock{ m_mutex };
|
||||
|
||||
if (!m_resyncHandlerToken)
|
||||
{
|
||||
m_resyncHandlerToken = m_rtaManager->AddResyncHandler(m_user, [weakThis = std::weak_ptr<UserStatisticsService>{ shared_from_this() }]
|
||||
{
|
||||
auto sharedThis = weakThis.lock();
|
||||
if (sharedThis)
|
||||
{
|
||||
sharedThis->HandleRTAResync();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// Add subs to RTA manager if needed
|
||||
if (m_statisticChangeHandlers.empty())
|
||||
{
|
||||
for (auto& userPair : m_trackedStats)
|
||||
for (auto& userPair : m_trackedStatsByUser)
|
||||
{
|
||||
for (auto& statPair : userPair.second)
|
||||
{
|
||||
statPair.second.subscription = MakeShared<StatisticChangeSubscription>(userPair.first, statPair.first.first, statPair.first.second, shared_from_this());
|
||||
m_rtaManager->AddSubscription(m_user, statPair.second.subscription);
|
||||
}
|
||||
}
|
||||
|
@ -238,11 +258,12 @@ void UserStatisticsService::RemoveStatisticChangedHandler(
|
|||
// Remove subs if there are no more handlers
|
||||
if (removed && m_statisticChangeHandlers.empty())
|
||||
{
|
||||
for (auto& userPair : m_trackedStats)
|
||||
for (auto& userPair : m_trackedStatsByUser)
|
||||
{
|
||||
for (auto& statPair : userPair.second)
|
||||
{
|
||||
m_rtaManager->RemoveSubscription(m_user, statPair.second.subscription);
|
||||
statPair.second.subscription.reset();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -258,18 +279,19 @@ HRESULT UserStatisticsService::TrackStatistics(
|
|||
|
||||
for (auto& xuid : xuids)
|
||||
{
|
||||
auto& userStats{ m_trackedStats[xuid] };
|
||||
auto& userStats{ m_trackedStatsByUser[xuid] };
|
||||
for (auto& statName : statNames)
|
||||
{
|
||||
auto iter{ userStats.find({ scid, statName }) };
|
||||
if (iter == userStats.end())
|
||||
{
|
||||
auto sub{ MakeShared<StatisticChangeSubscription>(xuid, scid, statName, shared_from_this()) };
|
||||
userStats[{scid, statName}] = SubscriptionHolder{ 1, sub };
|
||||
userStats[{scid, statName}] = SubscriptionHolder{ 1, nullptr };
|
||||
|
||||
// If there are existing handlers, add the new subs to RTA manager
|
||||
if (!m_statisticChangeHandlers.empty())
|
||||
{
|
||||
auto sub{ MakeShared<StatisticChangeSubscription>(xuid, scid, statName, shared_from_this()) };
|
||||
userStats[{scid, statName}].subscription = sub;
|
||||
RETURN_HR_IF_FAILED(m_rtaManager->AddSubscription(m_user, sub));
|
||||
}
|
||||
}
|
||||
|
@ -292,7 +314,7 @@ HRESULT UserStatisticsService::StopTrackingStatistics(
|
|||
|
||||
for (auto& xuid : xuids)
|
||||
{
|
||||
auto& userStats{ m_trackedStats[xuid] };
|
||||
auto& userStats{ m_trackedStatsByUser[xuid] };
|
||||
for (auto& statName : statNames)
|
||||
{
|
||||
auto iter{ userStats.find({ scid, statName }) };
|
||||
|
@ -318,7 +340,7 @@ HRESULT UserStatisticsService::StopTrackingUsers(
|
|||
|
||||
for (auto& xuid : xuids)
|
||||
{
|
||||
auto& userStats{ m_trackedStats[xuid] };
|
||||
auto& userStats{ m_trackedStatsByUser[xuid] };
|
||||
for (auto& statPair : userStats)
|
||||
{
|
||||
if (--(statPair.second.refCount) == 0)
|
||||
|
@ -327,6 +349,7 @@ HRESULT UserStatisticsService::StopTrackingUsers(
|
|||
if (!m_statisticChangeHandlers.empty())
|
||||
{
|
||||
RETURN_HR_IF_FAILED(m_rtaManager->RemoveSubscription(m_user, statPair.second.subscription));
|
||||
statPair.second.subscription.reset();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -348,6 +371,75 @@ void UserStatisticsService::HandleStatisticChanged(
|
|||
}
|
||||
}
|
||||
|
||||
void UserStatisticsService::HandleRTAResync()
|
||||
{
|
||||
std::unique_lock<std::mutex> lock{ m_mutex };
|
||||
|
||||
// Get all stats tracked stats for all tracked users so that we can resync in a single request.
|
||||
// In the request callback, we will only invoke the stat changed handlers for the tracked users/stats
|
||||
Vector<uint64_t> trackedUsers;
|
||||
Vector<RequestedStatistics> trackedStats;
|
||||
|
||||
for (auto& pair : m_trackedStatsByUser)
|
||||
{
|
||||
trackedUsers.push_back(pair.first);
|
||||
}
|
||||
for (auto& pair : m_trackedStatsByScid)
|
||||
{
|
||||
trackedStats.push_back(RequestedStatistics{ pair.first, pair.second });
|
||||
}
|
||||
|
||||
auto weakThis = std::weak_ptr<UserStatisticsService>{ shared_from_this() };
|
||||
auto getStatsCallback = [weakThis, this](Result<Vector<UserStatisticsResult>> result)
|
||||
{
|
||||
auto sharedThis = weakThis.lock();
|
||||
if (!sharedThis)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
std::unique_lock<std::mutex> lock{ m_mutex };
|
||||
|
||||
if (Succeeded(result))
|
||||
{
|
||||
Vector<StatisticChangeEventArgs> changeEvents;
|
||||
|
||||
for (auto& userStatsResult : result.Payload())
|
||||
{
|
||||
// Only invoke handler for tracked stats
|
||||
auto trackedUserIter = m_trackedStatsByUser.find(utils::internal_string_to_uint64(userStatsResult.XboxUserId()));
|
||||
if (trackedUserIter != m_trackedStatsByUser.end())
|
||||
{
|
||||
for (auto& scidStats : userStatsResult.ServiceConfigurationStatistics())
|
||||
{
|
||||
for (auto& stat : scidStats.Statistics())
|
||||
{
|
||||
auto trackedStatIter = trackedUserIter->second.find({ scidStats.ServiceConfigurationId(), stat.StatisticName() });
|
||||
if (trackedStatIter != trackedUserIter->second.end())
|
||||
{
|
||||
changeEvents.emplace_back(trackedUserIter->first, scidStats.ServiceConfigurationId(), stat.StatisticName(), stat.StatisticType(), stat.Value());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
auto statChangedHandlers{ m_statisticChangeHandlers };
|
||||
lock.unlock();
|
||||
|
||||
for (auto& pair : statChangedHandlers)
|
||||
{
|
||||
for (auto& eventArgs : changeEvents)
|
||||
{
|
||||
pair.second(eventArgs);
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
GetMultipleUserStatisticsForMultipleServiceConfigurations(trackedUsers, trackedStats, AsyncContext<Result<Vector<UserStatisticsResult>>>{ m_queue, std::move(getStatsCallback) });
|
||||
}
|
||||
|
||||
String UserStatisticsService::UserStatsSubpath(
|
||||
_In_ uint64_t xuid,
|
||||
_In_ const String& serviceConfigurationId,
|
||||
|
|
|
@ -631,16 +631,15 @@ xsapi_internal_string datetime::to_string_internal(date_format format) const
|
|||
throw utility::details::create_system_error(GetLastError());
|
||||
}
|
||||
|
||||
xsapi_internal_wostringstream outStream;
|
||||
outStream.imbue(std::locale::classic());
|
||||
constexpr size_t dateTimeMaxLength{ 256 };
|
||||
wchar_t dateTimeBuffer[dateTimeMaxLength]{ 0 };
|
||||
|
||||
if (format == RFC_1123)
|
||||
{
|
||||
wchar_t dateStr[18] = { 0 };
|
||||
#if _WIN32_WINNT < _WIN32_WINNT_VISTA
|
||||
TCHAR dateStr[18] = {0};
|
||||
status = GetDateFormat(LOCALE_INVARIANT, 0, &systemTime, __TEXT("ddd',' dd MMM yyyy"), dateStr, sizeof(dateStr) / sizeof(TCHAR));
|
||||
status = GetDateFormatW(LOCALE_INVARIANT, 0, &systemTime, L"ddd',' dd MMM yyyy", dateStr, sizeof(dateStr) / sizeof(wchar_t));
|
||||
#else
|
||||
wchar_t dateStr[18] = {0};
|
||||
status = GetDateFormatEx(LOCALE_NAME_INVARIANT, 0, &systemTime, L"ddd',' dd MMM yyyy", dateStr, sizeof(dateStr) / sizeof(wchar_t), NULL);
|
||||
#endif // _WIN32_WINNT < _WIN32_WINNT_VISTA
|
||||
if (status == 0)
|
||||
|
@ -648,11 +647,10 @@ xsapi_internal_string datetime::to_string_internal(date_format format) const
|
|||
throw utility::details::create_system_error(GetLastError());
|
||||
}
|
||||
|
||||
wchar_t timeStr[10] = { 0 };
|
||||
#if _WIN32_WINNT < _WIN32_WINNT_VISTA
|
||||
TCHAR timeStr[10] = {0};
|
||||
status = GetTimeFormat(LOCALE_INVARIANT, TIME_NOTIMEMARKER | TIME_FORCE24HOURFORMAT, &systemTime, __TEXT("HH':'mm':'ss"), timeStr, sizeof(timeStr) / sizeof(TCHAR));
|
||||
status = GetTimeFormatW(LOCALE_INVARIANT, TIME_NOTIMEMARKER | TIME_FORCE24HOURFORMAT, &systemTime, L"HH':'mm':'ss", timeStr, sizeof(timeStr) / sizeof(wchar_t));
|
||||
#else
|
||||
wchar_t timeStr[10] = {0};
|
||||
status = GetTimeFormatEx(LOCALE_NAME_INVARIANT, TIME_NOTIMEMARKER | TIME_FORCE24HOURFORMAT, &systemTime, L"HH':'mm':'ss", timeStr, sizeof(timeStr) / sizeof(wchar_t));
|
||||
#endif // _WIN32_WINNT < _WIN32_WINNT_VISTA
|
||||
if (status == 0)
|
||||
|
@ -660,16 +658,15 @@ xsapi_internal_string datetime::to_string_internal(date_format format) const
|
|||
throw utility::details::create_system_error(GetLastError());
|
||||
}
|
||||
|
||||
outStream << dateStr << " " << timeStr << " " << "GMT";
|
||||
_snwprintf_s(dateTimeBuffer, sizeof(dateTimeBuffer), L"%s %s GMT", dateStr, timeStr);
|
||||
}
|
||||
else if (format == ISO_8601)
|
||||
{
|
||||
const size_t buffSize = 64;
|
||||
wchar_t dateStr[buffSize] = { 0 };
|
||||
#if _WIN32_WINNT < _WIN32_WINNT_VISTA
|
||||
TCHAR dateStr[buffSize] = {0};
|
||||
status = GetDateFormat(LOCALE_INVARIANT, 0, &systemTime, __TEXT("yyyy-MM-dd"), dateStr, buffSize);
|
||||
status = GetDateFormatW(LOCALE_INVARIANT, 0, &systemTime, L"yyyy-MM-dd", dateStr, buffSize);
|
||||
#else
|
||||
wchar_t dateStr[buffSize] = {0};
|
||||
status = GetDateFormatEx(LOCALE_NAME_INVARIANT, 0, &systemTime, L"yyyy-MM-dd", dateStr, buffSize, NULL);
|
||||
#endif // _WIN32_WINNT < _WIN32_WINNT_VISTA
|
||||
if (status == 0)
|
||||
|
@ -677,11 +674,10 @@ xsapi_internal_string datetime::to_string_internal(date_format format) const
|
|||
throw utility::details::create_system_error(GetLastError());
|
||||
}
|
||||
|
||||
wchar_t timeStr[buffSize] = { 0 };
|
||||
#if _WIN32_WINNT < _WIN32_WINNT_VISTA
|
||||
TCHAR timeStr[buffSize] = {0};
|
||||
status = GetTimeFormat(LOCALE_INVARIANT, TIME_NOTIMEMARKER | TIME_FORCE24HOURFORMAT, &systemTime, __TEXT("HH':'mm':'ss"), timeStr, buffSize);
|
||||
status = GetTimeFormatW(LOCALE_INVARIANT, TIME_NOTIMEMARKER | TIME_FORCE24HOURFORMAT, &systemTime, L"HH':'mm':'ss", timeStr, buffSize);
|
||||
#else
|
||||
wchar_t timeStr[buffSize] = {0};
|
||||
status = GetTimeFormatEx(LOCALE_NAME_INVARIANT, TIME_NOTIMEMARKER | TIME_FORCE24HOURFORMAT, &systemTime, L"HH':'mm':'ss", timeStr, buffSize);
|
||||
#endif // _WIN32_WINNT < _WIN32_WINNT_VISTA
|
||||
if (status == 0)
|
||||
|
@ -689,22 +685,21 @@ xsapi_internal_string datetime::to_string_internal(date_format format) const
|
|||
throw utility::details::create_system_error(GetLastError());
|
||||
}
|
||||
|
||||
outStream << dateStr << "T" << timeStr;
|
||||
wchar_t fracSecBuf[9] = { 0 };
|
||||
uint64_t frac_sec = largeInt.QuadPart % _secondTicks;
|
||||
if (frac_sec > 0)
|
||||
{
|
||||
// Append fractional second, which is a 7-digit value with no trailing zeros
|
||||
// This way, '1200' becomes '00012'
|
||||
char buf[9] = { 0 };
|
||||
sprintf_s(buf, sizeof(buf), ".%07ld", (long int)frac_sec);
|
||||
_snwprintf_s(fracSecBuf, sizeof(fracSecBuf), L".%07ld", (long int)frac_sec);
|
||||
// trim trailing zeros
|
||||
for (int i = 7; buf[i] == '0'; i--) buf[i] = '\0';
|
||||
outStream << buf;
|
||||
for (int i = 7; fracSecBuf[i] == '0'; i--) fracSecBuf[i] = '\0';
|
||||
}
|
||||
outStream << "Z";
|
||||
|
||||
_snwprintf_s(dateTimeBuffer, sizeof(dateTimeBuffer), L"%sT%sZ%s", dateStr, timeStr, fracSecBuf);
|
||||
}
|
||||
|
||||
return conversions::to_utf8string_internal(outStream.str());
|
||||
return conversions::to_utf8string_internal(dateTimeBuffer);
|
||||
#else //LINUX
|
||||
uint64_t input = m_interval;
|
||||
uint64_t frac_sec = input % _secondTicks;
|
||||
|
|
|
@ -9,4 +9,4 @@
|
|||
//*********************************************************
|
||||
#pragma once
|
||||
|
||||
#define XBOX_SERVICES_API_VERSION_STRING "2021.10.20220111.1"
|
||||
#define XBOX_SERVICES_API_VERSION_STRING "2021.10.20210928.0"
|
||||
|
|
|
@ -137,10 +137,7 @@ HRESULT GlobalState::Create(
|
|||
state->m_achivementsEventProviderName = achievementsProviderName.str();
|
||||
#endif
|
||||
|
||||
#if HC_PLATFORM == HC_PLATFORM_WIN32 || HC_PLATFORM == HC_PLATFORM_XDK || HC_PLATFORM == HC_PLATFORM_GDK
|
||||
// Generate locales
|
||||
state->m_locales = utils::generate_locales();
|
||||
#endif
|
||||
|
||||
// GlobalState object has been created and initialized successfully at this point so store it.
|
||||
(void)AccessHelper(AccessMode::SET, state);
|
||||
|
@ -473,9 +470,10 @@ const String& GlobalState::Locales() const noexcept
|
|||
return m_locales;
|
||||
}
|
||||
|
||||
void GlobalState::OverrideLocales(String&& locales) noexcept
|
||||
void GlobalState::OverrideLocale(const xsapi_internal_string& locale) noexcept
|
||||
{
|
||||
m_locales = std::move(locales);
|
||||
m_locales = utils::generate_locales(locale);
|
||||
}
|
||||
|
||||
|
||||
NAMESPACE_MICROSOFT_XBOX_SERVICES_CPP_END
|
|
@ -94,7 +94,7 @@ public:
|
|||
#endif
|
||||
|
||||
const String& Locales() const noexcept;
|
||||
void OverrideLocales(String&& locales) noexcept;
|
||||
void OverrideLocale(const xsapi_internal_string& locales) noexcept;
|
||||
|
||||
// API Type to be used in HTTP requests so they are identifiable in traces.
|
||||
// TODO consider configuring this with XblInitArgs
|
||||
|
@ -120,7 +120,7 @@ private:
|
|||
Set<uint64_t> m_userExpiredTokens;
|
||||
|
||||
UnorderedMap<uint64_t, std::shared_ptr<UserChangeEventHandler>> m_userChangeHandlers;
|
||||
XblFunctionContext m_nextHandlerToken{ 0 };
|
||||
XblFunctionContext m_nextHandlerToken{ 1 };
|
||||
UnorderedMap<XblFunctionContext, std::shared_ptr<ServiceCallRoutedHandler>> m_callRoutedHandlers;
|
||||
|
||||
String m_locales{ "en-US" };
|
||||
|
@ -137,7 +137,7 @@ private:
|
|||
#endif
|
||||
|
||||
#if HC_PLATFORM == HC_PLATFORM_GDK
|
||||
XblFunctionContext m_nextAppChangeHandlerToken{ 0 };
|
||||
XblFunctionContext m_nextAppChangeHandlerToken{ 1 };
|
||||
xsapi_internal_unordered_map<XblFunctionContext, AppChangeNotificationHandler> m_appChangeNotificationHandlers;
|
||||
#endif
|
||||
|
||||
|
|
|
@ -109,7 +109,6 @@ std::map<xsapi_internal_string, xsapi_internal_string> serviceLocales =
|
|||
|
||||
#if HC_PLATFORM == HC_PLATFORM_WIN32 || HC_PLATFORM == HC_PLATFORM_XDK || HC_PLATFORM == HC_PLATFORM_GDK
|
||||
// Locale api for desktop and xbox
|
||||
|
||||
xsapi_internal_vector<xsapi_internal_string> utils::get_locale_list()
|
||||
{
|
||||
xsapi_internal_vector<xsapi_internal_string> localeList;
|
||||
|
@ -196,11 +195,25 @@ xsapi_internal_vector<xsapi_internal_string> utils::get_locale_list()
|
|||
|
||||
#endif
|
||||
|
||||
String utils::generate_locales()
|
||||
String utils::generate_locales(_In_z_ const xsapi_internal_string& overrideLocale)
|
||||
{
|
||||
xsapi_internal_vector<xsapi_internal_string> localeList = get_locale_list();
|
||||
xsapi_internal_vector<xsapi_internal_string> localeList;
|
||||
|
||||
// If an overrideLocale is provided, it should be added to the front of the localeList
|
||||
auto osLocaleList = get_locale_list();
|
||||
if (!overrideLocale.empty())
|
||||
{
|
||||
localeList.push_back(overrideLocale);
|
||||
localeList.insert(localeList.end(), osLocaleList.begin(), osLocaleList.end());
|
||||
}
|
||||
else
|
||||
{
|
||||
localeList = osLocaleList;
|
||||
}
|
||||
|
||||
xsapi_internal_vector<xsapi_internal_string> localeFallbackList;
|
||||
|
||||
|
||||
for (auto& locale : localeList)
|
||||
{
|
||||
// Build up fallback list, for instance, if the lang is "sd-Arab-PK"
|
||||
|
|
|
@ -184,7 +184,7 @@ public:
|
|||
static int utf8_from_char_t(_In_z_ const char_t* inArray, _Out_writes_z_(cchOutArray) char* outArray, _In_ int cchOutArray);
|
||||
static int char_t_from_utf8(_In_z_ const char* inArray, _Out_writes_z_(cchOutArray) char_t* outArray, _In_ int cchOutArray);
|
||||
|
||||
static String generate_locales();
|
||||
static String generate_locales(_In_z_ const xsapi_internal_string& locale = "");
|
||||
// Helper function to get locales from GlobalState. Fallback to "en-us" if GlobalState is not initialized
|
||||
static String get_locales();
|
||||
|
||||
|
|
|
@ -255,7 +255,7 @@
|
|||
<DeploymentContent>true</DeploymentContent>
|
||||
</None>
|
||||
<None Include="$(MSBuildThisFileDirectory)Tests\achievements\achievements_progress_notification.lua">
|
||||
<DeploymentContent>true</DeploymentContent>
|
||||
<DeploymentContent>true</DeploymentContent>
|
||||
</None>
|
||||
<None Include="$(MSBuildThisFileDirectory)Tests\achievements\PerformanceTestMockResponse.json">
|
||||
<DeploymentContent>true</DeploymentContent>
|
||||
|
@ -284,8 +284,11 @@
|
|||
<None Include="$(MSBuildThisFileDirectory)Tests\gdk-gameinvite\game-invite-send.lua">
|
||||
<DeploymentContent>true</DeploymentContent>
|
||||
</None>
|
||||
<None Include="$(MSBuildThisFileDirectory)Tests\gdk-gameinvite\game-mpainvite-send.lua">
|
||||
<DeploymentContent>true</DeploymentContent>
|
||||
</None>
|
||||
<None Include="$(MSBuildThisFileDirectory)Tests\leaderboard\leaderboard-2017.lua">
|
||||
<DeploymentContent>true</DeploymentContent>
|
||||
<DeploymentContent>true</DeploymentContent>
|
||||
</None>
|
||||
<None Include="$(MSBuildThisFileDirectory)Tests\leaderboard\leaderboard-bvt.lua">
|
||||
<DeploymentContent>true</DeploymentContent>
|
||||
|
@ -302,6 +305,15 @@
|
|||
<None Include="$(MSBuildThisFileDirectory)Tests\libHttp\httpPerform.lua">
|
||||
<DeploymentContent>true</DeploymentContent>
|
||||
</None>
|
||||
<None Include="$(MSBuildThisFileDirectory)Tests\libHttp\manualDispatchTest.lua">
|
||||
<DeploymentContent>true</DeploymentContent>
|
||||
</None>
|
||||
<None Include="$(MSBuildThisFileDirectory)Tests\libHttp\websocket_cleanup_while_connected.lua">
|
||||
<DeploymentContent>true</DeploymentContent>
|
||||
</None>
|
||||
<None Include="$(MSBuildThisFileDirectory)Tests\libHttp\websocket_cleanup_while_connecting.lua">
|
||||
<DeploymentContent>true</DeploymentContent>
|
||||
</None>
|
||||
<None Include="$(MSBuildThisFileDirectory)Tests\libHttp\websocket_closehandle_while_connected.lua">
|
||||
<DeploymentContent>true</DeploymentContent>
|
||||
</None>
|
||||
|
@ -314,6 +326,12 @@
|
|||
<None Include="$(MSBuildThisFileDirectory)Tests\misc\global_state.lua">
|
||||
<DeploymentContent>true</DeploymentContent>
|
||||
</None>
|
||||
<None Include="$(MSBuildThisFileDirectory)Tests\misc\null_task_queue.lua">
|
||||
<DeploymentContent>true</DeploymentContent>
|
||||
</None>
|
||||
<None Include="$(MSBuildThisFileDirectory)Tests\misc\override_locale.lua">
|
||||
<DeploymentContent>true</DeploymentContent>
|
||||
</None>
|
||||
<None Include="$(MSBuildThisFileDirectory)Tests\misc\simpletest.lua">
|
||||
<DeploymentContent>true</DeploymentContent>
|
||||
</None>
|
||||
|
@ -428,6 +446,12 @@
|
|||
<None Include="$(MSBuildThisFileDirectory)Tests\profile\GetUserProfilesForSocialGroupAsync.lua">
|
||||
<DeploymentContent>true</DeploymentContent>
|
||||
</None>
|
||||
<None Include="$(MSBuildThisFileDirectory)Tests\rta\RTAResync.lua">
|
||||
<DeploymentContent>true</DeploymentContent>
|
||||
</None>
|
||||
<None Include="$(MSBuildThisFileDirectory)Tests\rta\RTASuspendResume.lua">
|
||||
<DeploymentContent>true</DeploymentContent>
|
||||
</None>
|
||||
<None Include="$(MSBuildThisFileDirectory)Tests\rta\RTA_activation.lua">
|
||||
<DeploymentContent>true</DeploymentContent>
|
||||
</None>
|
||||
|
@ -485,7 +509,7 @@
|
|||
<None Include="$(MSBuildThisFileDirectory)Tests\social\social_manager_remove_realloc.lua">
|
||||
<DeploymentContent>true</DeploymentContent>
|
||||
</None>
|
||||
<None Include="$(MSBuildThisFileDirectory)Tests\social\social_manager_wait.lua" >
|
||||
<None Include="$(MSBuildThisFileDirectory)Tests\social\social_manager_wait.lua">
|
||||
<DeploymentContent>true</DeploymentContent>
|
||||
</None>
|
||||
<None Include="$(MSBuildThisFileDirectory)Tests\social\social_relationship_changed.lua">
|
||||
|
|
|
@ -463,6 +463,9 @@
|
|||
<None Include="$(MSBuildThisFileDirectory)Tests\misc\xbox_live_context.lua">
|
||||
<Filter>Tests\misc</Filter>
|
||||
</None>
|
||||
<None Include="$(MSBuildThisFileDirectory)Tests\misc\null_task_queue.lua">
|
||||
<Filter>Tests\misc</Filter>
|
||||
</None>
|
||||
<None Include="$(MSBuildThisFileDirectory)Tests\social\social_manager_filter.lua">
|
||||
<Filter>Tests\social</Filter>
|
||||
</None>
|
||||
|
@ -605,6 +608,9 @@
|
|||
<None Include="$(MSBuildThisFileDirectory)Tests\misc\global_state.lua">
|
||||
<Filter>Tests\misc</Filter>
|
||||
</None>
|
||||
<None Include="$(MSBuildThisFileDirectory)Tests\misc\override_locale.lua">
|
||||
<Filter>Tests\misc</Filter>
|
||||
</None>
|
||||
<None Include="$(MSBuildThisFileDirectory)Tests\notification\gameinvitenotifications.lua">
|
||||
<Filter>Tests\notification</Filter>
|
||||
</None>
|
||||
|
@ -795,5 +801,23 @@
|
|||
<None Include="$(MSBuildThisFileDirectory)Tests\social\social_sub_unsub.lua">
|
||||
<Filter>Tests\social</Filter>
|
||||
</None>
|
||||
<None Include="$(MSBuildThisFileDirectory)Tests\rta\RTAResync.lua">
|
||||
<Filter>Tests\rta</Filter>
|
||||
</None>
|
||||
<None Include="$(MSBuildThisFileDirectory)Tests\rta\RTASuspendResume.lua">
|
||||
<Filter>Tests\rta</Filter>
|
||||
</None>
|
||||
<None Include="$(MSBuildThisFileDirectory)Tests\gdk-gameinvite\game-mpainvite-send.lua">
|
||||
<Filter>Tests\gdk-gameinvite</Filter>
|
||||
</None>
|
||||
<None Include="$(MSBuildThisFileDirectory)Tests\libHttp\manualDispatchTest.lua">
|
||||
<Filter>Tests\libHttp</Filter>
|
||||
</None>
|
||||
<None Include="$(MSBuildThisFileDirectory)Tests\libHttp\websocket_cleanup_while_connected.lua">
|
||||
<Filter>Tests\libHttp</Filter>
|
||||
</None>
|
||||
<None Include="$(MSBuildThisFileDirectory)Tests\libHttp\websocket_cleanup_while_connecting.lua">
|
||||
<Filter>Tests\libHttp</Filter>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
</Project>
|
|
@ -95,8 +95,15 @@ int XTaskQueueTerminateWithAsyncWait_Lua(lua_State *L)
|
|||
|
||||
int XTaskQueueSetCurrentProcessTaskQueue_Lua(lua_State *L)
|
||||
{
|
||||
auto luaHandle = GetUint64FromLua(L, 1, 0);
|
||||
// CODE SNIPPET START: XTaskQueueSetCurrentProcessTaskQueue
|
||||
XTaskQueueHandle queue = nullptr;
|
||||
// CODE SKIP START
|
||||
if (luaHandle != 0)
|
||||
{
|
||||
queue = reinterpret_cast<XTaskQueueHandle>(luaHandle);
|
||||
}
|
||||
// CODE SKIP END
|
||||
XTaskQueueSetCurrentProcessTaskQueue(queue);
|
||||
// CODE SNIPPET END
|
||||
|
||||
|
@ -112,6 +119,47 @@ int XTaskQueueGetCurrentProcessTaskQueue_Lua(lua_State *L)
|
|||
// CODE SNIPPET END
|
||||
|
||||
LogToFile("XTaskQueueGetCurrentProcessTaskQueue 0x%0.8x", queue);
|
||||
lua_pushinteger(L, reinterpret_cast<lua_Integer>(queue));
|
||||
return LuaReturnHR(L, S_OK, 1);
|
||||
}
|
||||
|
||||
std::thread g_dispatchThread{};
|
||||
bool g_dispatch = false;
|
||||
|
||||
int StartManualDispatchThread_Lua(lua_State* L)
|
||||
{
|
||||
g_dispatch = true;
|
||||
g_dispatchThread = std::thread{ []()
|
||||
{
|
||||
while (g_dispatch)
|
||||
{
|
||||
auto queue = Data()->queue;
|
||||
|
||||
bool workAvailable = true;
|
||||
while (workAvailable)
|
||||
{
|
||||
workAvailable = XTaskQueueDispatch(queue, XTaskQueuePort::Work, 0);
|
||||
}
|
||||
|
||||
workAvailable = true;
|
||||
while (workAvailable)
|
||||
{
|
||||
workAvailable = XTaskQueueDispatch(queue, XTaskQueuePort::Completion, 0);
|
||||
}
|
||||
|
||||
pal::Sleep(10);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
g_dispatchThread.detach();
|
||||
|
||||
return LuaReturnHR(L, S_OK);
|
||||
}
|
||||
|
||||
int StopManualDispatchThread_Lua(lua_State* L)
|
||||
{
|
||||
g_dispatch = false;
|
||||
return LuaReturnHR(L, S_OK);
|
||||
}
|
||||
|
||||
|
@ -125,7 +173,7 @@ void SetupAPIs_Async()
|
|||
lua_register(Data()->L, "XTaskQueueTerminateWithAsyncWait", XTaskQueueTerminateWithAsyncWait_Lua);
|
||||
lua_register(Data()->L, "XTaskQueueSetCurrentProcessTaskQueue", XTaskQueueSetCurrentProcessTaskQueue_Lua);
|
||||
lua_register(Data()->L, "XTaskQueueGetCurrentProcessTaskQueue", XTaskQueueGetCurrentProcessTaskQueue_Lua);
|
||||
|
||||
|
||||
//lua_register(Data()->L, "XTaskQueueGetPort", XTaskQueueGetPort_Lua);
|
||||
//lua_register(Data()->L, "XTaskQueueCreateComposite", XTaskQueueCreateComposite_Lua);
|
||||
//lua_register(Data()->L, "XTaskQueueSubmitCallback", XTaskQueueSubmitCallback_Lua);
|
||||
|
@ -134,6 +182,10 @@ void SetupAPIs_Async()
|
|||
//lua_register(Data()->L, "XTaskQueueUnregisterWaiter", XTaskQueueUnregisterWaiter_Lua);
|
||||
//lua_register(Data()->L, "XTaskQueueRegisterMonitor", XTaskQueueRegisterMonitor_Lua);
|
||||
//lua_register(Data()->L, "XTaskQueueUnregisterMonitor", XTaskQueueUnregisterMonitor_Lua);
|
||||
|
||||
// Helper methods
|
||||
lua_register(Data()->L, "StartManualDispatchThread", StartManualDispatchThread_Lua);
|
||||
lua_register(Data()->L, "StopManualDispatchThread", StopManualDispatchThread_Lua);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -12,6 +12,9 @@ int HCInitialize_Lua(lua_State *L)
|
|||
#endif
|
||||
// CODE SNIPPET END
|
||||
|
||||
HCSettingsSetTraceLevel(HCTraceLevel::Verbose);
|
||||
HCTraceSetTraceToDebugger(true);
|
||||
|
||||
LogToFile("HCInitialize: hr=%s", ConvertHR(hr).c_str());
|
||||
return LuaReturnHR(L, hr);
|
||||
}
|
||||
|
@ -26,6 +29,33 @@ int HCCleanup_Lua(lua_State *L)
|
|||
return LuaReturnHR(L, S_OK);
|
||||
}
|
||||
|
||||
int HCCleanupAsync_Lua(lua_State* L)
|
||||
{
|
||||
CreateQueueIfNeeded();
|
||||
|
||||
// CODE SNIPPET START: HCCleanupAsync
|
||||
auto asyncBlock = std::make_unique<XAsyncBlock>();
|
||||
asyncBlock->queue = Data()->queue;
|
||||
asyncBlock->callback = [](XAsyncBlock* asyncBlock)
|
||||
{
|
||||
std::unique_ptr<XAsyncBlock> asyncBlockPtr{ asyncBlock }; // Take over ownership of the XAsyncBlock*
|
||||
HRESULT hr = XAsyncGetStatus(asyncBlock, false);
|
||||
LogToFile("HCCleanupAsync result: hr=%s", ConvertHR(hr).c_str());
|
||||
CallLuaFunctionWithHr(hr, "OnHCCleanupAsync"); // CODE SNIP SKIP
|
||||
};
|
||||
|
||||
HRESULT hr = HCCleanupAsync(asyncBlock.get());
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
// The call succeeded, so release the std::unique_ptr ownership of XAsyncBlock* since the callback will take over ownership.
|
||||
// If the call fails, the std::unique_ptr will keep ownership and delete the XAsyncBlock*
|
||||
asyncBlock.release();
|
||||
}
|
||||
// CODE SNIPPET END
|
||||
|
||||
LogToFile("HCCleanupAsync: hr=%s", ConvertHR(hr).c_str());
|
||||
return LuaReturnHR(L, hr);
|
||||
}
|
||||
|
||||
int HCGetLibVersion_Lua(lua_State *L)
|
||||
{
|
||||
|
@ -368,8 +398,7 @@ int HCWebSocketSetHeader_Lua(lua_State *L)
|
|||
|
||||
int HCWebSocketConnectAsync_Lua(lua_State *L)
|
||||
{
|
||||
//TODO: websocket.org is no longer in service; find a new server
|
||||
std::string uri = GetStringFromLua(L, 1, "wss://echo.websocket.org");
|
||||
std::string uri = GetStringFromLua(L, 1, "ws://localhost:9002");
|
||||
std::string subProtocol = GetStringFromLua(L, 2, "");
|
||||
|
||||
// CODE SNIPPET START: HCWebSocketConnectAsync
|
||||
|
@ -533,6 +562,31 @@ int HCMockResponseSetNetworkErrorCode_Lua(lua_State *L)
|
|||
return LuaReturnHR(L, hr);
|
||||
}
|
||||
|
||||
#if HC_PLATFORM == HC_PLATFORM_GDK
|
||||
namespace xbox
|
||||
{
|
||||
namespace httpclient
|
||||
{
|
||||
extern void HCWinHttpSuspend();
|
||||
extern void HCWinHttpResume();
|
||||
}
|
||||
}
|
||||
|
||||
int HCWinHttpSuspend_lua(lua_State *L)
|
||||
{
|
||||
UNREFERENCED_PARAMETER(L);
|
||||
xbox::httpclient::HCWinHttpSuspend();
|
||||
return 0;
|
||||
}
|
||||
|
||||
int HCWinHttpResume_lua(lua_State *L)
|
||||
{
|
||||
UNREFERENCED_PARAMETER(L);
|
||||
xbox::httpclient::HCWinHttpResume();
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
void SetupAPIs_LibHttp()
|
||||
{
|
||||
//lua_register(Data()->L, "HCMemSetFunctions", HCMemSetFunctions_Lua);
|
||||
|
@ -540,6 +594,7 @@ void SetupAPIs_LibHttp()
|
|||
|
||||
lua_register(Data()->L, "HCInitialize", HCInitialize_Lua);
|
||||
lua_register(Data()->L, "HCCleanup", HCCleanup_Lua);
|
||||
lua_register(Data()->L, "HCCleanupAsync", HCCleanupAsync_Lua);
|
||||
lua_register(Data()->L, "HCGetLibVersion", HCGetLibVersion_Lua);
|
||||
//lua_register(Data()->L, "HCAddCallRoutedHandler", HCAddCallRoutedHandler_Lua);
|
||||
//lua_register(Data()->L, "HCRemoveCallRoutedHandler", HCRemoveCallRoutedHandler_Lua);
|
||||
|
@ -586,5 +641,10 @@ void SetupAPIs_LibHttp()
|
|||
lua_register(Data()->L, "HCMockAddMock", HCMockAddMock_Lua);
|
||||
lua_register(Data()->L, "HCMockClearMocks", HCMockClearMocks_Lua);
|
||||
lua_register(Data()->L, "HCMockResponseSetNetworkErrorCode", HCMockResponseSetNetworkErrorCode_Lua);
|
||||
|
||||
#if HC_PLATFORM == HC_PLATFORM_GDK
|
||||
lua_register(Data()->L, "HCWinHttpSuspend", HCWinHttpSuspend_lua);
|
||||
lua_register(Data()->L, "HCWinHttpResume", HCWinHttpResume_lua);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
|
@ -10,14 +10,21 @@ void StopSocialManagerDoWorkHelperCpp();
|
|||
|
||||
int XblInitialize_Lua(lua_State *L)
|
||||
{
|
||||
// Ensure we properly handle a null process queue
|
||||
XTaskQueueSetCurrentProcessTaskQueue(nullptr);
|
||||
|
||||
bool bSetQueue = GetBoolFromLua(L, 1, true);
|
||||
CreateQueueIfNeeded();
|
||||
|
||||
// CODE SNIPPET START: XblInitialize
|
||||
XblInitArgs args = { };
|
||||
args.queue = Data()->queue;
|
||||
|
||||
// CODE SKIP START
|
||||
if(!bSetQueue)
|
||||
{
|
||||
//Use a default task queue. If the global task queue has been initialized to null,
|
||||
//trying to use a default task queue for XblInitialize will return E_NO_TASK_QUEUE.
|
||||
args.queue = nullptr;
|
||||
}
|
||||
// CODE SKIP END
|
||||
#if !(HC_PLATFORM == HC_PLATFORM_XDK || HC_PLATFORM == HC_PLATFORM_UWP)
|
||||
args.scid = "00000000-0000-0000-0000-000076029b4d";
|
||||
// Alternate SCID for XboxLiveE2E Stats 2017 config
|
||||
|
@ -35,7 +42,11 @@ int XblInitialize_Lua(lua_State *L)
|
|||
#endif
|
||||
HRESULT hr = XblInitialize(&args);
|
||||
// CODE SNIPPET END
|
||||
XblDisableAssertsForXboxLiveThrottlingInDevSandboxes(XblConfigSetting::ThisCodeNeedsToBeChanged);
|
||||
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
XblDisableAssertsForXboxLiveThrottlingInDevSandboxes(XblConfigSetting::ThisCodeNeedsToBeChanged);
|
||||
}
|
||||
|
||||
LogToFile("XblInitialize: %s", ConvertHR(hr).c_str());
|
||||
return LuaReturnHR(L, hr);
|
||||
|
@ -206,6 +217,16 @@ int XblAddServiceCallRoutedHandler_Lua(lua_State *L)
|
|||
return LuaReturnHR(L, S_OK);
|
||||
}
|
||||
|
||||
int XblSetOverrideLocale_Lua(lua_State *L)
|
||||
{
|
||||
// CODE SNIPPET START: XblSetOverrideLocale
|
||||
XblSetOverrideLocale("fr-FR");
|
||||
// CODE SNIPPET END
|
||||
|
||||
LogToFile("XblSetOverrideLocale_Lua");
|
||||
return LuaReturnHR(L, S_OK);
|
||||
}
|
||||
|
||||
int XblRemoveServiceCallRoutedHandler_Lua(lua_State *L)
|
||||
{
|
||||
// CODE SNIPPET START: XblContextSettingsRemoveServiceCallRoutedHandler
|
||||
|
@ -341,6 +362,7 @@ void SetupAPIs_Xbl()
|
|||
lua_register(Data()->L, "XblDisableAssertsForXboxLiveThrottlingInDevSandboxes", XblDisableAssertsForXboxLiveThrottlingInDevSandboxes_Lua);
|
||||
lua_register(Data()->L, "XblAddServiceCallRoutedHandler", XblAddServiceCallRoutedHandler_Lua);
|
||||
lua_register(Data()->L, "XblRemoveServiceCallRoutedHandler", XblRemoveServiceCallRoutedHandler_Lua);
|
||||
lua_register(Data()->L, "XblSetOverrideLocale", XblSetOverrideLocale_Lua);
|
||||
|
||||
// errors_c.h
|
||||
lua_register(Data()->L, "XblGetErrorCondition", XblGetErrorCondition_Lua);
|
||||
|
|
|
@ -74,8 +74,37 @@ int XGameUiShowSendGameInviteAsync_Lua(lua_State* L)
|
|||
return LuaReturnHR(L, hr);
|
||||
}
|
||||
|
||||
int XGameUiShowMultiplayerActivityGameInviteAsync_Lua(lua_State* L)
|
||||
{
|
||||
#if HC_PLATFORM == HC_PLATFORM_GDK
|
||||
auto asyncBlock = std::make_unique<XAsyncBlock>();
|
||||
asyncBlock->queue = Data()->queue;
|
||||
asyncBlock->context = nullptr;
|
||||
asyncBlock->callback = [](XAsyncBlock* asyncBlock)
|
||||
{
|
||||
std::unique_ptr<XAsyncBlock> asyncBlockPtr{ asyncBlock }; // Take over ownership of the XAsyncBlock*
|
||||
//HRESULT hr = XGameUiShowMultiplayerActivityGameInviteResult(asyncBlock);
|
||||
HRESULT hr = E_NOTIMPL; // requires GDK 2203+
|
||||
CallLuaFunctionWithHr(hr, "OnXGameUiShowMultiplayerActivityGameInviteAsync");
|
||||
};
|
||||
|
||||
//HRESULT hr = XGameUiShowMultiplayerActivityGameInviteAsync(asyncBlock.get(), Data()->xalUser);
|
||||
HRESULT hr = E_NOTIMPL; // requires GDK 2203+
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
// The call succeeded, so release the std::unique_ptr ownership of XAsyncBlock* since the callback will take over ownership.
|
||||
// If the call fails, the std::unique_ptr will keep ownership and delete the XAsyncBlock*
|
||||
asyncBlock.release();
|
||||
}
|
||||
#else
|
||||
HRESULT hr = S_OK;
|
||||
#endif
|
||||
return LuaReturnHR(L, hr);
|
||||
}
|
||||
|
||||
void SetupAPIs_GRTS()
|
||||
{
|
||||
lua_register(Data()->L, "XGameUiShowMultiplayerActivityGameInviteAsync", XGameUiShowMultiplayerActivityGameInviteAsync_Lua);
|
||||
lua_register(Data()->L, "XGameUiShowSendGameInviteAsync", XGameUiShowSendGameInviteAsync_Lua);
|
||||
lua_register(Data()->L, "XGameUiShowSendGameInviteAsyncToMPMLobby", XGameUiShowSendGameInviteAsyncToMPMLobby_Lua);
|
||||
}
|
||||
|
|
|
@ -299,12 +299,15 @@ HRESULT MultiplayerManagerDoWork()
|
|||
|
||||
case XblMultiplayerEventType::HostChanged:
|
||||
{
|
||||
XblMultiplayerManagerMember member;
|
||||
XblMultiplayerManagerMember member{};
|
||||
hr = XblMultiplayerEventArgsMember(events[i].EventArgsHandle, &member);
|
||||
assert(SUCCEEDED(hr));
|
||||
|
||||
XblMultiplayerManagerMember host{};
|
||||
XblMultiplayerManagerLobbySessionHost(&host);
|
||||
HRESULT hr2 = XblMultiplayerManagerLobbySessionHost(&host);
|
||||
(void)(hr2); //suppress unused warning
|
||||
//If a host leaves and there is no new host, XblMultiplayerEventArgsMember returns 0x80070714 HRESULT_FROM_WIN32(ERROR_RESOURCE_DATA_NOT_FOUND)
|
||||
//Likewise, since there is no host, XblMultiplayerManagerLobbySessionHost returns 0x80070525 HRESULT_FROM_WIN32(ERROR_NO_SUCH_USER)
|
||||
assert((SUCCEEDED(hr) && SUCCEEDED(hr2)) || (hr == 0x80070714 && hr2 == 0x80070525));
|
||||
|
||||
assert(member.Xuid == host.Xuid);
|
||||
|
||||
|
|
|
@ -174,6 +174,19 @@ int XblRealTimeActivitySubscriptionGetId_Lua(lua_State *L)
|
|||
return LuaReturnHR(L, S_OK);
|
||||
}
|
||||
|
||||
// Declare test hook
|
||||
HRESULT XblTestHooksTriggerRTAResync();
|
||||
|
||||
int XblTestHooksTriggerRTAResync_Lua(lua_State *L)
|
||||
{
|
||||
HRESULT hr = S_OK;
|
||||
#if HC_PLATFORM != HC_PLATFORM_IOS
|
||||
// For some reason XCode complaining about link errors with this test hook. Disabling on iOS until that can be investigated
|
||||
hr = XblTestHooksTriggerRTAResync();
|
||||
#endif
|
||||
return LuaReturnHR(L, hr);
|
||||
}
|
||||
|
||||
#if !XSAPI_NO_PPL && HC_PLATFORM_IS_MICROSOFT && HC_PLATFORM != HC_PLATFORM_GDK
|
||||
#include "combaseapi.h"
|
||||
#include "xsapi-cpp/services.h"
|
||||
|
@ -298,6 +311,7 @@ void SetupAPIs_XblRta()
|
|||
lua_register(Data()->L, "XblRealTimeActivityRemoveResyncHandler", XblRealTimeActivityRemoveResyncHandler_Lua);
|
||||
lua_register(Data()->L, "XblRealTimeActivitySubscriptionGetState", XblRealTimeActivitySubscriptionGetState_Lua);
|
||||
lua_register(Data()->L, "XblRealTimeActivitySubscriptionGetId", XblRealTimeActivitySubscriptionGetId_Lua);
|
||||
lua_register(Data()->L, "XblTestHooksTriggerRTAResync", XblTestHooksTriggerRTAResync_Lua);
|
||||
|
||||
#if !XSAPI_NO_PPL && HC_PLATFORM_IS_MICROSOFT && HC_PLATFORM != HC_PLATFORM_GDK
|
||||
lua_register(Data()->L, "XblRtaMultiplayerInit", XblRtaMultiplayerInit_Lua);
|
||||
|
|
|
@ -223,6 +223,7 @@ int XblSocialRemoveSocialRelationshipChangedHandler_Lua(lua_State *L)
|
|||
{
|
||||
// CODE SNIPPET START: XblSocialRemoveSocialRelationshipChangedHandler_C
|
||||
HRESULT hr = XblSocialRemoveSocialRelationshipChangedHandler(Data()->xboxLiveContext, state.socialRelationshipChangedHandlerToken);
|
||||
|
||||
state.socialRelationshipChangedHandlerToken = 0;
|
||||
// CODE SNIPPET END
|
||||
|
||||
|
|
|
@ -61,7 +61,7 @@ JsonBlobMetadataResult DeserializeResult(std::string blobPathRoot, std::string j
|
|||
{
|
||||
metadata.displayName = blobJson["displayName"].GetString();
|
||||
}
|
||||
metadata.length = blobJson["size"].GetInt();
|
||||
metadata.length = static_cast<size_t>(blobJson["size"].GetInt());
|
||||
metadata.positionInList = index;
|
||||
index++;
|
||||
result.m_items.push_back(metadata);
|
||||
|
|
|
@ -344,6 +344,7 @@ void APIRunner_CleanupLeakCheck()
|
|||
|
||||
HRESULT RunTestWithoutCleanup(const std::string& scriptName)
|
||||
{
|
||||
Data()->m_stopTest = false;
|
||||
assert(!scriptName.empty());
|
||||
|
||||
bool testLoaded = LoadFile(scriptName);
|
||||
|
|
|
@ -1,35 +1,35 @@
|
|||
{
|
||||
"commands": [
|
||||
// remove "rem" from lines below to uncomment
|
||||
"commands": [
|
||||
// remove "rem" from lines below to uncomment
|
||||
|
||||
// multi-device examples
|
||||
// one device should host, and one device should join
|
||||
"rem host changetoyouralias",
|
||||
"rem join changetoyouralias",
|
||||
"rem runmultidevicetests",
|
||||
"rem rt mp\\MP_JoinLobbyViaActivity.lua",
|
||||
"rem rt multiplayerManager\\MPM_JoinLobbyViaActivity.lua",
|
||||
"rem rt multiplayerManager\\MPM_JoinFixedGameSession.lua",
|
||||
"rem rt multiplayerManager\\MPM_Match.lua",
|
||||
"rem rt multiplayerManager\\MPM_Invite.lua",
|
||||
"rem rt multiplayerManager\\MPM_InviteUI.lua",
|
||||
// multi-device examples
|
||||
// one device should host, and one device should join
|
||||
"rem host changetoyouralias",
|
||||
"rem join changetoyouralias",
|
||||
"rem runmultidevicetests",
|
||||
"rem rt mp\\MP_JoinLobbyViaActivity.lua",
|
||||
"rem rt multiplayerManager\\MPM_JoinLobbyViaActivity.lua",
|
||||
"rem rt multiplayerManager\\MPM_JoinFixedGameSession.lua",
|
||||
"rem rt multiplayerManager\\MPM_Match.lua",
|
||||
"rem rt multiplayerManager\\MPM_Invite.lua",
|
||||
"rem rt multiplayerManager\\MPM_InviteUI.lua",
|
||||
|
||||
// fault injection
|
||||
"rem faultinjection options 1 7 1", // faultinjection options failFreq freqChangeSpeed freqChangeAmount
|
||||
"rem faultinjection user", // "faultinjection" enables specific fault injection on specific features
|
||||
"rem faultinjection http", // "faultinjection" enables specific fault injection on specific features
|
||||
// fault injection
|
||||
"rem faultinjection options 1 7 1", // faultinjection options failFreq freqChangeSpeed freqChangeAmount
|
||||
"rem faultinjection user", // "faultinjection" enables specific fault injection on specific features
|
||||
"rem faultinjection http", // "faultinjection" enables specific fault injection on specific features
|
||||
|
||||
// mem hook tracking
|
||||
"rem memtrack true", // result logged after runtests or rt command ends
|
||||
// mem hook tracking
|
||||
"rem memtrack true", // result logged after runtests or rt command ends
|
||||
|
||||
// single-device command examples
|
||||
"rem runbarescript misc\\global_state.lua", // "runbarescript" will run the script without any XBL/XAL initializtion for special test needs
|
||||
"rem rt achievements\\achievements_progress_notification.lua",
|
||||
"rem rt achievements\\achievements_manager_performance_test.lua",
|
||||
"rem rt achievements\\achievements_manager_update_achievements.lua",
|
||||
"rem rt gdk-gameinvite\\game-invite.lua", // rt will run a single test
|
||||
"rem repeat social\\social_manager_2.lua", // "repeat" will repeat this single test without cleanup forever
|
||||
"rem loop", // "loop" will loop the entire cmds.json file including cleanup, forever
|
||||
"runtests" // "runtests" will run all the single-device tests
|
||||
]
|
||||
// single-device command examples
|
||||
"rem runbarescript misc\\global_state.lua", // "runbarescript" will run the script without any XBL/XAL initializtion for special test needs
|
||||
"rem rt achievements\\achievements_progress_notification.lua",
|
||||
"rem rt achievements\\achievements_manager_performance_test.lua",
|
||||
"rem rt achievements\\achievements_manager_update_achievements.lua",
|
||||
"rem rt gdk-gameinvite\\game-invite.lua", // rt will run a single test
|
||||
"rem repeat social\\social_manager_2.lua", // "repeat" will repeat this single test without cleanup forever
|
||||
"rem loop", // "loop" will loop the entire cmds.json file including cleanup, forever
|
||||
"rts"
|
||||
]
|
||||
}
|
||||
|
|
|
@ -0,0 +1,29 @@
|
|||
|
||||
test = require 'u-test'
|
||||
common = require 'common'
|
||||
|
||||
function TestGameMpaInviteSend_Handler()
|
||||
XblMultiplayerActivitySetActivityAsync()
|
||||
|
||||
print("LUA: calling XGameInviteRegisterForEvent")
|
||||
XGameInviteRegisterForEvent();
|
||||
print("LUA: called XGameInviteRegisterForEvent")
|
||||
end
|
||||
|
||||
function OnXblMultiplayerActivitySetActivityAsync()
|
||||
XGameUiShowMultiplayerActivityGameInviteAsync();
|
||||
end
|
||||
|
||||
function OnXGameUiShowMultiplayerActivityGameInviteAsync()
|
||||
print("XGameUiShowMultiplayerActivityGameInviteAsync completed");
|
||||
end
|
||||
|
||||
|
||||
function OnXGameInviteRegisterForEvent()
|
||||
print("LUA: OnXGameInviteRegisterForEvent");
|
||||
end
|
||||
|
||||
test.skip = true
|
||||
test.TestGameMpaInviteSend = function()
|
||||
common.init(TestGameMpaInviteSend_Handler)
|
||||
end
|
|
@ -0,0 +1,33 @@
|
|||
test = require 'u-test'
|
||||
common = require 'common'
|
||||
|
||||
callCompleted=false;
|
||||
|
||||
function OnHCHttpCallPerformAsync()
|
||||
print("HCHttpCallPerformAsync Complete")
|
||||
HCHttpCallCloseHandle();
|
||||
callCompleted=true;
|
||||
SetCheckHR(1);
|
||||
end
|
||||
|
||||
function OnHCCleanupAsync()
|
||||
print("HCCleanupAsync Complete")
|
||||
StopManualDispatchThread();
|
||||
test.assert(callCompleted)
|
||||
test.stopTest();
|
||||
end
|
||||
|
||||
test.skip = true
|
||||
test.ManualDispatchTest = function()
|
||||
HCInitialize();
|
||||
XTaskQueueCreate()
|
||||
StartManualDispatchThread();
|
||||
HCHttpCallCreate();
|
||||
HCHttpCallRequestSetUrl();
|
||||
HCHttpCallGetRequestUrl();
|
||||
HCHttpCallRequestSetRequestBodyString();
|
||||
HCHttpCallRequestSetHeader();
|
||||
SetCheckHR(0); -- PerformAsync should fail here
|
||||
HCHttpCallPerformAsync();
|
||||
HCCleanupAsync();
|
||||
end
|
|
@ -0,0 +1,28 @@
|
|||
|
||||
test = require 'u-test'
|
||||
common = require 'common'
|
||||
|
||||
-- Requires manually running local echo server
|
||||
test.skip = true
|
||||
test.websocketCleanupWhileConnected = function()
|
||||
print("websocketCleanupWhileConnected")
|
||||
|
||||
HCInitialize();
|
||||
HCWebSocketCreate();
|
||||
HCWebSocketConnectAsync();
|
||||
end
|
||||
|
||||
function OnHCWebSocketConnectAsync()
|
||||
print("OnHCWebSocketConnectAsync")
|
||||
HCCleanupAsync();
|
||||
end
|
||||
|
||||
function OnHCWebsocketClosed()
|
||||
print("OnHCWebsocketClosed");
|
||||
HCWebSocketCloseHandle();
|
||||
end
|
||||
|
||||
function OnHCCleanupAsync()
|
||||
print("OnHCCleanupAsync");
|
||||
test.stopTest();
|
||||
end
|
|
@ -0,0 +1,28 @@
|
|||
|
||||
test = require 'u-test'
|
||||
common = require 'common'
|
||||
|
||||
-- Requires manually running local echo server
|
||||
test.skip = true
|
||||
test.websocketCleanupWhileConnecting = function()
|
||||
print("websocketCleanupWhileConnecting")
|
||||
|
||||
HCInitialize();
|
||||
HCWebSocketCreate();
|
||||
HCWebSocketConnectAsync();
|
||||
HCCleanupAsync();
|
||||
end
|
||||
|
||||
function OnHCWebSocketConnectAsync()
|
||||
print("OnHCWebSocketConnectAsync")
|
||||
HCWebSocketCloseHandle();
|
||||
end
|
||||
|
||||
function OnHCWebsocketClosed()
|
||||
print("OnHCWebsocketClosed");
|
||||
end
|
||||
|
||||
function OnHCCleanupAsync()
|
||||
print("OnHCCleanupAsync");
|
||||
test.stopTest();
|
||||
end
|
|
@ -0,0 +1,27 @@
|
|||
test = require 'u-test'
|
||||
|
||||
-- Ensure we properly handle a null process queue
|
||||
-- XblInitialize should fail with E_NO_TASK_QUEUE if the process task queue is set to nullptr
|
||||
-- and we try and get a default queue (XblInitArgs queue is set to nullptr)
|
||||
|
||||
test.nullTaskQueue = function()
|
||||
local taskQueue = XTaskQueueGetCurrentProcessTaskQueue()
|
||||
XTaskQueueSetCurrentProcessTaskQueue(0)
|
||||
XalPlatformWebSetEventHandler()
|
||||
XalPlatformStorageSetEventHandlers()
|
||||
XalInitialize()
|
||||
SetCheckHR(0)
|
||||
XblInitialize(0)
|
||||
local hr = GetLastError()
|
||||
print("XblInitialize: hr=" .. hr)
|
||||
print("Expected: -2147024469 (E_NO_TASK_QUEUE)")
|
||||
SetCheckHR(1)
|
||||
test.equal(hr, -2147024469)
|
||||
if hr ~= -2147024469 then -- -2147024469 == 0x800701AB == E_NO_TASK_QUEUE
|
||||
print("Failure. hr=" .. hr)
|
||||
else
|
||||
print("Succeeded.")
|
||||
end
|
||||
XTaskQueueSetCurrentProcessTaskQueue(taskQueue)
|
||||
test.stopTest();
|
||||
end
|
|
@ -0,0 +1,13 @@
|
|||
test = require 'u-test'
|
||||
common = require 'common'
|
||||
|
||||
-- Ensure we properly handle overriding locales
|
||||
function OverrideLocale()
|
||||
print("OverrideLocale");
|
||||
XblSetOverrideLocale();
|
||||
test.stopTest();
|
||||
end
|
||||
|
||||
test.OverrideLocale = function()
|
||||
common.init(OverrideLocale)
|
||||
end
|
|
@ -0,0 +1,19 @@
|
|||
test = require 'u-test'
|
||||
common = require 'common'
|
||||
|
||||
function RTAResync_Handler()
|
||||
StartSocialManagerDoWorkLoop()
|
||||
XblSocialManagerAddLocalUser()
|
||||
end
|
||||
|
||||
function OnXblSocialManagerDoWork_LocalUserAddedEvent()
|
||||
XblTestHooksTriggerRTAResync()
|
||||
Sleep(5000)
|
||||
XblSocialManagerRemoveLocalUser()
|
||||
StopSocialManagerDoWorkLoop()
|
||||
test.stopTest();
|
||||
end
|
||||
|
||||
test.RTAResync = function()
|
||||
common.init(RTAResync_Handler)
|
||||
end
|
|
@ -0,0 +1,37 @@
|
|||
test = require 'u-test'
|
||||
common = require 'common'
|
||||
|
||||
function RTASuspendResume_Handler()
|
||||
isGdk = IsGDKPlatform()
|
||||
if isGdk then
|
||||
XblRealTimeActivityAddConnectionStateChangeHandler();
|
||||
-- Add a real-time handler to force RTA connection
|
||||
XblSocialAddSocialRelationshipChangedHandler();
|
||||
else
|
||||
test.stopTest()
|
||||
end
|
||||
end
|
||||
|
||||
connectCount = 0
|
||||
function OnXblRealTimeActivityAddConnectionStateChangeHandler_Connected()
|
||||
print("RTA connection connected");
|
||||
connectCount = connectCount + 1
|
||||
|
||||
if connectCount == 1 then
|
||||
--HCWinHttpSuspend();
|
||||
else
|
||||
--XblRealTimeActivityRemoveConnectionStateChangeHandler();
|
||||
--XblSocialRemoveSocialRelationshipChangedHandler();
|
||||
test.stopTest()
|
||||
end
|
||||
end
|
||||
|
||||
function OnXblRealTimeActivityAddConnectionStateChangeHandler_Disconnected()
|
||||
print("RTA connection disconnected");
|
||||
HCWinHttpResume();
|
||||
end
|
||||
|
||||
test.skip = true;
|
||||
test.RTASuspendResume = function()
|
||||
common.init(RTASuspendResume_Handler)
|
||||
end
|
|
@ -0,0 +1,611 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Debug|Gaming.Xbox.Scarlett.x64">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>Gaming.Xbox.Scarlett.x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Profile|Gaming.Xbox.Scarlett.x64">
|
||||
<Configuration>Profile</Configuration>
|
||||
<Platform>Gaming.Xbox.Scarlett.x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|Gaming.Xbox.Scarlett.x64">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Gaming.Xbox.Scarlett.x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|Gaming.Xbox.XboxOne.x64">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Gaming.Xbox.XboxOne.x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Profile|Gaming.Xbox.XboxOne.x64">
|
||||
<Configuration>Profile</Configuration>
|
||||
<Platform>Gaming.Xbox.XboxOne.x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Debug|Gaming.Xbox.XboxOne.x64">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>Gaming.Xbox.XboxOne.x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|Gaming.Desktop.x64">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Gaming.Desktop.x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Profile|Gaming.Desktop.x64">
|
||||
<Configuration>Profile</Configuration>
|
||||
<Platform>Gaming.Desktop.x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Debug|Gaming.Desktop.x64">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>Gaming.Desktop.x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<RootNamespace>APIRunner_GDK</RootNamespace>
|
||||
<ProjectGuid>{46F31A54-4C74-41A8-B294-26B5689E51EF}</ProjectGuid>
|
||||
<DefaultLanguage>en-US</DefaultLanguage>
|
||||
<Keyword>Win32Proj</Keyword>
|
||||
<!-- - - - -->
|
||||
<VCProjectVersion>17.0</VCProjectVersion>
|
||||
<TargetRuntime>Native</TargetRuntime>
|
||||
<GDKExtLibNames>Xbox.Services.API.C</GDKExtLibNames>
|
||||
<PreferredToolArchitecture>x64</PreferredToolArchitecture>
|
||||
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
|
||||
</PropertyGroup>
|
||||
<Import Condition="Exists($(ATGBuildProps))" Project="$(ATGBuildProps)" />
|
||||
<Import Project="$(MSBuildThisFileDirectory)..\..\..\Build\xsapi.gdk.bwoi.props" />
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Gaming.Xbox.XboxOne.x64'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
<EmbedManifest>false</EmbedManifest>
|
||||
<GenerateManifest>false</GenerateManifest>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Gaming.Xbox.Scarlett.x64'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
<EmbedManifest>false</EmbedManifest>
|
||||
<GenerateManifest>false</GenerateManifest>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Profile|Gaming.Xbox.XboxOne.x64'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
<EmbedManifest>false</EmbedManifest>
|
||||
<GenerateManifest>false</GenerateManifest>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Profile|Gaming.Xbox.Scarlett.x64'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
<EmbedManifest>false</EmbedManifest>
|
||||
<GenerateManifest>false</GenerateManifest>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Gaming.Xbox.XboxOne.x64'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
<EmbedManifest>false</EmbedManifest>
|
||||
<GenerateManifest>false</GenerateManifest>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Gaming.Xbox.Scarlett.x64'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
<EmbedManifest>false</EmbedManifest>
|
||||
<GenerateManifest>false</GenerateManifest>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Gaming.Desktop.x64'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Profile|Gaming.Desktop.x64'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Gaming.Desktop.x64'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="Shared">
|
||||
<Import Project="..\..\APIExplorer\APIExplorer.Shared.vcxitems" Label="Shared" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Gaming.Xbox.XboxOne.x64'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Gaming.Xbox.Scarlett.x64'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Profile|Gaming.Xbox.XboxOne.x64'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Profile|Gaming.Xbox.Scarlett.x64'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Gaming.Xbox.XboxOne.x64'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Gaming.Xbox.Scarlett.x64'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Gaming.Desktop.x64'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Profile|Gaming.Desktop.x64'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Gaming.Desktop.x64'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Gaming.Xbox.XboxOne.x64'">
|
||||
<ReferencePath>$(Console_SdkLibPath);$(Console_SdkWindowsMetadataPath)</ReferencePath>
|
||||
<LibraryPath>$(Console_SdkLibPath)</LibraryPath>
|
||||
<LibraryWPath>$(Console_SdkLibPath);$(Console_SdkWindowsMetadataPath)</LibraryWPath>
|
||||
<IncludePath>$(Console_SdkIncludeRoot)</IncludePath>
|
||||
<ExecutablePath>$(Console_SdkRoot)bin;$(Console_SdkToolPath);$(ExecutablePath)</ExecutablePath>
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Gaming.Xbox.Scarlett.x64'">
|
||||
<ReferencePath>$(Console_SdkLibPath);$(Console_SdkWindowsMetadataPath)</ReferencePath>
|
||||
<LibraryPath>$(Console_SdkLibPath)</LibraryPath>
|
||||
<LibraryWPath>$(Console_SdkLibPath);$(Console_SdkWindowsMetadataPath)</LibraryWPath>
|
||||
<IncludePath>$(Console_SdkIncludeRoot)</IncludePath>
|
||||
<ExecutablePath>$(Console_SdkRoot)bin;$(Console_SdkToolPath);$(ExecutablePath)</ExecutablePath>
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Profile|Gaming.Xbox.XboxOne.x64'">
|
||||
<ReferencePath>$(Console_SdkLibPath);$(Console_SdkWindowsMetadataPath)</ReferencePath>
|
||||
<LibraryPath>$(Console_SdkLibPath)</LibraryPath>
|
||||
<LibraryWPath>$(Console_SdkLibPath);$(Console_SdkWindowsMetadataPath)</LibraryWPath>
|
||||
<IncludePath>$(Console_SdkIncludeRoot)</IncludePath>
|
||||
<ExecutablePath>$(Console_SdkRoot)bin;$(Console_SdkToolPath);$(ExecutablePath)</ExecutablePath>
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Profile|Gaming.Xbox.Scarlett.x64'">
|
||||
<ReferencePath>$(Console_SdkLibPath);$(Console_SdkWindowsMetadataPath)</ReferencePath>
|
||||
<LibraryPath>$(Console_SdkLibPath)</LibraryPath>
|
||||
<LibraryWPath>$(Console_SdkLibPath);$(Console_SdkWindowsMetadataPath)</LibraryWPath>
|
||||
<IncludePath>$(Console_SdkIncludeRoot)</IncludePath>
|
||||
<ExecutablePath>$(Console_SdkRoot)bin;$(Console_SdkToolPath);$(ExecutablePath)</ExecutablePath>
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Gaming.Xbox.XboxOne.x64'">
|
||||
<ReferencePath>$(Console_SdkLibPath);$(Console_SdkWindowsMetadataPath)</ReferencePath>
|
||||
<LibraryPath>$(Console_SdkLibPath)</LibraryPath>
|
||||
<LibraryWPath>$(Console_SdkLibPath);$(Console_SdkWindowsMetadataPath)</LibraryWPath>
|
||||
<IncludePath>$(Console_SdkIncludeRoot)</IncludePath>
|
||||
<ExecutablePath>$(Console_SdkRoot)bin;$(Console_SdkToolPath);$(ExecutablePath)</ExecutablePath>
|
||||
<LinkIncremental>true</LinkIncremental>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Gaming.Xbox.Scarlett.x64'">
|
||||
<ReferencePath>$(Console_SdkLibPath);$(Console_SdkWindowsMetadataPath)</ReferencePath>
|
||||
<LibraryPath>$(Console_SdkLibPath)</LibraryPath>
|
||||
<LibraryWPath>$(Console_SdkLibPath);$(Console_SdkWindowsMetadataPath)</LibraryWPath>
|
||||
<IncludePath>$(Console_SdkIncludeRoot)</IncludePath>
|
||||
<ExecutablePath>$(Console_SdkRoot)bin;$(Console_SdkToolPath);$(ExecutablePath)</ExecutablePath>
|
||||
<LinkIncremental>true</LinkIncremental>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Gaming.Desktop.x64'">
|
||||
<LibraryPath>$(Console_SdkLibPath);$(LibraryPath)</LibraryPath>
|
||||
<IncludePath>$(Console_SdkIncludeRoot);$(IncludePath)</IncludePath>
|
||||
<ExecutablePath>$(Console_SdkRoot)bin;$(Console_SdkToolPath);$(ExecutablePath)</ExecutablePath>
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Profile|Gaming.Desktop.x64'">
|
||||
<LibraryPath>$(Console_SdkLibPath);$(LibraryPath)</LibraryPath>
|
||||
<IncludePath>$(Console_SdkIncludeRoot);$(IncludePath)</IncludePath>
|
||||
<ExecutablePath>$(Console_SdkRoot)bin;$(Console_SdkToolPath);$(ExecutablePath)</ExecutablePath>
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Gaming.Desktop.x64'">
|
||||
<LibraryPath>$(Console_SdkLibPath);$(LibraryPath)</LibraryPath>
|
||||
<IncludePath>$(Console_SdkIncludeRoot);$(IncludePath)</IncludePath>
|
||||
<ExecutablePath>$(Console_SdkRoot)bin;$(Console_SdkToolPath);$(ExecutablePath)</ExecutablePath>
|
||||
<LinkIncremental>true</LinkIncremental>
|
||||
</PropertyGroup>
|
||||
<!-- XSAPI: add between these lines -->
|
||||
<ItemDefinitionGroup>
|
||||
<ClCompile>
|
||||
<AdditionalIncludeDirectories>$(ProjectDir);Kits\DirectXTK12\Inc;Kits\ATGTK;Kits\ATGTelemetry\Gsdk;$(ProjectDir)..\..\APIExplorer\lua\src;$(ProjectDir)..\..\APIExplorer\Shared;$(ProjectDir)..\..\APIExplorer\Include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup>
|
||||
<ClCompile>
|
||||
<PreprocessorDefinitions>SAMPLE_BUILD_WITH_CPP;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PreprocessorDefinitions Condition="'$(Platform)'=='Gaming.Desktop.x64'">SAMPLE_BUILD_FOR_DESKTOP;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
</ClCompile>
|
||||
</ItemDefinitionGroup>
|
||||
<PropertyGroup>
|
||||
<XblTraceBuildInfo>true</XblTraceBuildInfo>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<XsapiPropsFile>$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), xsapi.staticlib.props))\xsapi.staticlib.props</XsapiPropsFile>
|
||||
<XsapiEnableCpp>1</XsapiEnableCpp>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(XsapiPropsFile)" Condition="Exists($(XsapiPropsFile))" />
|
||||
<PropertyGroup>
|
||||
<XsapiPathsFile>$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), xsapi.paths.props))\xsapi.paths.props</XsapiPathsFile>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(XsapiPathsFile)" Condition="Exists($(XsapiPathsFile))" />
|
||||
<!-- XSAPI: add between these lines -->
|
||||
<!-- BEGIN Shared pre-build / post-build events -->
|
||||
<ItemDefinitionGroup>
|
||||
<PreBuildEvent>
|
||||
<Command>copy /Y "$(ProjectDir)APIRunnerSrc143-MicrosoftGame.Config" "$(ProjectDir)MicrosoftGame.Config"</Command>
|
||||
</PreBuildEvent>
|
||||
<PostBuildEvent>
|
||||
<Command>xcopy /Y /I /E "$(ProjectDir)Assets\*.*" "$(TargetDir)Assets" & xcopy /Y /I /E "$(ProjectDir)Media\*.*" "$(TargetDir)Media" & xcopy /Y /I /E "$(ProjectDir)Media\Fonts\*.*" "$(TargetDir)" & xcopy /Y /I /E "$(ProjectDir)Media\Textures\*.*" "$(TargetDir)"</Command>
|
||||
</PostBuildEvent>
|
||||
</ItemDefinitionGroup>
|
||||
<!-- END Shared pre-build / post-build events -->
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Gaming.Xbox.XboxOne.x64'">
|
||||
<Link>
|
||||
<AdditionalDependencies>dbghelp.lib;uuid.lib;$(Console_Libs);%(XboxExtensionsDependencies);%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
</Link>
|
||||
<ClCompile>
|
||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
|
||||
<AdditionalIncludeDirectories>$(ProjectDir);Kits\ATGTelemetry\GDK;Kits\LiveTK;Kits\DirectXTK12\Inc;Kits\ATGTK;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<AdditionalUsingDirectories />
|
||||
<ForcedUsingFiles />
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
<PreprocessorDefinitions>ATG_ENABLE_TELEMETRY;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<LanguageStandard>stdcpp17</LanguageStandard>
|
||||
</ClCompile>
|
||||
<FXCompile>
|
||||
<ShaderModel>5.1</ShaderModel>
|
||||
</FXCompile>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Gaming.Xbox.Scarlett.x64'">
|
||||
<Link>
|
||||
<AdditionalDependencies>dbghelp.lib;uuid.lib;$(Console_Libs);%(XboxExtensionsDependencies);%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
</Link>
|
||||
<ClCompile>
|
||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
|
||||
<AdditionalIncludeDirectories>$(ProjectDir);Kits\ATGTelemetry\GDK;Kits\LiveTK;Kits\DirectXTK12\Inc;Kits\ATGTK;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<AdditionalUsingDirectories>
|
||||
</AdditionalUsingDirectories>
|
||||
<ForcedUsingFiles>
|
||||
</ForcedUsingFiles>
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
<PreprocessorDefinitions>ATG_ENABLE_TELEMETRY;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<LanguageStandard>stdcpp17</LanguageStandard>
|
||||
</ClCompile>
|
||||
<FXCompile>
|
||||
<ShaderModel>5.1</ShaderModel>
|
||||
</FXCompile>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Profile|Gaming.Xbox.XboxOne.x64'">
|
||||
<Link>
|
||||
<AdditionalDependencies>dbghelp.lib;uuid.lib;$(Console_Libs);%(XboxExtensionsDependencies);%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
</Link>
|
||||
<ClCompile>
|
||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
|
||||
<AdditionalIncludeDirectories>$(ProjectDir);Kits\ATGTelemetry\GDK;Kits\LiveTK;Kits\DirectXTK12\Inc;Kits\ATGTK;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<AdditionalUsingDirectories />
|
||||
<ForcedUsingFiles />
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
<PreprocessorDefinitions>ATG_ENABLE_TELEMETRY;PROFILE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<LanguageStandard>stdcpp17</LanguageStandard>
|
||||
</ClCompile>
|
||||
<FXCompile>
|
||||
<ShaderModel>5.1</ShaderModel>
|
||||
</FXCompile>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Profile|Gaming.Xbox.Scarlett.x64'">
|
||||
<Link>
|
||||
<AdditionalDependencies>dbghelp.lib;uuid.lib;$(Console_Libs);%(XboxExtensionsDependencies);%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
</Link>
|
||||
<ClCompile>
|
||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
|
||||
<AdditionalIncludeDirectories>$(ProjectDir);Kits\ATGTelemetry\GDK;Kits\LiveTK;Kits\DirectXTK12\Inc;Kits\ATGTK;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<AdditionalUsingDirectories>
|
||||
</AdditionalUsingDirectories>
|
||||
<ForcedUsingFiles>
|
||||
</ForcedUsingFiles>
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
<PreprocessorDefinitions>ATG_ENABLE_TELEMETRY;PROFILE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<LanguageStandard>stdcpp17</LanguageStandard>
|
||||
</ClCompile>
|
||||
<FXCompile>
|
||||
<ShaderModel>5.1</ShaderModel>
|
||||
</FXCompile>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Gaming.Xbox.XboxOne.x64'">
|
||||
<Link>
|
||||
<AdditionalDependencies>dbghelp.lib;uuid.lib;$(Console_Libs);%(XboxExtensionsDependencies);%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
</Link>
|
||||
<ClCompile>
|
||||
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
|
||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||
<MinimalRebuild>false</MinimalRebuild>
|
||||
<AdditionalIncludeDirectories>$(ProjectDir);Kits\ATGTelemetry\GDK;Kits\LiveTK;Kits\DirectXTK12\Inc;Kits\ATGTK;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<AdditionalUsingDirectories />
|
||||
<ForcedUsingFiles />
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<PreprocessorDefinitions>ATG_ENABLE_TELEMETRY;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<LanguageStandard>stdcpp17</LanguageStandard>
|
||||
</ClCompile>
|
||||
<FXCompile>
|
||||
<ShaderModel>5.1</ShaderModel>
|
||||
</FXCompile>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Gaming.Xbox.Scarlett.x64'">
|
||||
<Link>
|
||||
<AdditionalDependencies>dbghelp.lib;uuid.lib;$(Console_Libs);%(XboxExtensionsDependencies);%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
</Link>
|
||||
<ClCompile>
|
||||
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
|
||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||
<MinimalRebuild>false</MinimalRebuild>
|
||||
<AdditionalIncludeDirectories>$(ProjectDir);Kits\ATGTelemetry\GDK;Kits\LiveTK;Kits\DirectXTK12\Inc;Kits\ATGTK;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<AdditionalUsingDirectories>
|
||||
</AdditionalUsingDirectories>
|
||||
<ForcedUsingFiles>
|
||||
</ForcedUsingFiles>
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<PreprocessorDefinitions>ATG_ENABLE_TELEMETRY;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<LanguageStandard>stdcpp17</LanguageStandard>
|
||||
</ClCompile>
|
||||
<FXCompile>
|
||||
<ShaderModel>5.1</ShaderModel>
|
||||
</FXCompile>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Gaming.Desktop.x64'">
|
||||
<Link>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<AdditionalDependencies>dbghelp.lib;uuid.lib;$(Console_Libs);%(AdditionalDependencies)</AdditionalDependencies>
|
||||
</Link>
|
||||
<ClCompile>
|
||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
|
||||
<AdditionalIncludeDirectories>$(ProjectDir);Kits\LiveTK;Kits\DirectXTK12\Inc;Kits\ATGTK;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
<PreprocessorDefinitions>NDEBUG;__WRL_NO_DEFAULT_LIB__;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<LanguageStandard>stdcpp17</LanguageStandard>
|
||||
</ClCompile>
|
||||
<FXCompile>
|
||||
<ShaderModel>5.1</ShaderModel>
|
||||
</FXCompile>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Profile|Gaming.Desktop.x64'">
|
||||
<Link>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<AdditionalDependencies>dbghelp.lib;uuid.lib;$(Console_Libs);%(AdditionalDependencies)</AdditionalDependencies>
|
||||
</Link>
|
||||
<ClCompile>
|
||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
|
||||
<AdditionalIncludeDirectories>$(ProjectDir);Kits\LiveTK;Kits\DirectXTK12\Inc;Kits\ATGTK;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
<PreprocessorDefinitions>NDEBUG;__WRL_NO_DEFAULT_LIB__;PROFILE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<LanguageStandard>stdcpp17</LanguageStandard>
|
||||
</ClCompile>
|
||||
<FXCompile>
|
||||
<ShaderModel>5.1</ShaderModel>
|
||||
</FXCompile>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Gaming.Desktop.x64'">
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<AdditionalDependencies>dbghelp.lib;uuid.lib;$(Console_Libs);%(AdditionalDependencies)</AdditionalDependencies>
|
||||
</Link>
|
||||
<ClCompile>
|
||||
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
|
||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||
<MinimalRebuild>false</MinimalRebuild>
|
||||
<AdditionalIncludeDirectories>$(ProjectDir);Kits\LiveTK;Kits\DirectXTK12\Inc;Kits\ATGTK;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<PreprocessorDefinitions>_DEBUG;__WRL_NO_DEFAULT_LIB__;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<LanguageStandard>stdcpp17</LanguageStandard>
|
||||
</ClCompile>
|
||||
<FXCompile>
|
||||
<ShaderModel>5.1</ShaderModel>
|
||||
</FXCompile>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="APIRunner.GDK.h" />
|
||||
<ClInclude Include="Kits\ATGTK\ControllerFont.h" />
|
||||
<ClInclude Include="Kits\ATGTK\CSVReader.h" />
|
||||
<ClInclude Include="Kits\ATGTK\d3dx12.h" />
|
||||
<ClInclude Include="Kits\ATGTK\SampleGUI.h" />
|
||||
<ClInclude Include="Kits\ATGTK\TextConsole.h" />
|
||||
<ClInclude Include="Kits\LiveTK\UITwist.h" />
|
||||
<ClInclude Include="pch.h" />
|
||||
<ClInclude Include="StepTimer.h" />
|
||||
<ClInclude Include="DeviceResources.h" />
|
||||
<ClInclude Include="Kits\LiveTK\LiveInfoHUD.h" />
|
||||
<ClInclude Include="Kits\LiveTK\LiveResources.h" />
|
||||
<ClInclude Include="Kits\ATGTK\ATGColors.h" />
|
||||
<ClInclude Include="Kits\ATGTelemetry\GDK\ATGTelemetry.h" />
|
||||
<ClInclude Include="Kits\ATGTK\Json.h" />
|
||||
<ClInclude Include="Kits\ATGTK\StringUtil.h" />
|
||||
<ClInclude Include="Kits\ATGTK\FindMedia.h" />
|
||||
<ClInclude Include="UIConstants.h" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="..\..\APIExplorer\Shared\Win\pal.cpp" />
|
||||
<ClCompile Include="APIRunner.GDK.cpp" />
|
||||
<ClCompile Include="Kits\ATGTK\SampleGUI.cpp" />
|
||||
<ClCompile Include="Kits\ATGTK\TextConsole.cpp" />
|
||||
<ClCompile Include="Kits\LiveTK\UITwist.cpp" />
|
||||
<ClCompile Include="Main.cpp" />
|
||||
<ClCompile Include="DeviceResources.cpp" />
|
||||
<ClCompile Include="Kits\LiveTK\LiveInfoHUD.cpp" />
|
||||
<ClCompile Include="Kits\LiveTK\LiveResources.cpp" />
|
||||
<ClCompile Include="Kits\ATGTelemetry\GDK\ATGTelemetry.cpp" />
|
||||
<ClCompile Include="Kits\ATGTK\StringUtil.cpp" />
|
||||
<ClCompile Include="pch.cpp">
|
||||
<PrecompiledHeader>Create</PrecompiledHeader>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<MGCCompile Include="MicrosoftGame.Config" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="Media\Fonts\SegoeUI_18.spritefont">
|
||||
<Link>%(Filename)%(Extension)</Link>
|
||||
<DeploymentContent>true</DeploymentContent>
|
||||
</None>
|
||||
<None Include="Media\Fonts\SegoeUI_18_Bold.spritefont">
|
||||
<Link>%(Filename)%(Extension)</Link>
|
||||
<DeploymentContent>true</DeploymentContent>
|
||||
</None>
|
||||
<None Include="Media\Fonts\SegoeUI_18_Italic.spritefont">
|
||||
<DeploymentContent>true</DeploymentContent>
|
||||
</None>
|
||||
<None Include="Media\Fonts\SegoeUI_22.spritefont">
|
||||
<DeploymentContent>true</DeploymentContent>
|
||||
</None>
|
||||
<None Include="Media\Fonts\SegoeUI_22_Bold.spritefont">
|
||||
<DeploymentContent>true</DeploymentContent>
|
||||
</None>
|
||||
<None Include="Media\Fonts\SegoeUI_22_Italic.spritefont">
|
||||
<DeploymentContent>true</DeploymentContent>
|
||||
</None>
|
||||
<None Include="Media\Fonts\SegoeUI_36.spritefont">
|
||||
<Link>%(Filename)%(Extension)</Link>
|
||||
<DeploymentContent>true</DeploymentContent>
|
||||
</None>
|
||||
<None Include="Media\Fonts\SegoeUI_36_Bold.spritefont">
|
||||
<DeploymentContent>true</DeploymentContent>
|
||||
</None>
|
||||
<None Include="Media\Fonts\SegoeUI_36_Italic.spritefont">
|
||||
<DeploymentContent>true</DeploymentContent>
|
||||
</None>
|
||||
<None Include="Media\Fonts\XboxOneControllerLegend.spritefont">
|
||||
<DeploymentContent>true</DeploymentContent>
|
||||
</None>
|
||||
<None Include="Media\Fonts\XboxOneControllerLegendSmall.spritefont">
|
||||
<DeploymentContent>true</DeploymentContent>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="Kits\DirectXTK12\DirectXTK12_GDK_2017.vcxproj">
|
||||
<Project>{052c4858-c76f-4cea-8a1a-e8e5559e67c2}</Project>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<CopyFileToFolders Include="Media\Textures\GamerPic.png">
|
||||
<DeploymentContent>true</DeploymentContent>
|
||||
<DestinationFileName>%(Filename)%(Extension)</DestinationFileName>
|
||||
</CopyFileToFolders>
|
||||
<CopyFileToFolders Include="Assets\Logo.png">
|
||||
<DeploymentContent>true</DeploymentContent>
|
||||
<DestinationFileName>Assets\%(Filename)%(Extension)</DestinationFileName>
|
||||
</CopyFileToFolders>
|
||||
<CopyFileToFolders Include="Assets\SmallLogo.png">
|
||||
<DeploymentContent>true</DeploymentContent>
|
||||
<DestinationFileName>Assets\%(Filename)%(Extension)</DestinationFileName>
|
||||
</CopyFileToFolders>
|
||||
<CopyFileToFolders Include="Assets\SplashScreen.png">
|
||||
<DeploymentContent>true</DeploymentContent>
|
||||
<DestinationFileName>Assets\%(Filename)%(Extension)</DestinationFileName>
|
||||
</CopyFileToFolders>
|
||||
<CopyFileToFolders Include="Assets\StoreLogo.png">
|
||||
<DeploymentContent>true</DeploymentContent>
|
||||
<DestinationFileName>Assets\%(Filename)%(Extension)</DestinationFileName>
|
||||
</CopyFileToFolders>
|
||||
<CopyFileToFolders Include="Assets\Mounted.png">
|
||||
<DeploymentContent>true</DeploymentContent>
|
||||
<DestinationFileName>Assets\%(Filename)%(Extension)</DestinationFileName>
|
||||
</CopyFileToFolders>
|
||||
<CopyFileToFolders Include="Assets\Owned.png">
|
||||
<DeploymentContent>true</DeploymentContent>
|
||||
<DestinationFileName>Assets\%(Filename)%(Extension)</DestinationFileName>
|
||||
</CopyFileToFolders>
|
||||
<CopyFileToFolders Include="Assets\Unmounted.png">
|
||||
<DeploymentContent>true</DeploymentContent>
|
||||
<DestinationFileName>Assets\%(Filename)%(Extension)</DestinationFileName>
|
||||
</CopyFileToFolders>
|
||||
<CopyFileToFolders Include="Assets\SampleUI.csv">
|
||||
<DeploymentContent>true</DeploymentContent>
|
||||
<DestinationFileName>Assets\%(Filename)%(Extension)</DestinationFileName>
|
||||
</CopyFileToFolders>
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
</ImportGroup>
|
||||
</Project>
|
|
@ -0,0 +1,163 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup>
|
||||
<Filter Include="Common">
|
||||
<UniqueIdentifier>916b6ff9-882e-4cf3-93d5-bea41c3e7cd0</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Assets">
|
||||
<UniqueIdentifier>0c10bab7-ebd0-49b3-89a5-df53a9e36cf4</UniqueIdentifier>
|
||||
<Extensions>ico;cur;bmp;dds;dlg;fbx;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tga;tiff;tif;png;wav;mfcribbon-ms</Extensions>
|
||||
</Filter>
|
||||
<Filter Include="ATG Tool Kit">
|
||||
<UniqueIdentifier>fa3bbbb4-fde4-4785-907e-fbb24dde6491</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Xbox Live Tool Kit">
|
||||
<UniqueIdentifier>83010d7a-d0f5-4911-9741-7529fae5301c</UniqueIdentifier>
|
||||
</Filter>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="pch.h" />
|
||||
<ClInclude Include="APIRunner.GDK.h" />
|
||||
<ClInclude Include="StepTimer.h">
|
||||
<Filter>Common</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="DeviceResources.h">
|
||||
<Filter>Common</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Kits\ATGTK\ATGColors.h">
|
||||
<Filter>ATG Tool Kit</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Kits\ATGTK\d3dx12.h">
|
||||
<Filter>ATG Tool Kit</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Kits\ATGTK\FindMedia.h">
|
||||
<Filter>ATG Tool Kit</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Kits\ATGTK\StringUtil.h">
|
||||
<Filter>ATG Tool Kit</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Kits\ATGTK\json.h">
|
||||
<Filter>ATG Tool Kit</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="UIConstants.h" />
|
||||
<ClInclude Include="Kits\ATGTelemetry\GDK\ATGTelemetry.h">
|
||||
<Filter>ATG Tool Kit</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Kits\ATGTK\ControllerFont.h">
|
||||
<Filter>ATG Tool Kit</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Kits\ATGTK\CSVReader.h">
|
||||
<Filter>ATG Tool Kit</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Kits\ATGTK\SampleGUI.h">
|
||||
<Filter>ATG Tool Kit</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Kits\LiveTK\UITwist.h">
|
||||
<Filter>Xbox Live Tool Kit</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Kits\LiveTK\LiveInfoHUD.h">
|
||||
<Filter>Xbox Live Tool Kit</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Kits\LiveTK\LiveResources.h">
|
||||
<Filter>Xbox Live Tool Kit</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Kits\ATGTK\TextConsole.h">
|
||||
<Filter>ATG Tool Kit</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="pch.cpp" />
|
||||
<ClCompile Include="APIRunner.GDK.cpp" />
|
||||
<ClCompile Include="Main.cpp" />
|
||||
<ClCompile Include="DeviceResources.cpp">
|
||||
<Filter>Common</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Kits\ATGTK\StringUtil.cpp">
|
||||
<Filter>ATG Tool Kit</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\APIExplorer\Shared\Win\pal.cpp" />
|
||||
<ClCompile Include="Kits\ATGTelemetry\GDK\ATGTelemetry.cpp">
|
||||
<Filter>ATG Tool Kit</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Kits\ATGTK\SampleGUI.cpp">
|
||||
<Filter>ATG Tool Kit</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Kits\LiveTK\UITwist.cpp">
|
||||
<Filter>Xbox Live Tool Kit</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Kits\LiveTK\LiveInfoHUD.cpp">
|
||||
<Filter>Xbox Live Tool Kit</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Kits\LiveTK\LiveResources.cpp">
|
||||
<Filter>Xbox Live Tool Kit</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Kits\ATGTK\TextConsole.cpp">
|
||||
<Filter>ATG Tool Kit</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="Media\Fonts\SegoeUI_18.spritefont">
|
||||
<Filter>Assets</Filter>
|
||||
</None>
|
||||
<None Include="Media\Fonts\SegoeUI_18_Bold.spritefont">
|
||||
<Filter>Assets</Filter>
|
||||
</None>
|
||||
<None Include="Media\Fonts\SegoeUI_18_Italic.spritefont">
|
||||
<Filter>Assets</Filter>
|
||||
</None>
|
||||
<None Include="Media\Fonts\SegoeUI_22.spritefont">
|
||||
<Filter>Assets</Filter>
|
||||
</None>
|
||||
<None Include="Media\Fonts\SegoeUI_22_Bold.spritefont">
|
||||
<Filter>Assets</Filter>
|
||||
</None>
|
||||
<None Include="Media\Fonts\SegoeUI_22_Italic.spritefont">
|
||||
<Filter>Assets</Filter>
|
||||
</None>
|
||||
<None Include="Media\Fonts\SegoeUI_36.spritefont">
|
||||
<Filter>Assets</Filter>
|
||||
</None>
|
||||
<None Include="Media\Fonts\SegoeUI_36_Bold.spritefont">
|
||||
<Filter>Assets</Filter>
|
||||
</None>
|
||||
<None Include="Media\Fonts\SegoeUI_36_Italic.spritefont">
|
||||
<Filter>Assets</Filter>
|
||||
</None>
|
||||
<None Include="Media\Fonts\XboxOneControllerLegendSmall.spritefont">
|
||||
<Filter>Assets</Filter>
|
||||
</None>
|
||||
<None Include="Media\Fonts\XboxOneControllerLegend.spritefont">
|
||||
<Filter>Assets</Filter>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<MGCCompile Include="MicrosoftGame.Config" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<CopyFileToFolders Include="Media\Textures\GamerPic.png">
|
||||
<Filter>Assets</Filter>
|
||||
</CopyFileToFolders>
|
||||
<CopyFileToFolders Include="Assets\Logo.png">
|
||||
<Filter>Assets</Filter>
|
||||
</CopyFileToFolders>
|
||||
<CopyFileToFolders Include="Assets\SmallLogo.png">
|
||||
<Filter>Assets</Filter>
|
||||
</CopyFileToFolders>
|
||||
<CopyFileToFolders Include="Assets\SplashScreen.png">
|
||||
<Filter>Assets</Filter>
|
||||
</CopyFileToFolders>
|
||||
<CopyFileToFolders Include="Assets\StoreLogo.png">
|
||||
<Filter>Assets</Filter>
|
||||
</CopyFileToFolders>
|
||||
<CopyFileToFolders Include="Assets\Mounted.png">
|
||||
<Filter>Assets</Filter>
|
||||
</CopyFileToFolders>
|
||||
<CopyFileToFolders Include="Assets\Owned.png">
|
||||
<Filter>Assets</Filter>
|
||||
</CopyFileToFolders>
|
||||
<CopyFileToFolders Include="Assets\Unmounted.png">
|
||||
<Filter>Assets</Filter>
|
||||
</CopyFileToFolders>
|
||||
<CopyFileToFolders Include="Assets\SampleUI.csv" />
|
||||
</ItemGroup>
|
||||
</Project>
|
|
@ -0,0 +1,28 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Game configVersion="0">
|
||||
|
||||
<Identity Name="41336MicrosoftATG.XboxLiveE2E" Publisher="CN=A4954634-DF4B-47C7-AB70-D3215D246AF1" Version="1.7.0.0" />
|
||||
|
||||
<ExecutableList>
|
||||
<Executable Name="APIRunner.143.GDK.Src.exe" Id="Game1"/>
|
||||
</ExecutableList>
|
||||
|
||||
<MSAFullTrust>false</MSAFullTrust>
|
||||
<MSAAppId>000000004C26FED0</MSAAppId>
|
||||
<TitleId>76029B4D</TitleId>
|
||||
<PersistentLocalStorage>
|
||||
<SizeMB>1024</SizeMB>
|
||||
</PersistentLocalStorage>
|
||||
|
||||
<ShellVisuals
|
||||
DefaultDisplayName="APIRunner Src GDK Desktop Sample"
|
||||
PublisherDisplayName="Xbox Advanced Technology Group"
|
||||
Description="InGameStore Desktop Sample"
|
||||
Square150x150Logo="Assets\Logo.png"
|
||||
Square44x44Logo="Assets\SmallLogo.png"
|
||||
BackgroundColor="#000000"
|
||||
SplashScreenImage="Assets\SplashScreen.png"
|
||||
StoreLogo="Assets\StoreLogo.png"
|
||||
/>
|
||||
|
||||
</Game>
|
|
@ -2335,7 +2335,7 @@ session.Write(testJson["serverConnectionStringCandidatesJson"]);
|
|||
}
|
||||
|
||||
private:
|
||||
XblFunctionContext m_token{};
|
||||
XblFunctionContext m_token{ 0 };
|
||||
XblContextHandle m_context{ nullptr };
|
||||
std::function<void(const XblMultiplayerSessionChangeEventArgs&)> m_handler;
|
||||
};
|
||||
|
@ -2367,7 +2367,7 @@ session.Write(testJson["serverConnectionStringCandidatesJson"]);
|
|||
}
|
||||
|
||||
private:
|
||||
XblFunctionContext m_token{};
|
||||
XblFunctionContext m_token{ 0 };
|
||||
XblContextHandle m_context{ nullptr };
|
||||
std::function<void()> m_handler;
|
||||
};
|
||||
|
|
|
@ -171,9 +171,10 @@ R"(
|
|||
"isBroadcasting": false,
|
||||
"suggestion": null,
|
||||
"titleHistory": {
|
||||
"TitleName": "Forza Horizon 2",
|
||||
"TitleId": "446059611",
|
||||
"LastTimePlayed": "2015-01-26T22:54:54.6630000Z"
|
||||
"titleName": "Forza Horizon 2",
|
||||
"titleId": "446059611",
|
||||
"lastTimePlayed": "2015-01-26T22:54:54.6630000Z",
|
||||
"lastTimePlayedText": "8 months ago"
|
||||
},
|
||||
"multiplayerSummary": {
|
||||
"InMultiplayerSession": 0,
|
||||
|
@ -264,12 +265,19 @@ public:
|
|||
}
|
||||
else
|
||||
{
|
||||
if (response.HasMember("LastTimePlayed") && response["LastTimePlayed"].IsString())
|
||||
if (response.HasMember("lastTimePlayed") && response["lastTimePlayed"].IsString())
|
||||
{
|
||||
time_t jsonTime;
|
||||
JsonUtils::ExtractJsonTimeT(response, "LastTimePlayed", jsonTime);
|
||||
JsonUtils::ExtractJsonTimeT(response, "lastTimePlayed", jsonTime);
|
||||
VERIFY_ARE_EQUAL_UINT(titleHistory.lastTimeUserPlayed, jsonTime);
|
||||
}
|
||||
|
||||
if (response.HasMember("lastTimePlayedText") && response["lastTimePlayedText"].IsString())
|
||||
{
|
||||
char jsonTimeStr[XBL_LAST_TIME_PLAYED_CHAR_SIZE];
|
||||
JsonUtils::ExtractJsonStringToCharArray(response, "lastTimePlayedText", jsonTimeStr, XBL_LAST_TIME_PLAYED_CHAR_SIZE);
|
||||
VERIFY_ARE_EQUAL_STR(titleHistory.lastTimeUserPlayedText, jsonTimeStr);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -431,7 +439,7 @@ public:
|
|||
jsonResponse.Parse(peoplehubResponse);
|
||||
|
||||
JsonValue titleHistory{ rapidjson::kObjectType };
|
||||
titleHistory.AddMember("LastTimePlayed", JsonValue{ rapidjson::kNullType }, jsonResponse.GetAllocator());
|
||||
titleHistory.AddMember("lastTimePlayed", JsonValue{ rapidjson::kNullType }, jsonResponse.GetAllocator());
|
||||
jsonResponse["people"][0]["titleHistory"] = titleHistory.Move();
|
||||
|
||||
HttpMock peopleHubMock{ "GET", "https://peoplehub.xboxlive.com/", 200, jsonResponse };
|
||||
|
|
|
@ -600,7 +600,7 @@ public:
|
|||
}
|
||||
|
||||
std::shared_ptr<XblContext> m_xblContext;
|
||||
XblFunctionContext m_token;
|
||||
XblFunctionContext m_token{ 0 };
|
||||
};
|
||||
|
||||
DEFINE_TEST_CASE(TestRTATitlePresence)
|
||||
|
@ -666,7 +666,7 @@ public:
|
|||
}
|
||||
|
||||
std::shared_ptr<XblContext> m_xblContext;
|
||||
XblFunctionContext m_token;
|
||||
XblFunctionContext m_token{ 0 };
|
||||
};
|
||||
|
||||
DEFINE_TEST_CASE(TestRTADevicePresence)
|
||||
|
|
|
@ -190,6 +190,7 @@ public:
|
|||
for (auto& subscription : subscriptions)
|
||||
{
|
||||
VERIFY_SUCCEEDED(rtaManager->RemoveSubscription(xboxLiveContext->User(), subscription));
|
||||
subscription = std::make_shared<TestSubscription>(subscription->Uri);
|
||||
VERIFY_SUCCEEDED(rtaManager->AddSubscription(xboxLiveContext->User(), subscription));
|
||||
VERIFY_SUCCEEDED(rtaManager->RemoveSubscription(xboxLiveContext->User(), subscription));
|
||||
}
|
||||
|
@ -221,6 +222,7 @@ public:
|
|||
monitor.Connecting.Wait();
|
||||
|
||||
VERIFY_SUCCEEDED(rtaManager->RemoveSubscription(xboxLiveContext->User(), subscription));
|
||||
subscription = std::make_shared<TestSubscription>();
|
||||
|
||||
websocketConnectCompletion.Set();
|
||||
|
||||
|
|
|
@ -34,9 +34,10 @@ const char defaultPeoplehubTemplate[] = R"(
|
|||
"isBroadcasting": false,
|
||||
"titleHistory":
|
||||
{
|
||||
"TitleName": "Forza Horizon 2",
|
||||
"TitleId": "1234",
|
||||
"LastTimePlayed": "2015-01-26T22:54:54.6630000Z"
|
||||
"titleName": "Forza Horizon 2",
|
||||
"titleId": "1234",
|
||||
"lastTimePlayed": "2015-01-26T22:54:54.6630000Z",
|
||||
"lastTimePlayedText": "8 months ago"
|
||||
},
|
||||
"suggestion": null,
|
||||
"multiplayerSummary": {
|
||||
|
@ -570,6 +571,7 @@ public:
|
|||
// title history tests
|
||||
VERIFY_IS_TRUE(user->titleHistory.hasUserPlayed);
|
||||
VERIFY_IS_TRUE(VerifyTime(user->titleHistory.lastTimeUserPlayed, "2015-01-26T22:54:54.6630Z"));
|
||||
VERIFY_ARE_EQUAL_STR("8 months ago", user->titleHistory.lastTimeUserPlayedText);
|
||||
}
|
||||
|
||||
VERIFY_SUCCEEDED(XblSocialManagerDestroySocialUserGroup(filterGroup));
|
||||
|
|
|
@ -25,13 +25,25 @@
|
|||
<XsapiToolset Condition="'$(PlatformToolset)'=='v140'">140</XsapiToolset>
|
||||
<XsapiToolset Condition="'$(PlatformToolset)'=='v141'">141</XsapiToolset>
|
||||
<XsapiToolset Condition="'$(PlatformToolset)'=='v142'">142</XsapiToolset>
|
||||
<XsapiToolset Condition="'$(PlatformToolset)'=='v143'">142</XsapiToolset>
|
||||
<XsapiToolset Condition="'$(XsapiToolset)'==''">141</XsapiToolset>
|
||||
<XsapiProjectName Condition="'$(XsapiPlatform)' != 'Android'">Microsoft.Xbox.Services.$(XsapiToolset).$(XsapiPlatform).Cpp</XsapiProjectName>
|
||||
<XsapiProjectName Condition="'$(XsapiPlatform)' == 'GDK'">Microsoft.Xbox.Services.$(XsapiToolset).GDK.C</XsapiProjectName>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(XsapiBuildFromSource)' == ''">
|
||||
<XsapiBuildFromSource>true</XsapiBuildFromSource>
|
||||
<!--Support for older XsapiBuildFromSource prop name that controlled both XSAPI & libHttpClient -->
|
||||
<PropertyGroup Condition="'$(XsapiBuildFromSource)' != ''">
|
||||
<XsapiLibBuildFromSource>$(XsapiBuildFromSource)</XsapiLibBuildFromSource>
|
||||
<LibHttpClientBuildFromSource>$(XsapiBuildFromSource)</LibHttpClientBuildFromSource>
|
||||
</PropertyGroup>
|
||||
|
||||
<!--Turn build from source on when including this file -->
|
||||
<PropertyGroup Condition="'$(XsapiLibBuildFromSource)' == ''">
|
||||
<XsapiLibBuildFromSource>true</XsapiLibBuildFromSource>
|
||||
<XsapiBuildFromSource>true</XsapiBuildFromSource> <!--Support for older GDKs which still use the XsapiBuildFromSource prop -->
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(LibHttpClientBuildFromSource)' == ''">
|
||||
<LibHttpClientBuildFromSource>true</LibHttpClientBuildFromSource>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(XsapiAddProjectReference)' == ''">
|
||||
|
@ -71,7 +83,7 @@
|
|||
<ClCompile>
|
||||
<PreprocessorDefinitions>_NO_ASYNCRTIMP;_NO_PPLXIMP;_NO_XSAPIIMP;XBL_API_EXPORT;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PreprocessorDefinitions Condition="'$(XsapiPlatform)' == 'GDK'">HC_WINHTTP_WEBSOCKETS;HC_PLATFORM_IS_MICROSOFT=1;HC_PLATFORM_GDK=4;HC_PLATFORM=HC_PLATFORM_GDK;HC_DATAMODEL=HC_DATAMODEL_LLP64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PreprocessorDefinitions Condition="'$(XsapiBuildFromSource)' != ''">XSAPI_BUILT_FROM_SOURCE=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PreprocessorDefinitions Condition="'$(XsapiLibBuildFromSource)' != ''">XSAPI_BUILT_FROM_SOURCE=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<AdditionalIncludeDirectories>;$(XsapiInclude);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
|
@ -102,6 +114,7 @@
|
|||
<VisualStudioMajorVersion Condition="'$(VisualStudioVersion)' == '14.0'">14</VisualStudioMajorVersion>
|
||||
<VisualStudioMajorVersion Condition="'$(VisualStudioVersion)' == '15.0'">15</VisualStudioMajorVersion>
|
||||
<VisualStudioMajorVersion Condition="'$(VisualStudioVersion)' == '16.0'">15</VisualStudioMajorVersion>
|
||||
<VisualStudioMajorVersion Condition="'$(VisualStudioVersion)' == '17.0'">15</VisualStudioMajorVersion>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemDefinitionGroup>
|
||||
|
|
Загрузка…
Ссылка в новой задаче