Adding Stats test to the scenario litst.
This commit is contained in:
Jerry Richards 2017-07-25 16:08:34 -06:00 коммит произвёл Jason Sandlin
Родитель dbcd219e65
Коммит 0cb2465542
4 изменённых файлов: 180 добавлений и 46 удалений

Просмотреть файл

@ -24,6 +24,11 @@ using namespace Windows::UI::Xaml::Input;
using namespace Windows::UI::Xaml::Media;
using namespace Windows::UI::Xaml::Navigation;
using namespace Microsoft::Xbox::Services;
using namespace Microsoft::Xbox::Services::Leaderboard;
using namespace Microsoft::Xbox::Services::Statistics;
using namespace Microsoft::Xbox::Services::Statistics::Manager;
struct ScenarioDescriptionItem
{
int tag;
@ -34,6 +39,8 @@ enum ScenarioItemTag
{
Scenario_GetUserProfileAsync = 1,
Scenario_GetSocialRelationshipsAsync,
Scenario_WriteStat,
Scenario_ReadStat,
Scenario_VerifyStringAsync
//Scenario_GetUserProfilesForSocialGroupAsync
};
@ -42,6 +49,8 @@ ScenarioDescriptionItem ScenarioDescriptions[] =
{
{ Scenario_GetUserProfileAsync, L"Get user profile" },
{ Scenario_GetSocialRelationshipsAsync, L"Get social list" },
{ Scenario_WriteStat, L"Write Stat" },
{ Scenario_ReadStat, L"Read Stat" },
};
bool MainPage::RunScenario(int selectedTag)
@ -54,9 +63,11 @@ bool MainPage::RunScenario(int selectedTag)
switch (selectedTag)
{
case Scenario_GetUserProfileAsync: m_scenarios.Scenario_GetUserProfileAsync(this, m_xboxLiveContext); break;
case Scenario_GetSocialRelationshipsAsync: m_scenarios.Scenario_GetSocialRelationshipsAsync(this, m_xboxLiveContext); break;
default: return false;
case Scenario_GetUserProfileAsync: m_scenarios.Scenario_GetUserProfileAsync(this, m_xboxLiveContext); break;
case Scenario_GetSocialRelationshipsAsync: m_scenarios.Scenario_GetSocialRelationshipsAsync(this, m_xboxLiveContext); break;
case Scenario_WriteStat: m_scenarios.Scenario_WriteStat(this, m_xboxLiveContext); break;
case Scenario_ReadStat: m_scenarios.Scenario_ReadStat(this, m_xboxLiveContext); break;
default: return false;
}
return true;
@ -65,21 +76,22 @@ bool MainPage::RunScenario(int selectedTag)
MainPage::MainPage()
{
InitializeComponent();
this->CoreDispatcher = Windows::UI::Xaml::Window::Current->CoreWindow->Dispatcher;
m_user = ref new Microsoft::Xbox::Services::System::XboxLiveUser();
m_user->SignOutCompleted += ref new EventHandler<Microsoft::Xbox::Services::System::SignOutCompletedEventArgs^ >
([this](Platform::Object^, Microsoft::Xbox::Services::System::SignOutCompletedEventArgs^ args)
{
CoreDispatcher->RunAsync(
Windows::UI::Core::CoreDispatcherPriority::Normal,
ref new Windows::UI::Core::DispatchedHandler([this, args]()
{
CoreDispatcher->RunAsync(
Windows::UI::Core::CoreDispatcherPriority::Normal,
ref new Windows::UI::Core::DispatchedHandler([this, args]()
{
this->UserInfoLabel->Text = L"user signed out";
Log(L"----------------");
LogFormat(L"User %s signed out", args->User->Gamertag->Data());
}));
});
this->UserInfoLabel->Text = L"user signed out";
Log(L"----------------");
LogFormat(L"User %s signed out", args->User->Gamertag->Data());
}));
});
for (ScenarioDescriptionItem scenario : ScenarioDescriptions)
{
@ -89,14 +101,84 @@ MainPage::MainPage()
this->ScenarioListBox->Items->Append(listBoxItem);
}
StartTimerAndRegisterHandler();
this->ScenarioListBox->SelectedIndex = 0;
SignInSilently();
}
void MainPage::ScenarioListBox_DoubleTapped(
Platform::Object^ sender,
Windows::UI::Xaml::Input::DoubleTappedRoutedEventArgs^ e
)
void MainPage::StartTimerAndRegisterHandler()
{
auto timer = ref new Windows::UI::Xaml::DispatcherTimer();
TimeSpan ts;
ts.Duration = 500;
timer->Interval = ts;
timer->Start();
auto registrationToken = timer->Tick += ref new EventHandler<Object^>(this, &MainPage::OnTick);
}
void MainPage::OnTick(Object^ sender, Object^ e)
{
StatisticManager^ mgr = Microsoft::Xbox::Services::Statistics::Manager::StatisticManager::SingletonInstance;
if (mgr != nullptr)
{
auto EventList = mgr->DoWork();
for (StatisticEvent^ Event : EventList)
{
if (Event->ErrorCode != 0)
{
LogFormat(L"DoWork error: %s", Event->ErrorMessage->Data());
}
StatisticEventArgs^ args;
switch (Event->EventType)
{
case StatisticEventType::LocalUserAdded:
LogFormat(L"DoWork LocalUserAdded: %s", Event->User->Gamertag->Data());
break;
case StatisticEventType::LocalUserRemoved:
LogFormat(L"DoWork LocalUserRemoved: %s", Event->User->Gamertag->Data());
break;
case StatisticEventType::GetLeaderboardComplete:
{
Log(L"DoWork GetLeaderboardComplete:");
LeaderboardResultEventArgs^ LbResultEventArgs = safe_cast<LeaderboardResultEventArgs^>(Event->EventArgs);
LeaderboardResult^ LbResult = LbResultEventArgs->Result;
for (LeaderboardRow^ row : LbResult->Rows)
{
String^ colValues;
for (auto columnValue : row->Values)
{
colValues = colValues + L" ";
colValues = colValues + columnValue;
}
LogFormat(L"%16s %6s %12s %8s\n", row->Gamertag->Data(), row->Rank.ToString()->Data(), row->Percentile.ToString()->Data(), colValues->Data());
}
}
break;
case StatisticEventType::StatisticUpdateComplete:
LogFormat(L"DoWork StatisticUpdateComplete: %s", Event->User->Gamertag->ToString());
IVectorView<String^>^ stats = mgr->GetStatisticNames(Event->User);
for (String^ stat : stats)
{
LogFormat(L"DoWork Stat: %s", stat->Data());
}
break;
}
}
}
}
void MainPage::ScenarioListBox_DoubleTapped(Platform::Object^ sender, Windows::UI::Xaml::Input::DoubleTappedRoutedEventArgs^ e)
{
RunSelectedScenario();
}
@ -138,7 +220,7 @@ void MainPage::RunSelectedScenario()
{
if (this->ScenarioListBox->SelectedItems->Size == 1)
{
ClearLogs();
//ClearLogs();
ListBoxItem^ selectedItem = safe_cast<ListBoxItem^>(this->ScenarioListBox->SelectedItem);
int selectedTag = safe_cast<int>(selectedItem->Tag);
RunScenario(selectedTag);
@ -147,7 +229,7 @@ void MainPage::RunSelectedScenario()
void MainPage::RunAllButton_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
{
ClearLogs();
//ClearLogs();
int scenarioTag = 1;
for (;;)
{
@ -173,8 +255,7 @@ void MainPage::SignIn()
Log(this->UserInfoLabel->Text);
auto asyncOp = m_user->SignInAsync(this->CoreDispatcher);
create_task(asyncOp)
.then([this](task<Microsoft::Xbox::Services::System::SignInResult^> t)
create_task(asyncOp).then([this](task<Microsoft::Xbox::Services::System::SignInResult^> t)
{
try
{
@ -182,6 +263,11 @@ void MainPage::SignIn()
if (result->Status == Microsoft::Xbox::Services::System::SignInStatus::Success)
{
m_xboxLiveContext = ref new Microsoft::Xbox::Services::XboxLiveContext(m_user);
StatisticManager^ mgr = StatisticManager::SingletonInstance;
if (mgr == nullptr) return t;
mgr->AddLocalUser(m_xboxLiveContext->User);
this->UserInfoLabel->Text = L"Sign in succeeded";
}
else if (result->Status == Microsoft::Xbox::Services::System::SignInStatus::UserCancel)
@ -207,8 +293,7 @@ void MainPage::SignInSilently()
Log(this->UserInfoLabel->Text);
auto asyncOp = m_user->SignInSilentlyAsync(nullptr);
create_task(asyncOp)
.then([this](task<Microsoft::Xbox::Services::System::SignInResult^> t)
create_task(asyncOp).then([this](task<Microsoft::Xbox::Services::System::SignInResult^> t)
{
try
{
@ -216,6 +301,11 @@ void MainPage::SignInSilently()
if (result->Status == Microsoft::Xbox::Services::System::SignInStatus::Success)
{
m_xboxLiveContext = ref new Microsoft::Xbox::Services::XboxLiveContext(m_user);
StatisticManager^ mgr = StatisticManager::SingletonInstance;
if (mgr == nullptr) return t;
mgr->AddLocalUser(m_xboxLiveContext->User);
this->UserInfoLabel->Text = L"SignIn Silent succeeded";
}
else if (result->Status == Microsoft::Xbox::Services::System::SignInStatus::UserInteractionRequired)

Просмотреть файл

@ -14,13 +14,14 @@
namespace Social_CppCx_140
{
/// <summary>
/// An empty page that can be used on its own or navigated to within a Frame.
/// </summary>
public ref class MainPage sealed
{
public:
MainPage();
/// <summary>
/// An empty page that can be used on its own or navigated to within a Frame.
/// </summary>
public ref class MainPage sealed
{
public:
MainPage();
void OnTick(Object^ sender, Object^ e);
internal:
void ClearLogs();
@ -29,6 +30,8 @@ namespace Social_CppCx_140
property Windows::UI::Core::CoreDispatcher^ CoreDispatcher;
private:
void StartTimerAndRegisterHandler();
void ScenarioListBox_DoubleTapped(Platform::Object^ sender, Windows::UI::Xaml::Input::DoubleTappedRoutedEventArgs^ e);
void RunButton_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
void RunAllButton_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
@ -44,5 +47,5 @@ namespace Social_CppCx_140
Microsoft::Xbox::Services::System::XboxLiveUser^ m_user;
Microsoft::Xbox::Services::XboxLiveContext^ m_xboxLiveContext;
Scenarios m_scenarios;
};
};
}

Просмотреть файл

@ -27,6 +27,10 @@ using namespace Microsoft::Xbox::Services::Social;
using namespace Microsoft::Xbox::Services::System;
using namespace Microsoft::Xbox::Services::Presence;
using namespace Microsoft::Xbox::Services::Statistics;
using namespace Microsoft::Xbox::Services::Statistics::Manager;
using namespace Microsoft::Xbox::Services::Leaderboard;
std::mutex g_blockOfTextLock;
void Scenarios::Active_RealTimeActivity(_In_ MainPage^ mainPage, Microsoft::Xbox::Services::XboxLiveContext^ xboxLiveContext)
@ -37,22 +41,22 @@ void Scenarios::Active_RealTimeActivity(_In_ MainPage^ mainPage, Microsoft::Xbox
xboxLiveContext->PresenceService->SubscribeToDevicePresenceChange(
xboxLiveContext->User->XboxUserId
);
);
xboxLiveContext->PresenceService->SubscribeToTitlePresenceChange(
xboxLiveContext->User->XboxUserId,
xboxLiveContext->User->XboxUserId,
0x5D2A2BCA
);
);
EventHandler<DevicePresenceChangeEventArgs^>^ devicePresenceChangeEvent = ref new EventHandler<DevicePresenceChangeEventArgs^>(
[this, mainPage](Platform::Object^, DevicePresenceChangeEventArgs^ eventArgs)
[this, mainPage](Platform::Object^, DevicePresenceChangeEventArgs^ eventArgs)
{
OnDevicePresenceChange(mainPage, eventArgs);
});
m_devicePresenceChangeEventToken = xboxLiveContext->PresenceService->DevicePresenceChanged += devicePresenceChangeEvent;
EventHandler<TitlePresenceChangeEventArgs^>^ titlePresenceChangeEvent = ref new EventHandler<TitlePresenceChangeEventArgs^>(
[this, mainPage](Platform::Object^, TitlePresenceChangeEventArgs^ eventArgs)
[this, mainPage](Platform::Object^, TitlePresenceChangeEventArgs^ eventArgs)
{
OnTitlePresenceChange(mainPage, eventArgs);
});
@ -70,7 +74,7 @@ void Scenarios::Scenario_GetUserProfileAsync(_In_ MainPage^ ui, Microsoft::Xbox:
auto asyncOp = xboxLiveContext->ProfileService->GetUserProfileAsync(xboxLiveContext->User->XboxUserId);
create_task(asyncOp)
.then([this, ui](task<XboxUserProfile^> resultTask)
.then([this, ui](task<XboxUserProfile^> resultTask)
{
try
{
@ -105,10 +109,10 @@ void Scenarios::Scenario_GetSocialRelationshipsAsync(_In_ MainPage^ ui, Microsof
{
ui->Log(L"Calling get_social_relationships...");
PresenceData^ presenceData = ref new PresenceData(L"12200100-88da-4d8b-af88-e38f5d2a2bca", L"rpdemo" );
PresenceData^ presenceData = ref new PresenceData(L"12200100-88da-4d8b-af88-e38f5d2a2bca", L"rpdemo");
auto pAsyncOp2 = xboxLiveContext->PresenceService->SetPresenceAsync(true, presenceData);
create_task(pAsyncOp2)
.then([this,ui](task<void> resultTask)
.then([this, ui](task<void> resultTask)
{
try
{
@ -116,7 +120,7 @@ void Scenarios::Scenario_GetSocialRelationshipsAsync(_In_ MainPage^ ui, Microsof
ui->LogFormat(L"SetPresenceAsync succeeded");
}
catch (Platform::Exception^ ex)
{
{
ui->LogFormat(L"SetPresenceAsync failed: 0x%0.8x", ex->HResult);
}
});
@ -131,7 +135,7 @@ void Scenarios::Scenario_GetSocialRelationshipsAsync(_In_ MainPage^ ui, Microsof
SocialRelationship::All,
startIndex,
maxItems
);
);
create_task(pAsyncOp)
.then([this, maxItems, ui](task<XboxSocialRelationshipResult^> resultTask)
@ -160,14 +164,50 @@ void Scenarios::Scenario_GetSocialRelationshipsAsync(_In_ MainPage^ ui, Microsof
}
}
catch (Platform::Exception^ ex)
{
{
ui->LogFormat(L"get_social_relationships failed: 0x%0.8x", ex->HResult);
}
});
}
void
Scenarios::OnDevicePresenceChange(_In_ MainPage^ ui, _In_ DevicePresenceChangeEventArgs^ args)
void Scenarios::Scenario_WriteStat(_In_ MainPage^ ui, Microsoft::Xbox::Services::XboxLiveContext^ xboxLiveContext)
{
StatisticManager^ mgr = StatisticManager::SingletonInstance;
if (mgr == nullptr) return;
String^ statName = L"HighScore";
long long statValue = 1001;
mgr->SetStatisticIntegerData(xboxLiveContext->User, statName, statValue);
mgr->RequestFlushToService(xboxLiveContext->User);
ui->LogFormat(L"WriteStat: %s : %s", statName->Data(), statValue.ToString()->Data());
}
void Scenarios::Scenario_ReadStat(_In_ MainPage^ ui, Microsoft::Xbox::Services::XboxLiveContext^ xboxLiveContext)
{
static bool once = false;
StatisticManager^ mgr = StatisticManager::SingletonInstance;
if (mgr == nullptr) return;
if (!once)
{
once = true;
xboxLiveContext->Settings->ServiceCallRouted += ref new EventHandler<XboxServiceCallRoutedEventArgs^>([=](Object^, XboxServiceCallRoutedEventArgs^ args)
{
ui->LogFormat(L"[URL]: %s %s", args->HttpMethod->Data(), args->Url->AbsoluteUri->Data());
ui->LogFormat(L"[Response]: %s %s", args->HttpStatus.ToString()->Data(), args->ResponseBody->Data());
});
}
String^ statName = L"HighScore";
LeaderboardQuery^ Query = ref new LeaderboardQuery();
mgr->GetLeaderboard(xboxLiveContext->User, statName, Query);
}
void Scenarios::OnDevicePresenceChange(_In_ MainPage^ ui, _In_ DevicePresenceChangeEventArgs^ args)
{
std::lock_guard<std::mutex> lockGuard(g_blockOfTextLock);
@ -179,8 +219,7 @@ Scenarios::OnDevicePresenceChange(_In_ MainPage^ ui, _In_ DevicePresenceChangeEv
ui->LogFormat(L"Is user logged in: %S", args->IsUserLoggedOnDevice ? L"True" : L"False");
}
void
Scenarios::OnTitlePresenceChange(_In_ MainPage^ ui, _In_ TitlePresenceChangeEventArgs^ args)
void Scenarios::OnTitlePresenceChange(_In_ MainPage^ ui, _In_ TitlePresenceChangeEventArgs^ args)
{
std::lock_guard<std::mutex> lockGuard(g_blockOfTextLock);

Просмотреть файл

@ -19,6 +19,8 @@ namespace Social_CppCx_140
void Active_RealTimeActivity(_In_ MainPage^ mainPage, Microsoft::Xbox::Services::XboxLiveContext^ xboxLiveContext);
void Scenario_GetUserProfileAsync(_In_ MainPage^ mainPage, Microsoft::Xbox::Services::XboxLiveContext^ xboxLiveContext);
void Scenario_GetSocialRelationshipsAsync(_In_ MainPage^ mainPage, Microsoft::Xbox::Services::XboxLiveContext^ xboxLiveContext);
void Scenario_WriteStat(_In_ MainPage^ mainPage, Microsoft::Xbox::Services::XboxLiveContext^ xboxLiveContext);
void Scenario_ReadStat(_In_ MainPage^ mainPage, Microsoft::Xbox::Services::XboxLiveContext^ xboxLiveContext);
private:
Windows::Foundation::EventRegistrationToken m_devicePresenceChangeEventToken;