async_event.h 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. #ifndef CORE_EVENT_H
  2. #define CORE_EVENT_H
  3. #include <array>
  4. #include <cstdint>
  5. #include <string>
  6. #include <variant>
  7. #include "almalloc.h"
  8. struct EffectState;
  9. using uint = unsigned int;
  10. enum class AsyncEnableBits : std::uint8_t {
  11. SourceState,
  12. BufferCompleted,
  13. Disconnected,
  14. Count
  15. };
  16. enum class AsyncSrcState : std::uint8_t {
  17. Reset,
  18. Stop,
  19. Play,
  20. Pause
  21. };
  22. using AsyncKillThread = std::monostate;
  23. struct AsyncSourceStateEvent {
  24. uint mId;
  25. AsyncSrcState mState;
  26. };
  27. struct AsyncBufferCompleteEvent {
  28. uint mId;
  29. uint mCount;
  30. };
  31. struct AsyncDisconnectEvent {
  32. std::string msg;
  33. };
  34. struct AsyncEffectReleaseEvent {
  35. EffectState *mEffectState;
  36. };
  37. using AsyncEvent = std::variant<AsyncKillThread,
  38. AsyncSourceStateEvent,
  39. AsyncBufferCompleteEvent,
  40. AsyncEffectReleaseEvent,
  41. AsyncDisconnectEvent>;
  42. template<typename T, typename ...Args>
  43. auto &InitAsyncEvent(std::byte *evtbuf, Args&& ...args)
  44. {
  45. auto *evt = al::construct_at(reinterpret_cast<AsyncEvent*>(evtbuf), std::in_place_type<T>,
  46. std::forward<Args>(args)...);
  47. return std::get<T>(*evt);
  48. }
  49. #endif