[HTML5] Libraries refactor for linting.

Initial work to make liniting easier.

This includes:
- Rename http_request.js to library_godot_http_request.js.
- Rename externs.js to engine.externs.js.
- New library_godot_runtime.js (GodotRuntime) wraps around emscripten
  functions.
- Refactor of XMLHttpRequest handler in engine/preloader.js.
- Few fixes to bugs spotted by early stage linting.
This commit is contained in:
Fabio Alessandrelli 2020-11-19 16:54:07 +01:00
parent 48049b8d9e
commit a82f70ea9f
16 changed files with 487 additions and 378 deletions

View file

@ -28,9 +28,9 @@
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/*************************************************************************/
var GodotWebSocket = {
const GodotWebSocket = {
// Our socket implementation that forwards events to C++.
$GodotWebSocket__deps: ['$IDHandler'],
$GodotWebSocket__deps: ['$IDHandler', '$GodotRuntime'],
$GodotWebSocket: {
// Connection opened, report selected protocol
_onopen: function(p_id, callback, event) {
@ -38,9 +38,9 @@ var GodotWebSocket = {
if (!ref) {
return; // Godot object is gone.
}
let c_str = GodotOS.allocString(ref.protocol);
let c_str = GodotRuntime.allocString(ref.protocol);
callback(c_str);
_free(c_str);
GodotRuntime.free(c_str);
},
// Message received, report content and type (UTF8 vs binary)
@ -54,21 +54,21 @@ var GodotWebSocket = {
if (event.data instanceof ArrayBuffer) {
buffer = new Uint8Array(event.data);
} else if (event.data instanceof Blob) {
alert("Blob type not supported");
GodotRuntime.error("Blob type not supported");
return;
} else if (typeof event.data === "string") {
is_string = 1;
var enc = new TextEncoder("utf-8");
buffer = new Uint8Array(enc.encode(event.data));
} else {
alert("Unknown message type");
GodotRuntime.error("Unknown message type");
return;
}
var len = buffer.length*buffer.BYTES_PER_ELEMENT;
var out = _malloc(len);
var out = GodotRuntime.malloc(len);
HEAPU8.set(buffer, out);
callback(out, len, is_string);
_free(out);
GodotRuntime.free(out);
},
// An error happened, 'onclose' will be called after this.
@ -86,15 +86,15 @@ var GodotWebSocket = {
if (!ref) {
return; // Godot object is gone.
}
let c_str = GodotOS.allocString(event.reason);
let c_str = GodotRuntime.allocString(event.reason);
callback(event.code, c_str, event.wasClean ? 1 : 0);
_free(c_str);
GodotRuntime.free(c_str);
},
// Send a message
send: function(p_id, p_data) {
const ref = IDHandler.get(p_id);
if (!ref || ref.readyState != ref.OPEN) {
if (!ref || ref.readyState !== ref.OPEN) {
return 1; // Godot object is gone or socket is not in a ready state.
}
ref.send(p_data);
@ -115,7 +115,7 @@ var GodotWebSocket = {
const ref = IDHandler.get(p_id);
if (ref && ref.readyState < ref.CLOSING) {
const code = p_code;
const reason = UTF8ToString(p_reason);
const reason = GodotRuntime.parseString(p_reason);
ref.close(code, reason);
}
},
@ -136,12 +136,12 @@ var GodotWebSocket = {
},
godot_js_websocket_create: function(p_ref, p_url, p_proto, p_on_open, p_on_message, p_on_error, p_on_close) {
const on_open = GodotOS.get_func(p_on_open).bind(null, p_ref);
const on_message = GodotOS.get_func(p_on_message).bind(null, p_ref);
const on_error = GodotOS.get_func(p_on_error).bind(null, p_ref);
const on_close = GodotOS.get_func(p_on_close).bind(null, p_ref);
const url = UTF8ToString(p_url);
const protos = UTF8ToString(p_proto);
const on_open = GodotRuntime.get_func(p_on_open).bind(null, p_ref);
const on_message = GodotRuntime.get_func(p_on_message).bind(null, p_ref);
const on_error = GodotRuntime.get_func(p_on_error).bind(null, p_ref);
const on_close = GodotRuntime.get_func(p_on_close).bind(null, p_ref);
const url = GodotRuntime.parseString(p_url);
const protos = GodotRuntime.parseString(p_proto);
var socket = null;
try {
if (protos) {
@ -160,7 +160,7 @@ var GodotWebSocket = {
var bytes_array = new Uint8Array(p_buf_len);
var i = 0;
for(i = 0; i < p_buf_len; i++) {
bytes_array[i] = getValue(p_buf + i, 'i8');
bytes_array[i] = GodotRuntime.getHeapValue(p_buf + i, 'i8');
}
var out = bytes_array.buffer;
if (!p_raw) {
@ -171,7 +171,7 @@ var GodotWebSocket = {
godot_js_websocket_close: function(p_id, p_code, p_reason) {
const code = p_code;
const reason = UTF8ToString(p_reason);
const reason = GodotRuntime.parseString(p_reason);
GodotWebSocket.close(p_id, code, reason);
},