diff --git a/microscript/ILibDuktape_HttpStream.c b/microscript/ILibDuktape_HttpStream.c index 69a73fa..0476d00 100644 --- a/microscript/ILibDuktape_HttpStream.c +++ b/microscript/ILibDuktape_HttpStream.c @@ -627,6 +627,13 @@ duk_ret_t ILibDuktape_HttpStream_http_onUpgrade(duk_context *ctx) duk_push_null(ctx); // [HTTPStream][websocket][emit][this][upgrade][imsg][WS_DEC][null] duk_call_method(ctx, 4); duk_pop(ctx); // [HTTPStream][websocket] + if (duk_has_prop_string(ctx, -1, ILibDuktape_WS2CR)) + { + duk_get_prop_string(ctx, -1, ILibDuktape_WS2CR); // [HTTPStream][websocket][request] + duk_prepare_method_call(ctx, -1, "removeAllListeners"); // [HTTPStream][websocket][request][removeAll][this] + duk_call_method(ctx, 0); duk_pop_2(ctx); // [HTTPStream][websocket] + } + return(0); } duk_ret_t ILibDuktape_findAgentRequestSink(duk_context *ctx) @@ -805,6 +812,7 @@ duk_ret_t ILibDuktape_HttpStream_http_OnSocketReady(duk_context *ctx) void *httpStream; duk_dup(ctx, 0); // [socket] + duk_int_t *tt = _get_refcount_ptr(ctx, -1); duk_push_string(ctx, "client"); duk_put_prop_string(ctx, -2, ILibDuktape_EventEmitter_FinalizerDebugMessage); duk_push_c_function(ctx, ILibDuktape_HttpStream_http_SocketDiedPrematurely, DUK_VARARGS); duk_put_prop_string(ctx, -2, ILibDuktape_Socket2DiedListener); // [socket] @@ -911,7 +919,7 @@ duk_ret_t ILibDuktape_HttpStream_http_OnSocketReady(duk_context *ctx) duk_dup(ctx, -2); // [socket][clientRequest][httpStream][clientRequest] duk_put_prop_string(ctx, -2, ILibDuktape_HTTP2CR); // [socket][clientRequest][httpStream] ILibDuktape_EventEmitter_ForwardEventEx(ctx, -1, -2, "response"); - ILibDuktape_EventEmitter_ForwardEvent(ctx, -1, "continue", -2, "continue"); + ILibDuktape_EventEmitter_ForwardEventEx(ctx, -1, -2, "continue"); ILibDuktape_EventEmitter_AddOn_Infrastructure(ctx, -1, "upgrade", ILibDuktape_HttpStream_http_onUpgrade); ILibDuktape_EventEmitter_AddOn_Infrastructure(ctx, -1, "response", ILibDuktape_HttpStream_http_responseSink); ILibDuktape_EventEmitter_AddOnceEx3(ctx, -1, "write", ILibDuktape_HttpStream_http_SocketResponseReceived); @@ -1235,6 +1243,7 @@ duk_ret_t ILibDuktape_ClientRequest_Finalizer(duk_context *ctx) data->buffer = NULL; } } + return(0); } @@ -1623,13 +1632,6 @@ duk_ret_t ILibDuktape_HttpStream_http_server_upgradeWebsocket(duk_context *ctx) duk_push_current_function(ctx); // [socket][func] duk_get_prop_string(ctx, -2, "unpipe"); // [socket][func][unpipe] duk_dup(ctx, -3); // [socket][func][unpipe][this] - - duk_get_prop_string(ctx, -1, "\xFF_RS_PipeArray"); // [arr] - duk_get_prop_index(ctx, -1, 0); // [arr][obj] - char *tt = Duktape_GetStringPropertyValue(ctx, -1, "_ObjectID", NULL); - duk_int_t *t = _get_refcount_ptr(ctx, -1); - duk_pop_2(ctx); - duk_call_method(ctx, 0); duk_pop(ctx); // [socket][func] duk_get_prop_string(ctx, -1, "imsg"); // [socket][func][imsg] @@ -3814,12 +3816,6 @@ duk_ret_t ILibDuktape_HttpStream_Agent_reuseSocket(duk_context *ctx) { // Yield to the next loop, before we emit a 'socket' event, because emitting this event before anyone has the clientRequest object is pointless void *imm = ILibDuktape_Immediate(ctx, (void*[]) { duk_get_heapptr(ctx, 0), duk_get_heapptr(ctx, 1) }, 2, ILibDuktape_HttpStream_Agent_reuseSocketEx); - //duk_push_heapptr(ctx, imm); // [immediate] - //duk_dup(ctx, 1); // [immediate][ClientRequest] - //duk_put_prop_string(ctx, -2, "CR"); // [immediate] - //duk_dup(ctx, 0); // [immediate][Socket] - //duk_put_prop_string(ctx, -2, "Socket"); // [immediate] - //duk_pop(ctx); return(0); } duk_ret_t ILibDuktape_HttpStream_Agent_createConnection_eventSink(duk_context *ctx) @@ -4401,11 +4397,12 @@ ILibTransport_DoneState ILibDuktape_httpStream_webSocket_EncodedWriteSink(ILibDu ILibDuktape_DuplexStream_WriteEnd(state->decodedStream); if (ILibIsRunningOnChainThread(state->chain) != 0 && state->encodedStream->writableStream->pipedReadable != NULL) { + duk_context *ctx = state->ctx; duk_push_heapptr(state->ctx, state->encodedStream->writableStream->pipedReadable); // [stream] duk_get_prop_string(state->ctx, -1, "end"); // [stream][end] duk_swap_top(state->ctx, -2); // [end][this] - if (duk_pcall_method(state->ctx, 0) != 0) { ILibDuktape_Process_UncaughtExceptionEx(state->ctx, "http.webSocketStream.write(): Error Dispatching 'end' "); } - duk_pop(state->ctx); // ... + if (duk_pcall_method(state->ctx, 0) != 0) { ILibDuktape_Process_UncaughtExceptionEx(ctx, "http.webSocketStream.write(): Error Dispatching 'end' "); } + duk_pop(ctx); // ... } break; case WEBSOCKET_OPCODE_PING: @@ -4451,11 +4448,23 @@ void ILibDuktape_httpStream_webSocket_EncodedEndSink(ILibDuktape_DuplexStream *s duk_push_heapptr(state->ctx, state->ObjectPtr); // [websocket] duk_get_prop_string(state->ctx, -1, "decoded"); // [websocket][decoded] + duk_del_prop_string(state->ctx, -1, ILibDuktape_WSDEC2WS); duk_prepare_method_call(state->ctx, -1, "unpipe"); // [websocket][decoded][pmc][this] duk_pcall_method(state->ctx, 0); duk_pop(state->ctx); // [websocket][decoded] + duk_prepare_method_call(state->ctx, -1, "removeAllListeners"); // [websocket][decoded][removeAll][this] + duk_pcall_method(state->ctx, 0); duk_pop(state->ctx); // [websocket][decoded] + duk_pop(state->ctx); // [websocket] + duk_get_prop_string(state->ctx, -1, "encoded"); // [websocket][encoded] + duk_prepare_method_call(state->ctx, -1, "removeAllListeners"); // [websocket][encoded][removeAll][this] + duk_pcall_method(state->ctx, 0); duk_pop(state->ctx); // [websocket][encoded] + + duk_del_prop_string(state->ctx, -1, ILibDuktape_WSENC2WS); + duk_pop(state->ctx); // [websocket] + + ILibDuktape_DeleteReadOnlyProperty(state->ctx, -1, "decoded"); - ILibDuktape_DeleteReadOnlyProperty(state->ctx, -1, "decoded"); + ILibDuktape_DeleteReadOnlyProperty(state->ctx, -1, "encoded"); duk_pop(state->ctx); // ... if (!state->closed) { ILibDuktape_DuplexStream_WriteEnd(state->decodedStream); } @@ -4671,6 +4680,7 @@ duk_ret_t ILibDuktape_httpStream_webSocketStream_sendPong(duk_context *ctx) ILibDuktape_httpStream_webSocket_WriteWebSocketPacket(state, WEBSOCKET_OPCODE_PONG, NULL, 0, ILibWebClient_WebSocket_FragmentFlag_Complete); return(0); } + duk_ret_t ILibDuktape_httpStream_webSocketStream_encodedPiped(duk_context *ctx) { // Someone Piped to the Encoded Stream @@ -4691,11 +4701,15 @@ duk_ret_t ILibDuktape_httpStream_webSocketStream_encodedPiped(duk_context *ctx) } duk_ret_t ILibDuktape_httpStream_webSocketStream_encoded_Finalizer(duk_context *ctx) { - duk_get_prop_string(ctx, 0, ILibDuktape_WSENC2WS); - duk_get_prop_string(ctx, -1, ILibDuktape_WebSocket_StatePtr); - ILibDuktape_WebSocket_State *state = (ILibDuktape_WebSocket_State*)Duktape_GetBuffer(ctx, -1, NULL); + if (duk_has_prop_string(ctx, -1, ILibDuktape_WSENC2WS)) + { + duk_get_prop_string(ctx, 0, ILibDuktape_WSENC2WS); + duk_get_prop_string(ctx, -1, ILibDuktape_WebSocket_StatePtr); + ILibDuktape_WebSocket_State *state = (ILibDuktape_WebSocket_State*)Duktape_GetBuffer(ctx, -1, NULL); + + state->encodedStream = NULL; + } - state->encodedStream = NULL; return(0); } @@ -4879,7 +4893,6 @@ duk_ret_t ILibDuktape_httpStream_webSocketStream_new(duk_context *ctx) ILibDuktape_WriteID(ctx, "http.WebSocketStream"); state = (ILibDuktape_WebSocket_State*)Duktape_PushBuffer(ctx, sizeof(ILibDuktape_WebSocket_State)); // [WebSocket][data] duk_put_prop_string(ctx, -2, ILibDuktape_WebSocket_StatePtr); // [WebSocket] - state->ctx = ctx; state->ObjectPtr = duk_get_heapptr(ctx, -1); state->chain = Duktape_GetChain(ctx); @@ -4898,7 +4911,9 @@ duk_ret_t ILibDuktape_httpStream_webSocketStream_new(duk_context *ctx) duk_push_object(ctx); // [WebSocket][Encoded] ILibDuktape_WriteID(ctx, "http.WebSocketStream.encoded"); state->encodedStream = ILibDuktape_DuplexStream_InitEx(ctx, ILibDuktape_httpStream_webSocket_EncodedWriteSink, ILibDuktape_httpStream_webSocket_EncodedEndSink, ILibDuktape_httpStream_webSocket_EncodedPauseSink, ILibDuktape_httpStream_webSocket_EncodedResumeSink, ILibDuktape_httpStream_webSocket_EncodedUnshiftSink, state); - ILibDuktape_EventEmitter_AddOnEx(ctx, -1, "pipe", ILibDuktape_httpStream_webSocketStream_encodedPiped); + + ILibDuktape_EventEmitter_AddOn_Infrastructure(ctx, -1, "pipe", ILibDuktape_httpStream_webSocketStream_encodedPiped); + duk_dup(ctx, -2); // [WebSocket][Encoded][WebSocket] duk_put_prop_string(ctx, -2, ILibDuktape_WSENC2WS); // [WebSocket][Encoded] ILibDuktape_EventEmitter_AddOnceEx3(ctx, -1, "~", ILibDuktape_httpStream_webSocketStream_encoded_Finalizer); diff --git a/microscript/ILibDuktape_Polyfills.c b/microscript/ILibDuktape_Polyfills.c index fbcd7cb..751a8ef 100644 --- a/microscript/ILibDuktape_Polyfills.c +++ b/microscript/ILibDuktape_Polyfills.c @@ -2272,7 +2272,7 @@ void ILibDuktape_Polyfills_JS_Init(duk_context *ctx) duk_peval_string_noresult(ctx, "addCompressedModule('clipboard', Buffer.from('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', 'base64'));"); // Promise: This is very important, as it is used everywhere. Refer to /modules/promise.js to see a human readable version of promise.js - duk_peval_string_noresult(ctx, "addCompressedModule('promise', Buffer.from('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', 'base64'));"); + duk_peval_string_noresult(ctx, "addCompressedModule('promise', Buffer.from('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', 'base64'));"); // util-agentlog, used to parse agent error logs. Refer to modules/util-agentlog.js duk_peval_string_noresult(ctx, "addCompressedModule('util-agentlog', Buffer.from('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', 'base64'));"); diff --git a/microscript/ILibduktape_EventEmitter.c b/microscript/ILibduktape_EventEmitter.c index a62c885..f5f0811 100644 --- a/microscript/ILibduktape_EventEmitter.c +++ b/microscript/ILibduktape_EventEmitter.c @@ -1335,6 +1335,13 @@ duk_ret_t ILibDuktape_EventEmitter_deleteProperty(duk_context *ctx) } return(0); } +duk_ret_t ILibDuktape_EventEmitter_setFinalizerMetadata(duk_context *ctx) +{ + duk_push_this(ctx); + duk_dup(ctx, 0); + duk_put_prop_string(ctx, -2, ILibDuktape_EventEmitter_FinalizerDebugMessage); + return(0); +} void ILibDuktape_EventEmitter_PUSH(duk_context *ctx, void *chain) { duk_push_object(ctx); // [emitter] @@ -1346,6 +1353,7 @@ void ILibDuktape_EventEmitter_PUSH(duk_context *ctx, void *chain) ILibDuktape_CreateInstanceMethod(ctx, "showReferences", ILibDuktape_EventEmitter_showReferences, DUK_VARARGS); ILibDuktape_CreateInstanceMethod(ctx, "addHiddenReference", ILibDuktape_EventEmitter_addHidden, 2); ILibDuktape_CreateInstanceMethod(ctx, "deleteProperty", ILibDuktape_EventEmitter_deleteProperty, 2); + ILibDuktape_CreateInstanceMethod(ctx, "setFinalizerMetadata", ILibDuktape_EventEmitter_setFinalizerMetadata, 1); } void ILibDuktape_EventEmitter_Init(duk_context *ctx) { diff --git a/modules/promise.js b/modules/promise.js index 67d2179..10729fd 100644 --- a/modules/promise.js +++ b/modules/promise.js @@ -25,32 +25,14 @@ function getRootPromise(obj) return (obj); } -function event_switcher_helper(desired_callee, target, forward) -{ - this._ObjectID = 'event_switcher'; - this.func = function func() - { - var args = []; - if (func.forward != null) { args.push(func.forward); } - for(var i in arguments) - { - args.push(arguments[i]); - } - return (func.target.apply(func.desired, args)); - }; - this.func.desired = desired_callee; - this.func.target = target; - this.func.forward = forward; - this.func.self = this; -} function event_switcher(desired_callee, target) { - return (new event_switcher_helper(desired_callee, target)); + return ({ _ObjectID: 'event_switcher', func: target.bind(desired_callee) }); } function event_forwarder(sourceObj, sourceName, targetObj, targetName) { - sourceObj.on(sourceName, (new event_switcher_helper(targetObj, targetObj.emit, targetName)).func); + sourceObj.on(sourceName, targetObj.emit.bind(targetObj)); } function Promise(promiseFunc)