diff options
author | Fabio Alessandrelli <fabio.alessandrelli@gmail.com> | 2021-07-04 14:18:10 +0200 |
---|---|---|
committer | Fabio Alessandrelli <fabio.alessandrelli@gmail.com> | 2021-07-09 00:53:15 +0200 |
commit | 00ac03c8e7a96657de5b537cfc0396509546374e (patch) | |
tree | f5b1bbf370f17c1ab2064c6b2e79147bbecda98c /src/WebRTCLibPeerConnection.hpp | |
parent | fa5296a4e428d625351082d13248f7f7c20f0598 (diff) | |
download | fork-godot-webrtc-native-00ac03c8e7a96657de5b537cfc0396509546374e.tar.gz fork-godot-webrtc-native-00ac03c8e7a96657de5b537cfc0396509546374e.tar.bz2 fork-godot-webrtc-native-00ac03c8e7a96657de5b537cfc0396509546374e.zip |
Use a class instead of lambdas for signals.
Diffstat (limited to 'src/WebRTCLibPeerConnection.hpp')
-rw-r--r-- | src/WebRTCLibPeerConnection.hpp | 32 |
1 files changed, 28 insertions, 4 deletions
diff --git a/src/WebRTCLibPeerConnection.hpp b/src/WebRTCLibPeerConnection.hpp index 8c5d9b8..c209cf1 100644 --- a/src/WebRTCLibPeerConnection.hpp +++ b/src/WebRTCLibPeerConnection.hpp @@ -5,8 +5,7 @@ #include "api/peer_connection_interface.h" // interface for all things needed from WebRTC #include "media/base/media_engine.h" // needed for CreateModularPeerConnectionFactory -#include <functional> // std::function -#include <mutex> // mutex @TODO replace std::mutex with Godot mutex +#include <mutex> #include "net/WebRTCPeerConnectionNative.hpp" @@ -43,7 +42,6 @@ public: /* helper functions */ void queue_signal(godot::String p_name, int p_argc, const godot::Variant &p_arg1 = godot::Variant(), const godot::Variant &p_arg2 = godot::Variant(), const godot::Variant &p_arg3 = godot::Variant()); - // void queue_signal(godot::StringName p_name, Variant_ARG_LIST); void queue_packet(uint8_t *, int); /** PeerConnectionObserver callback functions **/ @@ -82,12 +80,38 @@ public: void OnFailure(webrtc::RTCError error) override; }; + class Signal { + godot::String method; + godot::Variant argv[3]; + int argc = 0; + public: + Signal(godot::String p_method, int p_argc, const godot::Variant *p_argv) { + method = p_method; + argc = p_argc; + for (int i = 0; i < argc; i++) { + argv[i] = p_argv[i]; + } + } + + void emit(godot::Object *p_object) { + if (argc == 0) { + p_object->emit_signal(method); + } else if (argc == 1) { + p_object->emit_signal(method, argv[0]); + } else if (argc == 2) { + p_object->emit_signal(method, argv[0], argv[1]); + } else if (argc == 3) { + p_object->emit_signal(method, argv[0], argv[1], argv[2]); + } + } + }; + GodotPCO pco; rtc::scoped_refptr<GodotSSDO> ptr_ssdo; rtc::scoped_refptr<GodotCSDO> ptr_csdo; std::mutex *mutex_signal_queue = nullptr; - std::queue<std::function<void()> > signal_queue; + std::queue<Signal> signal_queue; rtc::scoped_refptr<webrtc::PeerConnectionFactoryInterface> pc_factory; rtc::scoped_refptr<webrtc::PeerConnectionInterface> peer_connection; |