async_context.h 941 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. // SPDX-FileCopyrightText: Copyright 2021 yuzu Emulator Project
  2. // SPDX-License-Identifier: GPL-2.0-or-later
  3. #pragma once
  4. #include <atomic>
  5. #include "core/hle/service/kernel_helpers.h"
  6. #include "core/hle/service/service.h"
  7. namespace Core {
  8. class System;
  9. }
  10. namespace Service::Account {
  11. class IAsyncContext : public ServiceFramework<IAsyncContext> {
  12. public:
  13. explicit IAsyncContext(Core::System& system_);
  14. ~IAsyncContext() override;
  15. void GetSystemEvent(HLERequestContext& ctx);
  16. void Cancel(HLERequestContext& ctx);
  17. void HasDone(HLERequestContext& ctx);
  18. void GetResult(HLERequestContext& ctx);
  19. protected:
  20. virtual bool IsComplete() const = 0;
  21. virtual void Cancel() = 0;
  22. virtual Result GetResult() const = 0;
  23. void MarkComplete();
  24. KernelHelpers::ServiceContext service_context;
  25. std::atomic<bool> is_complete{false};
  26. Kernel::KEvent* completion_event;
  27. };
  28. } // namespace Service::Account