diff options
author | fearlessTobi <[email protected]> | 2018-09-16 20:05:51 +0200 |
---|---|---|
committer | fearlessTobi <[email protected]> | 2018-10-02 15:30:48 +0200 |
commit | 4d139943f2407144d5f8e3dc5a673f24850d43d0 (patch) | |
tree | be24285a32c2b72b9756b69fd614f3d45c70ff41 /src/web_service/telemetry_json.h | |
parent | 5f30f95e94d9d8ba4eb3d09da110b8e2f9187eb2 (diff) | |
download | yuzu-android-4d139943f2407144d5f8e3dc5a673f24850d43d0.tar.gz yuzu-android-4d139943f2407144d5f8e3dc5a673f24850d43d0.zip |
Port web_service from Citra
Diffstat (limited to 'src/web_service/telemetry_json.h')
-rw-r--r-- | src/web_service/telemetry_json.h | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/src/web_service/telemetry_json.h b/src/web_service/telemetry_json.h new file mode 100644 index 000000000..9bc886538 --- /dev/null +++ b/src/web_service/telemetry_json.h @@ -0,0 +1,59 @@ +// Copyright 2017 Citra Emulator Project +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#pragma once + +#include <array> +#include <string> +#include "common/telemetry.h" +#include "common/web_result.h" +#include "web_service/json.h" + +namespace WebService { + +/** + * Implementation of VisitorInterface that serialized telemetry into JSON, and submits it to the + * yuzu web service + */ +class TelemetryJson : public Telemetry::VisitorInterface { +public: + TelemetryJson(const std::string& host, const std::string& username, const std::string& token) + : host(host), username(username), token(token) {} + ~TelemetryJson() = default; + + void Visit(const Telemetry::Field<bool>& field) override; + void Visit(const Telemetry::Field<double>& field) override; + void Visit(const Telemetry::Field<float>& field) override; + void Visit(const Telemetry::Field<u8>& field) override; + void Visit(const Telemetry::Field<u16>& field) override; + void Visit(const Telemetry::Field<u32>& field) override; + void Visit(const Telemetry::Field<u64>& field) override; + void Visit(const Telemetry::Field<s8>& field) override; + void Visit(const Telemetry::Field<s16>& field) override; + void Visit(const Telemetry::Field<s32>& field) override; + void Visit(const Telemetry::Field<s64>& field) override; + void Visit(const Telemetry::Field<std::string>& field) override; + void Visit(const Telemetry::Field<const char*>& field) override; + void Visit(const Telemetry::Field<std::chrono::microseconds>& field) override; + + void Complete() override; + +private: + nlohmann::json& TopSection() { + return sections[static_cast<u8>(Telemetry::FieldType::None)]; + } + + template <class T> + void Serialize(Telemetry::FieldType type, const std::string& name, T value); + + void SerializeSection(Telemetry::FieldType type, const std::string& name); + + nlohmann::json output; + std::array<nlohmann::json, 7> sections; + std::string host; + std::string username; + std::string token; +}; + +} // namespace WebService |