Merge pull request #52226 from Faless/debugger/4.x_start_options
This commit is contained in:
commit
3cc01b2824
|
@ -183,16 +183,16 @@ ScriptEditorDebugger *EditorDebuggerNode::get_default_debugger() const {
|
||||||
return Object::cast_to<ScriptEditorDebugger>(tabs->get_tab_control(0));
|
return Object::cast_to<ScriptEditorDebugger>(tabs->get_tab_control(0));
|
||||||
}
|
}
|
||||||
|
|
||||||
Error EditorDebuggerNode::start(const String &p_protocol) {
|
Error EditorDebuggerNode::start(const String &p_uri) {
|
||||||
stop();
|
stop();
|
||||||
|
ERR_FAIL_COND_V(p_uri.find("://") < 0, ERR_INVALID_PARAMETER);
|
||||||
if (EDITOR_GET("run/output/always_open_output_on_play")) {
|
if (EDITOR_GET("run/output/always_open_output_on_play")) {
|
||||||
EditorNode::get_singleton()->make_bottom_panel_item_visible(EditorNode::get_log());
|
EditorNode::get_singleton()->make_bottom_panel_item_visible(EditorNode::get_log());
|
||||||
} else {
|
} else {
|
||||||
EditorNode::get_singleton()->make_bottom_panel_item_visible(this);
|
EditorNode::get_singleton()->make_bottom_panel_item_visible(this);
|
||||||
}
|
}
|
||||||
|
server = Ref<EditorDebuggerServer>(EditorDebuggerServer::create(p_uri.substr(0, p_uri.find("://") + 3)));
|
||||||
server = Ref<EditorDebuggerServer>(EditorDebuggerServer::create(p_protocol));
|
const Error err = server->start(p_uri);
|
||||||
const Error err = server->start();
|
|
||||||
if (err != OK) {
|
if (err != OK) {
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
|
@ -188,7 +188,7 @@ public:
|
||||||
void set_camera_override(CameraOverride p_override);
|
void set_camera_override(CameraOverride p_override);
|
||||||
CameraOverride get_camera_override();
|
CameraOverride get_camera_override();
|
||||||
|
|
||||||
Error start(const String &p_protocol = "tcp://");
|
Error start(const String &p_uri = "tcp://");
|
||||||
|
|
||||||
void stop();
|
void stop();
|
||||||
|
|
||||||
|
|
|
@ -45,7 +45,7 @@ private:
|
||||||
public:
|
public:
|
||||||
static EditorDebuggerServer *create(const String &p_protocol);
|
static EditorDebuggerServer *create(const String &p_protocol);
|
||||||
virtual void poll() {}
|
virtual void poll() {}
|
||||||
virtual Error start();
|
virtual Error start(const String &p_uri);
|
||||||
virtual void stop();
|
virtual void stop();
|
||||||
virtual bool is_active() const;
|
virtual bool is_active() const;
|
||||||
virtual bool is_connection_available() const;
|
virtual bool is_connection_available() const;
|
||||||
|
@ -63,11 +63,18 @@ EditorDebuggerServerTCP::EditorDebuggerServerTCP() {
|
||||||
server.instantiate();
|
server.instantiate();
|
||||||
}
|
}
|
||||||
|
|
||||||
Error EditorDebuggerServerTCP::start() {
|
Error EditorDebuggerServerTCP::start(const String &p_uri) {
|
||||||
int remote_port = (int)EditorSettings::get_singleton()->get("network/debug/remote_port");
|
int bind_port = (int)EditorSettings::get_singleton()->get("network/debug/remote_port");
|
||||||
const Error err = server->listen(remote_port);
|
String bind_host = (String)EditorSettings::get_singleton()->get("network/debug/remote_host");
|
||||||
|
if (!p_uri.is_empty() && p_uri != "tcp://") {
|
||||||
|
String scheme, path;
|
||||||
|
Error err = p_uri.parse_url(scheme, bind_host, bind_port, path);
|
||||||
|
ERR_FAIL_COND_V(err != OK, ERR_INVALID_PARAMETER);
|
||||||
|
ERR_FAIL_COND_V(!bind_host.is_valid_ip_address() && bind_host != "*", ERR_INVALID_PARAMETER);
|
||||||
|
}
|
||||||
|
const Error err = server->listen(bind_port, bind_host);
|
||||||
if (err != OK) {
|
if (err != OK) {
|
||||||
EditorNode::get_log()->add_message(String("Error listening on port ") + itos(remote_port), EditorLog::MSG_TYPE_ERROR);
|
EditorNode::get_log()->add_message(String("Error listening on port ") + itos(bind_port), EditorLog::MSG_TYPE_ERROR);
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
return err;
|
return err;
|
||||||
|
|
|
@ -48,7 +48,7 @@ public:
|
||||||
static void register_protocol_handler(const String &p_protocol, CreateServerFunc p_func);
|
static void register_protocol_handler(const String &p_protocol, CreateServerFunc p_func);
|
||||||
static EditorDebuggerServer *create(const String &p_protocol);
|
static EditorDebuggerServer *create(const String &p_protocol);
|
||||||
virtual void poll() = 0;
|
virtual void poll() = 0;
|
||||||
virtual Error start() = 0;
|
virtual Error start(const String &p_uri = "") = 0;
|
||||||
virtual void stop() = 0;
|
virtual void stop() = 0;
|
||||||
virtual bool is_active() const = 0;
|
virtual bool is_active() const = 0;
|
||||||
virtual bool is_connection_available() const = 0;
|
virtual bool is_connection_available() const = 0;
|
||||||
|
|
|
@ -145,6 +145,7 @@ static bool auto_quit = false;
|
||||||
static OS::ProcessID allow_focus_steal_pid = 0;
|
static OS::ProcessID allow_focus_steal_pid = 0;
|
||||||
#ifdef TOOLS_ENABLED
|
#ifdef TOOLS_ENABLED
|
||||||
static bool auto_build_solutions = false;
|
static bool auto_build_solutions = false;
|
||||||
|
static String debug_server_uri;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Display
|
// Display
|
||||||
|
@ -286,6 +287,7 @@ void Main::print_help(const char *p_binary) {
|
||||||
#ifdef TOOLS_ENABLED
|
#ifdef TOOLS_ENABLED
|
||||||
OS::get_singleton()->print(" -e, --editor Start the editor instead of running the scene.\n");
|
OS::get_singleton()->print(" -e, --editor Start the editor instead of running the scene.\n");
|
||||||
OS::get_singleton()->print(" -p, --project-manager Start the project manager, even if a project is auto-detected.\n");
|
OS::get_singleton()->print(" -p, --project-manager Start the project manager, even if a project is auto-detected.\n");
|
||||||
|
OS::get_singleton()->print(" --debug-server <uri> Start the editor debug server (<protocol>://<host/IP>[:<port>], e.g. tcp://127.0.0.1:6007)\n");
|
||||||
#endif
|
#endif
|
||||||
OS::get_singleton()->print(" -q, --quit Quit after the first iteration.\n");
|
OS::get_singleton()->print(" -q, --quit Quit after the first iteration.\n");
|
||||||
OS::get_singleton()->print(" -l, --language <locale> Use a specific locale (<locale> being a two-letter code).\n");
|
OS::get_singleton()->print(" -l, --language <locale> Use a specific locale (<locale> being a two-letter code).\n");
|
||||||
|
@ -875,6 +877,18 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph
|
||||||
} else if (I->get() == "-p" || I->get() == "--project-manager") { // starts project manager
|
} else if (I->get() == "-p" || I->get() == "--project-manager") { // starts project manager
|
||||||
|
|
||||||
project_manager = true;
|
project_manager = true;
|
||||||
|
} else if (I->get() == "--debug-server") {
|
||||||
|
if (I->next()) {
|
||||||
|
debug_server_uri = I->next()->get();
|
||||||
|
if (debug_server_uri.find("://") == -1) { // wrong address
|
||||||
|
OS::get_singleton()->print("Invalid debug server uri. It should be of the form <protocol>://<bind_address>:<port>.\n");
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
N = I->next()->next();
|
||||||
|
} else {
|
||||||
|
OS::get_singleton()->print("Missing remote debug server uri, aborting.\n");
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
} else if (I->get() == "--build-solutions") { // Build the scripting solution such C#
|
} else if (I->get() == "--build-solutions") { // Build the scripting solution such C#
|
||||||
|
|
||||||
auto_build_solutions = true;
|
auto_build_solutions = true;
|
||||||
|
@ -2347,6 +2361,9 @@ bool Main::start() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
DisplayServer::get_singleton()->set_context(DisplayServer::CONTEXT_EDITOR);
|
DisplayServer::get_singleton()->set_context(DisplayServer::CONTEXT_EDITOR);
|
||||||
|
if (!debug_server_uri.is_empty()) {
|
||||||
|
EditorDebuggerNode::get_singleton()->start(debug_server_uri);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
if (!editor) {
|
if (!editor) {
|
||||||
|
|
|
@ -48,11 +48,19 @@ void EditorDebuggerServerWebSocket::poll() {
|
||||||
server->poll();
|
server->poll();
|
||||||
}
|
}
|
||||||
|
|
||||||
Error EditorDebuggerServerWebSocket::start() {
|
Error EditorDebuggerServerWebSocket::start(const String &p_uri) {
|
||||||
int remote_port = (int)EditorSettings::get_singleton()->get("network/debug/remote_port");
|
int bind_port = (int)EditorSettings::get_singleton()->get("network/debug/remote_port");
|
||||||
|
String bind_host = EditorSettings::get_singleton()->get("network/debug/remote_host");
|
||||||
|
if (!p_uri.is_empty() && p_uri != "ws://") {
|
||||||
|
String scheme, path;
|
||||||
|
Error err = p_uri.parse_url(scheme, bind_host, bind_port, path);
|
||||||
|
ERR_FAIL_COND_V(err != OK, ERR_INVALID_PARAMETER);
|
||||||
|
ERR_FAIL_COND_V(!bind_host.is_valid_ip_address() && bind_host != "*", ERR_INVALID_PARAMETER);
|
||||||
|
}
|
||||||
|
server->set_bind_ip(bind_host);
|
||||||
Vector<String> compatible_protocols;
|
Vector<String> compatible_protocols;
|
||||||
compatible_protocols.push_back("binary"); // compatibility with EMSCRIPTEN TCP-to-WebSocket layer.
|
compatible_protocols.push_back("binary"); // compatibility with EMSCRIPTEN TCP-to-WebSocket layer.
|
||||||
return server->listen(remote_port, compatible_protocols);
|
return server->listen(bind_port, compatible_protocols);
|
||||||
}
|
}
|
||||||
|
|
||||||
void EditorDebuggerServerWebSocket::stop() {
|
void EditorDebuggerServerWebSocket::stop() {
|
||||||
|
|
|
@ -48,7 +48,7 @@ public:
|
||||||
void _peer_disconnected(int p_peer, bool p_was_clean);
|
void _peer_disconnected(int p_peer, bool p_was_clean);
|
||||||
|
|
||||||
void poll() override;
|
void poll() override;
|
||||||
Error start() override;
|
Error start(const String &p_uri) override;
|
||||||
void stop() override;
|
void stop() override;
|
||||||
bool is_active() const override;
|
bool is_active() const override;
|
||||||
bool is_connection_available() const override;
|
bool is_connection_available() const override;
|
||||||
|
|
Loading…
Reference in New Issue