summaryrefslogtreecommitdiffstats
path: root/xbmc/interfaces/legacy/CallbackHandler.h
diff options
context:
space:
mode:
Diffstat (limited to 'xbmc/interfaces/legacy/CallbackHandler.h')
-rw-r--r--xbmc/interfaces/legacy/CallbackHandler.h58
1 files changed, 58 insertions, 0 deletions
diff --git a/xbmc/interfaces/legacy/CallbackHandler.h b/xbmc/interfaces/legacy/CallbackHandler.h
new file mode 100644
index 0000000..223c74a
--- /dev/null
+++ b/xbmc/interfaces/legacy/CallbackHandler.h
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2005-2018 Team Kodi
+ * This file is part of Kodi - https://kodi.tv
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ * See LICENSES/README.md for more information.
+ */
+
+#pragma once
+
+#include "AddonClass.h"
+#include "CallbackFunction.h"
+
+namespace XBMCAddon
+{
+ /**
+ * This is the abstraction representing different ways to handle
+ * the execution of callbacks. Different language bindings may
+ * have different requirements.
+ */
+ class CallbackHandler : public AddonClass
+ {
+ protected:
+ inline CallbackHandler() = default;
+
+ public:
+ virtual void invokeCallback(Callback* cb) = 0;
+ };
+
+ /**
+ * This class is primarily for Python support (hence the "Retarded"
+ * prefix). Python (et. al. Retarded languages) require that
+ * the context within which a callback executes is under the control
+ * of the language. Therefore, this handler is used to queue
+ * messages over to a language controlled thread for eventual
+ * execution.
+ *
+ * @todo Allow a cross thread synchronous execution.
+ * Fix the stupid means of calling the clearPendingCalls by passing
+ * userData which is specific to the handler/language type.
+ */
+ class RetardedAsyncCallbackHandler : public CallbackHandler
+ {
+ protected:
+ inline RetardedAsyncCallbackHandler() = default;
+ public:
+
+ ~RetardedAsyncCallbackHandler() override;
+
+ void invokeCallback(Callback* cb) override;
+ static void makePendingCalls();
+ static void clearPendingCalls(void* userData);
+
+ virtual bool isStateOk(AddonClass* obj) = 0;
+ virtual bool shouldRemoveCallback(AddonClass* obj, void* userData) = 0;
+ };
+
+}