BsScriptAsyncOp.h 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. #pragma once
  2. #include "BsScriptEnginePrerequisites.h"
  3. #include "BsScriptObject.h"
  4. #include "BsAsyncOp.h"
  5. namespace BansheeEngine
  6. {
  7. /**
  8. * @brief Interop class between C++ & CLR for AsyncOp.
  9. */
  10. class BS_SCR_BE_EXPORT ScriptAsyncOp : public ScriptObject<ScriptAsyncOp>
  11. {
  12. public:
  13. SCRIPT_OBJ(ENGINE_ASSEMBLY, "BansheeEngine", "AsyncOp")
  14. /**
  15. * @brief Creates a new managed AsyncOp instance.
  16. *
  17. * @param op Native AsyncOp to wrap.
  18. * @param asyncOpToReturnValue Callback that converts the returned value from native async op
  19. * to a managed object.
  20. */
  21. static MonoObject* create(const AsyncOp& op, std::function<MonoObject*(const AsyncOp&)> asyncOpToReturnValue);
  22. private:
  23. ScriptAsyncOp(MonoObject* instance);
  24. /**
  25. * @brief Finishes construction of the AsyncOp wrapper. Must be called before using the object.
  26. */
  27. void initialize(const AsyncOp& op, std::function<MonoObject*(const AsyncOp&)> asyncOpToReturnValue);
  28. AsyncOp mAsyncOp;
  29. std::function<MonoObject*(const AsyncOp&)> mConvertCallback;
  30. /************************************************************************/
  31. /* CLR HOOKS */
  32. /************************************************************************/
  33. static void internal_createInstance(MonoObject* managedInstance);
  34. static void internal_isComplete(ScriptAsyncOp* thisPtr, bool* value);
  35. static MonoObject* internal_getReturnValue(ScriptAsyncOp* thisPtr);
  36. static void internal_blockUntilComplete(ScriptAsyncOp* thisPtr);
  37. };
  38. }