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/WebRTCLibDataChannel.hpp | |
parent | f2cf2e5340c1aa20516aea4863b8f7a46f317bb6 (diff) | |
download | fork-godot-webrtc-native-3e64a42b1492e38bf033041c0eb1212542728cbd.tar.gz fork-godot-webrtc-native-3e64a42b1492e38bf033041c0eb1212542728cbd.tar.bz2 fork-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/WebRTCLibDataChannel.hpp')
-rw-r--r-- | src/WebRTCLibDataChannel.hpp | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/src/WebRTCLibDataChannel.hpp b/src/WebRTCLibDataChannel.hpp new file mode 100644 index 0000000..557d1da --- /dev/null +++ b/src/WebRTCLibDataChannel.hpp @@ -0,0 +1,76 @@ +#ifndef WEBRTC_DATA_CHANNEL_H +#define WEBRTC_DATA_CHANNEL_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 "net/WebRTCDataChannelNative.hpp" +#include "PoolArrays.hpp" +#include <mutex> + +namespace godot_webrtc { + +class WebRTCLibDataChannel : public WebRTCDataChannelNative { + GODOT_CLASS(WebRTCLibDataChannel, WebRTCDataChannelNative); + +private: + class ChannelObserver : public webrtc::DataChannelObserver { + public: + WebRTCLibDataChannel *parent; + + ChannelObserver(WebRTCLibDataChannel *parent); + void OnMessage(const webrtc::DataBuffer &buffer) override; + void OnStateChange() override; // UNUSED + void OnBufferedAmountChange(uint64_t previous_amount) override; // UNUSED + }; + + ChannelObserver observer; + rtc::scoped_refptr<webrtc::DataChannelInterface> channel; + + std::mutex *mutex; + std::queue<godot::PoolByteArray> packet_queue; + godot::PoolByteArray current_packet; + std::string label; + std::string protocol; + +public: + static WebRTCLibDataChannel *new_data_channel(rtc::scoped_refptr<webrtc::DataChannelInterface> p_channel); + static void _register_methods(); + + void _init(); + + void bind_channel(rtc::scoped_refptr<webrtc::DataChannelInterface> p_channel); + void queue_packet(const uint8_t *data, uint32_t size); + + /* WebRTCDataChannel */ + void set_write_mode(godot_int mode); + godot_int get_write_mode() const; + bool was_string_packet() const; + + ChannelState get_ready_state() const; + const char *get_label() const; + bool is_ordered() const; + int get_id() const; + int get_max_packet_life_time() const; + int get_max_retransmits() const; + const char *get_protocol() const; + bool is_negotiated() const; + + godot_error poll(); + void close(); + + /* PacketPeer */ + 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; + + WebRTCLibDataChannel(); + ~WebRTCLibDataChannel(); +}; + +} // namespace godot_webrtc + +#endif // WEBRTC_DATA_CHANNEL_H |