summaryrefslogtreecommitdiff
path: root/src/WebRTCLibDataChannel.hpp
diff options
context:
space:
mode:
authorFabio Alessandrelli <fabio.alessandrelli@gmail.com>2019-04-21 04:57:53 +0200
committerFabio Alessandrelli <fabio.alessandrelli@gmail.com>2019-05-16 10:32:51 +0200
commit3e64a42b1492e38bf033041c0eb1212542728cbd (patch)
treed187f873ecfdace0d127c6bc340ed295edcaa2f1 /src/WebRTCLibDataChannel.hpp
parentf2cf2e5340c1aa20516aea4863b8f7a46f317bb6 (diff)
downloadfork-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.hpp76
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