Allow ClassDB to create a Object without postinitialization for GDExtension.

This commit is contained in:
Daylily-Zeleen
2024-04-22 22:34:44 +08:00
parent 8dfb8efaa9
commit 3d575801ce
40 changed files with 345 additions and 140 deletions

View File

@ -68,7 +68,7 @@ private:
String selected_protocol;
String requested_url;
static WebSocketPeer *_create() { return memnew(EMWSPeer); }
static WebSocketPeer *_create(bool p_notify_postinitialize) { return static_cast<WebSocketPeer *>(ClassDB::creator<EMWSPeer>(p_notify_postinitialize)); }
static void _esws_on_connect(void *obj, char *proto);
static void _esws_on_message(void *obj, const uint8_t *p_data, int p_data_size, int p_is_string);
static void _esws_on_error(void *obj);

View File

@ -30,7 +30,7 @@
#include "websocket_peer.h"
WebSocketPeer *(*WebSocketPeer::_create)() = nullptr;
WebSocketPeer *(*WebSocketPeer::_create)(bool p_notify_postinitialize) = nullptr;
WebSocketPeer::WebSocketPeer() {
}

View File

@ -59,7 +59,7 @@ private:
virtual Error _send_bind(const PackedByteArray &p_data, WriteMode p_mode = WRITE_MODE_BINARY);
protected:
static WebSocketPeer *(*_create)();
static WebSocketPeer *(*_create)(bool p_notify_postinitialize);
static void _bind_methods();
@ -74,11 +74,11 @@ protected:
int max_queued_packets = 2048;
public:
static WebSocketPeer *create() {
static WebSocketPeer *create(bool p_notify_postinitialize = true) {
if (!_create) {
return nullptr;
}
return _create();
return _create(p_notify_postinitialize);
}
virtual Error connect_to_url(const String &p_url, Ref<TLSOptions> p_options = Ref<TLSOptions>()) = 0;

View File

@ -49,7 +49,7 @@
class WSLPeer : public WebSocketPeer {
private:
static CryptoCore::RandomGenerator *_static_rng;
static WebSocketPeer *_create() { return memnew(WSLPeer); }
static WebSocketPeer *_create(bool p_notify_postinitialize) { return static_cast<WebSocketPeer *>(ClassDB::creator<WSLPeer>(p_notify_postinitialize)); }
// Callbacks.
static ssize_t _wsl_recv_callback(wslay_event_context_ptr ctx, uint8_t *data, size_t len, int flags, void *user_data);