#include "ECTrainer.h"
#include "TobiiREST.h"
// コンストラクタ
TobiiREST::TobiiREST(ECTrainer* pEct)
:BaseProcess(pEct), _Start(false) {
}
// 初期化
bool TobiiREST::Init() {
try
{
json::value json = REST_Handler::POST_Request(SERVER _T("/api/projects")).extract_json().get();
_ProjectID = json[_T("pr_id")].as_string();
std::wcout << "prId=" << _ProjectID << std::endl;
json::value postData;
postData[L"pa_project"] = json::value::string(_ProjectID);
json = REST_Handler::POST_Request(SERVER _T("/api/participants"), postData).extract_json().get();
_ParticipantID = json[_T("pa_id")].as_string();
std::wcout << "paId=" << _ParticipantID << std::endl;
return true;
}
catch (const std::exception & e)
{
std::cout << "Error " << e.what() << std::endl;
return false;
}
}
// ループ
bool TobiiREST::MainLoop() {
while (_pEct->IsAppRun()) {
if (_Start) {
_Start = false;
if (StartCalibration()) {
int res = GetCalibResult();
if (res != 0) _pEct->SetCalibResult(res);
}
}
Sleep(1);
}
return true;
}
// キャリブレーション開始
bool TobiiREST::StartCalibration() {
try
{
json::value postData;
postData[L"ca_project"] = json::value::string(_ProjectID);
postData[L"ca_type"] = json::value::string(L"default");
postData[L"ca_participant"] = json::value::string(_ParticipantID);
json::value json = REST_Handler::POST_Request(SERVER _T("/api/calibrations"), postData).extract_json().get();
_CalibrationID = json[_T("ca_id")].as_string();
std::wcout << "caId=" << _CalibrationID << std::endl;
std::wstring url = SERVER _T("/api/calibrations/") + _CalibrationID + _T("/start");
json = REST_Handler::POST_Request(url.c_str()).extract_json().get();
std::wcout << "Calibration start" << std::endl;
return true;
}
catch (const std::exception& e)
{
std::cout << "Error " << e.what() << std::endl;
return false;
}
}
// GetCalibResult
// 戻り値 -1:エラー 0:失敗 1:成功
int TobiiREST::GetCalibResult() {
try
{
std::wstring url = SERVER _T("/api/calibrations/") + _CalibrationID + _T("/status");
std::vector<std::wstring> values;
values.push_back(_T("failed"));
values.push_back(_T("calibrated"));
std::wstring status = REST_Handler::WaitForStatus(url.c_str(), _T("ca_state"), values);
if (status == _T("failed")) {
std::wcout << _T("Calibration failed.") << std::endl;
return -1;
}
std::wcout << _T("Calibration successful.") << std::endl;
return 1;
}
catch (const std::exception & e)
{
std::cout << "Error " << e.what() << std::endl;
return 0;
}
}
// バッテリー残量取得
int TobiiREST::BatteryLevel() {
try {
std::wstring url = SERVER _T("/api/system/status");
auto response = REST_Handler::GET_Request(url.c_str());
json::value json = response.extract_json().get();
return json[L"sys_battery"][L"level"].as_integer();
} catch (const std::exception & e) {
std::cout << "Error " << e.what() << std::endl;
return 0;
}
}