Kill tasks when their websocket closes. Sigh.

git-svn-id: https://www.unprompted.com/svn/projects/tildefriends/trunk@3779 ed5197a5-7fde-0310-b194-c3ffbd925b24
This commit is contained in:
Cory McWilliams 2022-01-21 00:49:03 +00:00
parent 1734c88627
commit df0bb102dc
3 changed files with 19 additions and 3 deletions

View File

@ -38,6 +38,18 @@ function socket(request, response, client) {
var options = {}; var options = {};
var credentials = auth.query(request.headers); var credentials = auth.query(request.headers);
response.onClose = async function() {
if (process && process.task) {
process.task.kill();
}
}
response.onError = async function(error) {
if (process && process.task) {
process.task.kill();
}
}
response.onMessage = async function(event) { response.onMessage = async function(event) {
if (event.opCode == 0x1 || event.opCode == 0x2) { if (event.opCode == 0x1 || event.opCode == 0x2) {
var message; var message;
@ -110,7 +122,7 @@ function socket(request, response, client) {
} }
} else if (event.opCode == 0x8) { } else if (event.opCode == 0x8) {
// Close. // Close.
if (process) { if (process && process.task) {
process.task.kill(); process.task.kill();
} }
response.send(event.data, 0x8); response.send(event.data, 0x8);

View File

@ -301,10 +301,14 @@ function handleWebSocketRequest(request, response, client) {
break; break;
} }
} }
} else {
response.onClose();
client.close();
} }
}); });
client.onError(function(error) { client.onError(function(error) {
logError(client.peerName + " - - [" + new Date() + "] " + error); logError(client.peerName + " - - [" + new Date() + "] " + error);
response.onError(error);
}); });
let headers = { let headers = {

View File

@ -286,7 +286,7 @@ static JSValue _taskstub_getExports(JSContext* context, JSValueConst this_val, i
tf_taskstub_t* stub = JS_GetOpaque(this_val, _classId); tf_taskstub_t* stub = JS_GetOpaque(this_val, _classId);
promiseid_t promise = -1; promiseid_t promise = -1;
JSValue result = tf_task_allocate_promise(stub->_owner, &promise); JSValue result = tf_task_allocate_promise(stub->_owner, &promise);
tf_task_send_promise_message(stub->_owner, (tf_taskstub_t*)stub, kGetExports, promise, JS_UNDEFINED); tf_task_send_promise_message(stub->_owner, stub, kGetExports, promise, JS_UNDEFINED);
return result; return result;
} }
@ -369,7 +369,7 @@ static JSValue _taskstub_execute(JSContext* context, JSValueConst this_val, int
tf_taskstub_t* stub = JS_GetOpaque(this_val, _classId); tf_taskstub_t* stub = JS_GetOpaque(this_val, _classId);
promiseid_t promise = -1; promiseid_t promise = -1;
JSValue result = tf_task_allocate_promise(stub->_owner, &promise); JSValue result = tf_task_allocate_promise(stub->_owner, &promise);
tf_task_send_promise_message(stub->_owner, (tf_taskstub_t*)stub, kExecute, promise, argv[0]); tf_task_send_promise_message(stub->_owner, stub, kExecute, promise, argv[0]);
return result; return result;
} }