void httpKill() { // shut down connections { JsVar *arr = httpGetArray(HTTP_ARRAY_HTTP_SERVER_CONNECTIONS,false); if (arr) { JsArrayIterator it; jsvArrayIteratorNew(&it, arr); while (jsvArrayIteratorHasElement(&it)) { JsVar *connection = jsvArrayIteratorGetElement(&it); _httpServerConnectionKill(connection); jsvUnLock(connection); jsvArrayIteratorNext(&it); } jsvArrayIteratorFree(&it); jsvRemoveAllChildren(arr); jsvUnLock(arr); } } { JsVar *arr = httpGetArray(HTTP_ARRAY_HTTP_CLIENT_CONNECTIONS,false); if (arr) { JsArrayIterator it; jsvArrayIteratorNew(&it, arr); while (jsvArrayIteratorHasElement(&it)) { JsVar *connection = jsvArrayIteratorGetElement(&it); _httpClientConnectionKill(connection); jsvUnLock(connection); jsvArrayIteratorNext(&it); } jsvArrayIteratorFree(&it); jsvRemoveAllChildren(arr); jsvUnLock(arr); } } // shut down our listeners, unlock objects, free data { JsVar *arr = httpGetArray(HTTP_ARRAY_HTTP_SERVERS,false); if (arr) { JsArrayIterator it; jsvArrayIteratorNew(&it, arr); while (jsvArrayIteratorHasElement(&it)) { JsVar *connection = jsvArrayIteratorGetElement(&it); SOCKET socket = (SOCKET)jsvGetIntegerAndUnLock(jsvObjectGetChild(connection,HTTP_NAME_SOCKET,0))-1; // so -1 if undefined if (socket!=INVALID_SOCKET) closesocket(socket); jsvUnLock(connection); jsvArrayIteratorNext(&it); } jsvArrayIteratorFree(&it); jsvRemoveAllChildren(arr); jsvUnLock(arr); } } #ifdef WIN32 // Shutdown Winsock WSACleanup(); #endif }
/*JSON{ "type":"method", "class": "Function", "name" : "replaceWith", "description" : ["This replaces the function with the one in the argument - while keeping the old function's scope. This allows inner functions to be edited, and is used when edit() is called on an inner function."], "generate" : "jswrap_function_replaceWith", "params" : [ [ "newFunc", "JsVar", "The new function to replace this function with"] ] }*/ void jswrap_function_replaceWith(JsVar *oldFunc, JsVar *newFunc) { if (!jsvIsFunction(newFunc)) { jsWarn("First argument of replaceWith should be a function - ignoring"); return; } // Grab scope - the one thing we want to keep JsVar *scope = jsvFindChildFromString(oldFunc, JSPARSE_FUNCTION_SCOPE_NAME, false); // so now remove all existing entries jsvRemoveAllChildren(oldFunc); // now re-add scope jsvAddName(oldFunc, scope); jsvUnLock(scope); // now re-add other entries JsObjectIterator it; jsvObjectIteratorNew(&it, newFunc); while (jsvObjectIteratorHasElement(&it)) { JsVar *el = jsvObjectIteratorGetKey(&it); jsvObjectIteratorNext(&it); if (!jsvIsStringEqual(el, JSPARSE_FUNCTION_SCOPE_NAME)) { JsVar *copy = jsvCopy(el); if (copy) { jsvAddName(oldFunc, copy); jsvUnLock(copy); } } } jsvObjectIteratorFree(&it); }
/*JSON{ "type" : "kill", "generate" : "jswrap_file_kill" }*/ void jswrap_file_kill() { JsVar *arr = fsGetArray(false); if (arr) { JsvObjectIterator it; jsvObjectIteratorNew(&it, arr); while (jsvObjectIteratorHasValue(&it)) { JsVar *file = jsvObjectIteratorGetValue(&it); jswrap_file_close(file); jsvUnLock(file); jsvObjectIteratorNext(&it); } jsvObjectIteratorFree(&it); jsvRemoveAllChildren(arr); jsvUnLock(arr); } // close fs library #ifndef LINUX if (fat_initialised) { fat_initialised = false; f_mount(0, 0, 0); } #endif #ifdef SD_CARD_ANYWHERE sdSPISetup(0, PIN_UNDEFINED); #endif }
/*JSON{ "type" : "kill", "generate" : "jswrap_pipe_kill", "ifndef" : "SAVE_ON_FLASH" }*/ void jswrap_pipe_kill() { // now remove all pipes... JsVar *arr = pipeGetArray(false); if (arr) { jsvRemoveAllChildren(arr); jsvUnLock(arr); } }
NO_INLINE static void _socketCloseAllConnectionsFor(JsNetwork *net, char *name) { JsVar *arr = socketGetArray(name, false); if (!arr) return; JsvObjectIterator it; jsvObjectIteratorNew(&it, arr); while (jsvObjectIteratorHasValue(&it)) { JsVar *connection = jsvObjectIteratorGetValue(&it); _socketConnectionKill(net, connection); jsvUnLock(connection); jsvObjectIteratorNext(&it); } jsvObjectIteratorFree(&it); jsvRemoveAllChildren(arr); jsvUnLock(arr); }
/*JSON{ "type" : "function", "name" : "clearTimeout", "generate" : "jswrap_interface_clearTimeout", "params" : [ ["id","JsVar","The id returned by a previous call to setTimeout"] ] } Clear the Timeout that was created with setTimeout, for example: ```var id = setTimeout(function () { print('foo'); }, 1000);``` ```clearTimeout(id);``` If no argument is supplied, all timers and intervals are stopped */ void _jswrap_interface_clearTimeoutOrInterval(JsVar *idVar, bool isTimeout) { JsVar *timerArrayPtr = jsvLock(timerArray); if (jsvIsUndefined(idVar)) { jsvRemoveAllChildren(timerArrayPtr); } else { JsVar *child = jsvIsBasic(idVar) ? jsvFindChildFromVar(timerArrayPtr, idVar, false) : 0; if (child) { JsVar *timerArrayPtr = jsvLock(timerArray); jsvRemoveChild(timerArrayPtr, child); jsvUnLock2(child, timerArrayPtr); } else { jsExceptionHere(JSET_ERROR, isTimeout ? "Unknown Timeout" : "Unknown Interval"); } } jsvUnLock(timerArrayPtr); jsiTimersChanged(); // mark timers as changed }
/*JSON{ "type":"function", "name" : "clearTimeout", "description" : ["Clear the Timeout that was created with setTimeout, for example:", "```var id = setTimeout(function () { print('foo'); }, 1000);```", "```clearTimeout(id);```", "If no argument is supplied, all timers and intervals are stopped" ], "generate" : "jswrap_interface_clearTimeout", "params" : [ [ "id", "JsVar", "The id returned by a previous call to setTimeout"] ] }*/ void _jswrap_interface_clearTimeoutOrInterval(JsVar *idVar, bool isTimeout) { JsVar *timerArrayPtr = jsvLock(timerArray); if (jsvIsUndefined(idVar)) { jsvRemoveAllChildren(timerArrayPtr); } else { JsVar *child = jsvIsBasic(idVar) ? jsvFindChildFromVar(timerArrayPtr, idVar, false) : 0; if (child) { JsVar *timerArrayPtr = jsvLock(timerArray); jsvRemoveChild(timerArrayPtr, child); jsvUnLock(child); jsvUnLock(timerArrayPtr); } else { jsError(isTimeout ? "Unknown Timeout" : "Unknown Interval"); } } jsvUnLock(timerArrayPtr); }
/*JSON{ "type" : "method", "class" : "Function", "name" : "replaceWith", "generate" : "jswrap_function_replaceWith", "params" : [ ["newFunc","JsVar","The new function to replace this function with"] ] } This replaces the function with the one in the argument - while keeping the old function's scope. This allows inner functions to be edited, and is used when edit() is called on an inner function. */ void jswrap_function_replaceWith(JsVar *oldFunc, JsVar *newFunc) { if (!jsvIsFunction(newFunc)) { jsWarn("First argument of replaceWith should be a function - ignoring"); return; } // If old was native or vice versa... if (jsvIsNativeFunction(oldFunc) != jsvIsNativeFunction(newFunc)) { if (jsvIsNativeFunction(newFunc)) oldFunc->flags |= JSV_NATIVE; else oldFunc->flags &= ~JSV_NATIVE; } // If old fn started with 'return' or vice versa... if (jsvIsFunctionReturn(oldFunc) != jsvIsFunctionReturn(newFunc)) { if (jsvIsFunctionReturn(newFunc)) oldFunc->flags = (oldFunc->flags&~JSV_VARTYPEMASK) |JSV_FUNCTION_RETURN; else oldFunc->flags = (oldFunc->flags&~JSV_VARTYPEMASK) |JSV_FUNCTION; } // Grab scope - the one thing we want to keep JsVar *scope = jsvFindChildFromString(oldFunc, JSPARSE_FUNCTION_SCOPE_NAME, false); // so now remove all existing entries jsvRemoveAllChildren(oldFunc); // now re-add scope if (scope) jsvAddName(oldFunc, scope); jsvUnLock(scope); // now re-add other entries JsvObjectIterator it; jsvObjectIteratorNew(&it, newFunc); while (jsvObjectIteratorHasValue(&it)) { JsVar *el = jsvObjectIteratorGetKey(&it); jsvObjectIteratorNext(&it); if (!jsvIsStringEqual(el, JSPARSE_FUNCTION_SCOPE_NAME)) { JsVar *copy = jsvCopy(el); if (copy) { jsvAddName(oldFunc, copy); jsvUnLock(copy); } } jsvUnLock(el); } jsvObjectIteratorFree(&it); }
/*JSON{ "type":"kill", "generate" : "jswrap_file_kill" }*/ void jswrap_file_kill() { { JsVar *arr = fsGetArray(false); if (arr) { JsvArrayIterator it; jsvArrayIteratorNew(&it, arr); while (jsvArrayIteratorHasElement(&it)) { JsVar *file = jsvArrayIteratorGetElement(&it); jswrap_file_close(file); jsvUnLock(file); jsvArrayIteratorNext(&it); } jsvArrayIteratorFree(&it); jsvRemoveAllChildren(arr); jsvUnLock(arr); } } }
/*JSON{ "type":"staticmethod", "class" : "Modules", "name" : "removeAllCached", "description" : "Remove all cached modules", "generate" : "jswrap_modules_removeAllCached" }*/ void jswrap_modules_removeAllCached() { JsVar *moduleList = jswrap_modules_getModuleList(); if (!moduleList) return; // out of memory jsvRemoveAllChildren(moduleList); jsvUnLock(moduleList); }