Skip to content

Commit

Permalink
Merge pull request #50659 from dsnopek/webrtc-get-buffered-amount-3.x
Browse files Browse the repository at this point in the history
Add get_buffered_amount() to WebRTCDataChannel (Godot 3.x)
  • Loading branch information
Faless authored Jul 21, 2021
2 parents 6efdba4 + 5b2dcc5 commit 7c4cc42
Show file tree
Hide file tree
Showing 9 changed files with 36 additions and 0 deletions.
7 changes: 7 additions & 0 deletions modules/gdnative/include/net/godot_webrtc.h
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,13 @@ typedef struct {
void *next; /* For extension? */
} godot_net_webrtc_data_channel;

/* Extensions to WebRTCDataChannel */
typedef struct {
int (*get_buffered_amount)(const void *);

void *next; /* For extension? */
} godot_net_webrtc_data_channel_ext;

/* Set the default GDNative library */
godot_error GDAPI godot_net_set_webrtc_library(const godot_net_webrtc_library *);
/* Binds a WebRTCPeerConnectionGDNative to the provided interface */
Expand Down
7 changes: 7 additions & 0 deletions modules/webrtc/doc_classes/WebRTCDataChannel.xml
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,13 @@
Closes this data channel, notifying the other peer.
</description>
</method>
<method name="get_buffered_amount" qualifiers="const">
<return type="int">
</return>
<description>
Returns the number of bytes currently queued to be sent over this channel.
</description>
</method>
<method name="get_id" qualifiers="const">
<return type="int">
</return>
Expand Down
5 changes: 5 additions & 0 deletions modules/webrtc/library_godot_webrtc.js
Original file line number Diff line number Diff line change
Expand Up @@ -166,6 +166,11 @@ const GodotRTCDataChannel = {
return GodotRTCDataChannel.get_prop(p_id, 'negotiated', 65535);
},

godot_js_rtc_datachannel_get_buffered_amount__sig: 'ii',
godot_js_rtc_datachannel_get_buffered_amount: function (p_id) {
return GodotRTCDataChannel.get_prop(p_id, 'bufferedAmount', 0);
},

godot_js_rtc_datachannel_label_get__sig: 'ii',
godot_js_rtc_datachannel_label_get: function (p_id) {
const ref = IDHandler.get(p_id);
Expand Down
1 change: 1 addition & 0 deletions modules/webrtc/webrtc_data_channel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ void WebRTCDataChannel::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_max_retransmits"), &WebRTCDataChannel::get_max_retransmits);
ClassDB::bind_method(D_METHOD("get_protocol"), &WebRTCDataChannel::get_protocol);
ClassDB::bind_method(D_METHOD("is_negotiated"), &WebRTCDataChannel::is_negotiated);
ClassDB::bind_method(D_METHOD("get_buffered_amount"), &WebRTCDataChannel::get_buffered_amount);

ADD_PROPERTY(PropertyInfo(Variant::INT, "write_mode", PROPERTY_HINT_ENUM), "set_write_mode", "get_write_mode");

Expand Down
2 changes: 2 additions & 0 deletions modules/webrtc/webrtc_data_channel.h
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,8 @@ class WebRTCDataChannel : public PacketPeer {
virtual String get_protocol() const = 0;
virtual bool is_negotiated() const = 0;

virtual int get_buffered_amount() const = 0;

virtual Error poll() = 0;
virtual void close() = 0;

Expand Down
7 changes: 7 additions & 0 deletions modules/webrtc/webrtc_data_channel_gdnative.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,13 @@ bool WebRTCDataChannelGDNative::is_negotiated() const {
return interface->is_negotiated(interface->data);
}

int WebRTCDataChannelGDNative::get_buffered_amount() const {
ERR_FAIL_COND_V(interface == nullptr, 0);
ERR_FAIL_COND_V(interface->next == nullptr, 0);

return ((godot_net_webrtc_data_channel_ext *)interface->next)->get_buffered_amount(interface->data);
}

Error WebRTCDataChannelGDNative::get_packet(const uint8_t **r_buffer, int &r_buffer_size) {
ERR_FAIL_COND_V(interface == nullptr, ERR_UNCONFIGURED);
return (Error)interface->get_packet(interface->data, r_buffer, &r_buffer_size);
Expand Down
1 change: 1 addition & 0 deletions modules/webrtc/webrtc_data_channel_gdnative.h
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ class WebRTCDataChannelGDNative : public WebRTCDataChannel {
virtual int get_max_retransmits() const;
virtual String get_protocol() const;
virtual bool is_negotiated() const;
virtual int get_buffered_amount() const;

virtual Error poll();
virtual void close();
Expand Down
5 changes: 5 additions & 0 deletions modules/webrtc/webrtc_data_channel_js.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ extern int godot_js_rtc_datachannel_id_get(int p_id);
extern int godot_js_rtc_datachannel_max_packet_lifetime_get(int p_id);
extern int godot_js_rtc_datachannel_max_retransmits_get(int p_id);
extern int godot_js_rtc_datachannel_is_negotiated(int p_id);
extern int godot_js_rtc_datachannel_get_buffered_amount(int p_id);
extern char *godot_js_rtc_datachannel_label_get(int p_id); // Must free the returned string.
extern char *godot_js_rtc_datachannel_protocol_get(int p_id); // Must free the returned string.
extern void godot_js_rtc_datachannel_destroy(int p_id);
Expand Down Expand Up @@ -181,6 +182,10 @@ bool WebRTCDataChannelJS::is_negotiated() const {
return godot_js_rtc_datachannel_is_negotiated(_js_id);
}

int WebRTCDataChannelJS::get_buffered_amount() const {
return godot_js_rtc_datachannel_get_buffered_amount(_js_id);
}

WebRTCDataChannelJS::WebRTCDataChannelJS() {
queue_count = 0;
_was_string = false;
Expand Down
1 change: 1 addition & 0 deletions modules/webrtc/webrtc_data_channel_js.h
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@ class WebRTCDataChannelJS : public WebRTCDataChannel {
virtual int get_max_retransmits() const;
virtual String get_protocol() const;
virtual bool is_negotiated() const;
virtual int get_buffered_amount() const;

virtual Error poll();
virtual void close();
Expand Down

0 comments on commit 7c4cc42

Please sign in to comment.