|
|
|
|
@ -192,6 +192,40 @@ Error EditorImportBlendRunner::do_import(const Dictionary &p_options) {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
HTTPClient::Status EditorImportBlendRunner::connect_blender_rpc(const Ref<HTTPClient> &p_client, int p_timeout_usecs) {
|
|
|
|
|
p_client->connect_to_host("127.0.0.1", rpc_port);
|
|
|
|
|
HTTPClient::Status status = p_client->get_status();
|
|
|
|
|
|
|
|
|
|
int attempts = 1;
|
|
|
|
|
int wait_usecs = 1000;
|
|
|
|
|
|
|
|
|
|
bool done = false;
|
|
|
|
|
while (!done) {
|
|
|
|
|
OS::get_singleton()->delay_usec(wait_usecs);
|
|
|
|
|
status = p_client->get_status();
|
|
|
|
|
switch (status) {
|
|
|
|
|
case HTTPClient::STATUS_RESOLVING:
|
|
|
|
|
case HTTPClient::STATUS_CONNECTING: {
|
|
|
|
|
p_client->poll();
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
case HTTPClient::STATUS_CONNECTED: {
|
|
|
|
|
done = true;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
default: {
|
|
|
|
|
if (attempts * wait_usecs < p_timeout_usecs) {
|
|
|
|
|
p_client->connect_to_host("127.0.0.1", rpc_port);
|
|
|
|
|
} else {
|
|
|
|
|
return status;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return status;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Error EditorImportBlendRunner::do_import_rpc(const Dictionary &p_options) {
|
|
|
|
|
kill_timer->stop();
|
|
|
|
|
|
|
|
|
|
@ -211,25 +245,9 @@ Error EditorImportBlendRunner::do_import_rpc(const Dictionary &p_options) {
|
|
|
|
|
|
|
|
|
|
// Connect to RPC server.
|
|
|
|
|
Ref<HTTPClient> client = HTTPClient::create();
|
|
|
|
|
client->connect_to_host("127.0.0.1", rpc_port);
|
|
|
|
|
|
|
|
|
|
bool done = false;
|
|
|
|
|
while (!done) {
|
|
|
|
|
HTTPClient::Status status = client->get_status();
|
|
|
|
|
switch (status) {
|
|
|
|
|
case HTTPClient::STATUS_RESOLVING:
|
|
|
|
|
case HTTPClient::STATUS_CONNECTING: {
|
|
|
|
|
client->poll();
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
case HTTPClient::STATUS_CONNECTED: {
|
|
|
|
|
done = true;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
default: {
|
|
|
|
|
ERR_FAIL_V_MSG(ERR_CONNECTION_ERROR, vformat("Unexpected status during RPC connection: %d", status));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
HTTPClient::Status status = connect_blender_rpc(client, 1000000);
|
|
|
|
|
if (status != HTTPClient::STATUS_CONNECTED) {
|
|
|
|
|
ERR_FAIL_V_MSG(ERR_CONNECTION_ERROR, vformat("Unexpected status during RPC connection: %d", status));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Send XML request.
|
|
|
|
|
@ -240,9 +258,9 @@ Error EditorImportBlendRunner::do_import_rpc(const Dictionary &p_options) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Wait for response.
|
|
|
|
|
done = false;
|
|
|
|
|
bool done = false;
|
|
|
|
|
while (!done) {
|
|
|
|
|
HTTPClient::Status status = client->get_status();
|
|
|
|
|
status = client->get_status();
|
|
|
|
|
switch (status) {
|
|
|
|
|
case HTTPClient::STATUS_REQUESTING: {
|
|
|
|
|
client->poll();
|
|
|
|
|
|