diff options
author | Fabio Alessandrelli <fabio.alessandrelli@gmail.com> | 2019-04-21 04:57:53 +0200 |
---|---|---|
committer | Fabio Alessandrelli <fabio.alessandrelli@gmail.com> | 2019-05-16 10:32:51 +0200 |
commit | 3e64a42b1492e38bf033041c0eb1212542728cbd (patch) | |
tree | d187f873ecfdace0d127c6bc340ed295edcaa2f1 /src/WebRTCLibPeer.hpp | |
parent | f2cf2e5340c1aa20516aea4863b8f7a46f317bb6 (diff) | |
download | godot-webrtc-native-3e64a42b1492e38bf033041c0eb1212542728cbd.tar.gz godot-webrtc-native-3e64a42b1492e38bf033041c0eb1212542728cbd.tar.bz2 godot-webrtc-native-3e64a42b1492e38bf033041c0eb1212542728cbd.zip |
Update to new DataChannel API.
New WebRTCLibDataChannel class act as PacketPeer.
Old WebRTCPeer (now WebRTCPeerConnection) now allows you to set
configuration (STUN/TURN) and creating multiple data channels.
Fixed many bugs and implemented most of the missing API.
Diffstat (limited to 'src/WebRTCLibPeer.hpp')
-rw-r--r-- | src/WebRTCLibPeer.hpp | 117 |
1 files changed, 0 insertions, 117 deletions
diff --git a/src/WebRTCLibPeer.hpp b/src/WebRTCLibPeer.hpp deleted file mode 100644 index 9707f4f..0000000 --- a/src/WebRTCLibPeer.hpp +++ /dev/null @@ -1,117 +0,0 @@ -#ifndef WEBRTC_PEER_H -#define WEBRTC_PEER_H - -#include <Godot.hpp> // Godot.hpp must go first, or windows builds breaks - -#include "api/peerconnectioninterface.h" // interface for all things needed from WebRTC -#include "media/base/mediaengine.h" // needed for CreateModularPeerConnectionFactory -#include <functional> // std::function -#include <mutex> // mutex @TODO replace std::mutex with Godot mutex - -#include "net/WebRTCPeerNative.hpp" - -namespace godot_webrtc { - -class WebRTCLibPeer : public WebRTCPeerNative { - GODOT_CLASS(WebRTCLibPeer, WebRTCPeerNative); - -public: - static void _register_methods(); - - void _init(); - - void set_write_mode(godot_int mode); - godot_int get_write_mode() const; - bool was_string_packet() const; - godot_int get_connection_state() const; - - godot_error create_offer(); - godot_error set_remote_description(const char *type, const char *sdp); - godot_error set_local_description(const char *type, const char *sdp); - godot_error add_ice_candidate(const char *sdpMidName, int sdpMlineIndexName, const char *sdpName); - godot_error poll(); - - /* WebRTCPeer */ - virtual godot_error get_packet(const uint8_t **r_buffer, int *r_len); - virtual godot_error put_packet(const uint8_t *p_buffer, int p_len); - virtual godot_int get_available_packet_count() const; - virtual godot_int get_max_packet_size() const; - - WebRTCLibPeer(); - ~WebRTCLibPeer(); - - /* 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); - godot_error set_description(const char *type, const char *sdp, bool isLocal); - - /** DataChannelObserver callback functions **/ - class GodotDCO : public webrtc::DataChannelObserver { - public: - WebRTCLibPeer *parent; - - GodotDCO(WebRTCLibPeer *parent); - void OnMessage(const webrtc::DataBuffer &buffer) override; - void OnStateChange() override; // UNUSED - void OnBufferedAmountChange(uint64_t previous_amount) override; // UNUSED - }; - - /** PeerConnectionObserver callback functions **/ - class GodotPCO : public webrtc::PeerConnectionObserver { - public: - WebRTCLibPeer *parent; - - GodotPCO(WebRTCLibPeer *parent); - void OnSignalingChange(webrtc::PeerConnectionInterface::SignalingState new_state) override; - void OnAddStream(rtc::scoped_refptr<webrtc::MediaStreamInterface> stream) override; - void OnRemoveStream(rtc::scoped_refptr<webrtc::MediaStreamInterface> stream) override; - void OnDataChannel(rtc::scoped_refptr<webrtc::DataChannelInterface> data_channel) override; - void OnRenegotiationNeeded() override; - void OnIceConnectionChange(webrtc::PeerConnectionInterface::IceConnectionState new_state) override; - void OnIceGatheringChange(webrtc::PeerConnectionInterface::IceGatheringState new_state) override; - void OnIceCandidate(const webrtc::IceCandidateInterface *candidate) override; - }; - - /** CreateSessionDescriptionObserver callback functions **/ - class GodotCSDO : public webrtc::CreateSessionDescriptionObserver { - public: - WebRTCLibPeer *parent; - - GodotCSDO(WebRTCLibPeer *parent); - void OnSuccess(webrtc::SessionDescriptionInterface *desc) override; - void OnFailure(const std::string &error) override; - }; - - /** SetSessionDescriptionObserver callback functions **/ - class GodotSSDO : public webrtc::SetSessionDescriptionObserver { - public: - WebRTCLibPeer *parent; - - GodotSSDO(WebRTCLibPeer *parent); - void OnSuccess() override; - void OnFailure(const std::string &error) override; - }; - - GodotDCO dco; - GodotPCO pco; - rtc::scoped_refptr<GodotSSDO> ptr_ssdo; - rtc::scoped_refptr<GodotCSDO> ptr_csdo; - - std::mutex *mutex_signal_queue; - std::mutex *mutex_packet_queue; - int packet_queue_size; - std::queue<uint8_t *> packet_queue; - std::queue<int> packet_sizes_queue; - std::queue<std::function<void()> > signal_queue; - - rtc::Thread *signaling_thread; - rtc::scoped_refptr<webrtc::PeerConnectionFactoryInterface> pc_factory; - rtc::scoped_refptr<webrtc::PeerConnectionInterface> peer_connection; - rtc::scoped_refptr<webrtc::DataChannelInterface> data_channel; -}; - -} // namespace godot_webrtc - -#endif // WEBRTC_PEER_H |