Directly expose WebRTCPeerConnection::create_data_channel() to GDExtension

This commit is contained in:
David Snopek 2023-06-14 13:26:00 -05:00
parent 33957aee69
commit 1b9364ba96
4 changed files with 6 additions and 18 deletions

View File

@ -6,6 +6,10 @@ should instead be used to justify these changes and describe how users should wo
========================================================================================================================
GH-78237
--------
Validate extension JSON: Error: Field 'classes/WebRTCPeerConnectionExtension/methods/_create_data_channel/return_value': type changed value in new API, from "Object" to "WebRTCDataChannel".
GH-77757
--------
Validate extension JSON: Error: Field 'classes/Viewport/methods/gui_get_focus_owner': is_const changed value in new API, from false to true.

View File

@ -21,7 +21,7 @@
</description>
</method>
<method name="_create_data_channel" qualifiers="virtual">
<return type="Object" />
<return type="WebRTCDataChannel" />
<param index="0" name="p_label" type="String" />
<param index="1" name="p_config" type="Dictionary" />
<description>

View File

@ -43,14 +43,3 @@ void WebRTCPeerConnectionExtension::_bind_methods() {
GDVIRTUAL_BIND(_poll);
GDVIRTUAL_BIND(_close);
}
Ref<WebRTCDataChannel> WebRTCPeerConnectionExtension::create_data_channel(String p_label, Dictionary p_options) {
Object *ret = nullptr;
if (GDVIRTUAL_CALL(_create_data_channel, p_label, p_options, ret)) {
WebRTCDataChannel *ch = Object::cast_to<WebRTCDataChannel>(ret);
ERR_FAIL_COND_V_MSG(ret && !ch, nullptr, "Returned object must be an instance of WebRTCDataChannel.");
return ch;
}
WARN_PRINT_ONCE("WebRTCPeerConnectionExtension::_create_data_channel is unimplemented!");
return nullptr;
}

View File

@ -45,17 +45,12 @@ protected:
static void _bind_methods();
public:
// FIXME Can't be directly exposed due to issues in exchanging Ref(s) between godot and extensions.
// See godot-cpp GH-652 .
virtual Ref<WebRTCDataChannel> create_data_channel(String p_label, Dictionary p_options = Dictionary()) override;
GDVIRTUAL2R(Object *, _create_data_channel, String, Dictionary);
// EXBIND2R(Ref<WebRTCDataChannel>, create_data_channel, String, Dictionary);
/** GDExtension **/
EXBIND0RC(ConnectionState, get_connection_state);
EXBIND0RC(GatheringState, get_gathering_state);
EXBIND0RC(SignalingState, get_signaling_state);
EXBIND1R(Error, initialize, Dictionary);
EXBIND2R(Ref<WebRTCDataChannel>, create_data_channel, String, Dictionary);
EXBIND0R(Error, create_offer);
EXBIND2R(Error, set_remote_description, String, String);
EXBIND2R(Error, set_local_description, String, String);