diff options
author | Fabio Alessandrelli <fabio.alessandrelli@gmail.com> | 2019-05-21 14:08:30 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-05-21 14:08:30 +0200 |
commit | 423454086e21d40a545f9e46d6e35c1b3c557d77 (patch) | |
tree | 34c78fa5e627d35b9302618724dfbb7ff0e5e77c /src/WebRTCLibDataChannel.hpp | |
parent | f2cf2e5340c1aa20516aea4863b8f7a46f317bb6 (diff) | |
parent | 599ed98f6cb956d5189ec4b4905dbc2a8a1b5d9a (diff) | |
download | fork-godot-webrtc-native-423454086e21d40a545f9e46d6e35c1b3c557d77.tar.gz fork-godot-webrtc-native-423454086e21d40a545f9e46d6e35c1b3c557d77.tar.bz2 fork-godot-webrtc-native-423454086e21d40a545f9e46d6e35c1b3c557d77.zip |
Merge pull request #3 from Faless/channels_pr
Update to new DataChannel API, singleton load.
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 |