async_context.h 993 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. // Copyright 2021 yuzu emulator team
  2. // Licensed under GPLv2 or any later version
  3. // Refer to the license.txt file included.
  4. #pragma once
  5. #include <atomic>
  6. #include "core/hle/service/kernel_helpers.h"
  7. #include "core/hle/service/service.h"
  8. namespace Core {
  9. class System;
  10. }
  11. namespace Service::Account {
  12. class IAsyncContext : public ServiceFramework<IAsyncContext> {
  13. public:
  14. explicit IAsyncContext(Core::System& system_);
  15. ~IAsyncContext() override;
  16. void GetSystemEvent(Kernel::HLERequestContext& ctx);
  17. void Cancel(Kernel::HLERequestContext& ctx);
  18. void HasDone(Kernel::HLERequestContext& ctx);
  19. void GetResult(Kernel::HLERequestContext& ctx);
  20. protected:
  21. virtual bool IsComplete() const = 0;
  22. virtual void Cancel() = 0;
  23. virtual ResultCode GetResult() const = 0;
  24. void MarkComplete();
  25. KernelHelpers::ServiceContext service_context;
  26. std::atomic<bool> is_complete{false};
  27. Kernel::KEvent* completion_event;
  28. };
  29. } // namespace Service::Account