You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
58 lines
1.6 KiB
58 lines
1.6 KiB
var itest;
|
|
|
|
function InitWrappers() {
|
|
// itest = Module.cwrap('itest', 'string');
|
|
// itest = (str) => {
|
|
// const buffer = Module._malloc(str.length + 1)
|
|
// console.log({buffer})
|
|
// Module.stringToUTF8(str, buffer, str.length + 1)
|
|
// return Module.ccall('itest', 'string', ['number'], [buffer])
|
|
// }
|
|
|
|
window.read_str_pass = Module.cwrap('read_str_pass', 'void', ['number'])
|
|
}
|
|
|
|
window.cjs = new (class {
|
|
str_pass_size() {
|
|
return Module.ccall('str_pass_size', 'number')
|
|
}
|
|
|
|
write_string(string) {
|
|
const buffer = Module._malloc(string.length + 1)
|
|
Module.stringToUTF8(string, buffer, string.length + 1)
|
|
return buffer
|
|
}
|
|
|
|
set_string_pass(str_address, size, other = 0) {
|
|
const offset = Module._malloc(this.str_pass_size())
|
|
Module.setValue(offset, str_address, 'i32')
|
|
Module.setValue(offset + 4, size, 'i32')
|
|
Module.setValue(offset + 8, other, 'i32')
|
|
return offset
|
|
} // [START, SIZE, 0]
|
|
|
|
string_pass(string) {
|
|
const str_address = this.write_string(string)
|
|
return this.set_string_pass(str_address, string.length)
|
|
}
|
|
|
|
receive(offset) {
|
|
const { str_address, str_length, other } = this.get_string_pass(offset)
|
|
const string = Module.UTF8ToString(str_address, str_length)
|
|
Module._free(offset, this.str_pass_size())
|
|
return string
|
|
}
|
|
|
|
get_string_pass(offset) {
|
|
const str_address = Module.getValue(offset, 'i32')
|
|
const str_length = Module.getValue(offset + 4, 'i32')
|
|
const other = Module.getValue(offset + 8, 'i32')
|
|
return { str_address, str_length, other }
|
|
}
|
|
|
|
fire_event_bus(key) {
|
|
const key_pass = this.string_pass(key)
|
|
Module.ccall('fire_event_bus', null, ['number'], [key_pass])
|
|
}
|
|
})
|