Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add get_buffered_amount() to WebRTCDataChannel (Godot 3.x) #50659

Merged
merged 1 commit into from
Jul 21, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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