From 6d26df0adaa05a889f70a38afe726de260f935d2 Mon Sep 17 00:00:00 2001 From: sbosse Date: Mon, 21 Jul 2025 23:12:41 +0200 Subject: [PATCH] Mon 21 Jul 22:43:21 CEST 2025 --- js/web/nosleep.js | 149 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 149 insertions(+) create mode 100644 js/web/nosleep.js diff --git a/js/web/nosleep.js b/js/web/nosleep.js new file mode 100644 index 0000000..2d17c1f --- /dev/null +++ b/js/web/nosleep.js @@ -0,0 +1,149 @@ +HackTimer = function () { + try { + var blob = new Blob (["\ + var fakeIdToId = {};\ + onmessage = function (event) {\ + var data = event.data,\ + name = data.name,\ + fakeId = data.fakeId,\ + time;\ + if(data.hasOwnProperty('time')) {\ + time = data.time;\ + }\ + switch (name) {\ + case 'setInterval':\ + fakeIdToId[fakeId] = setInterval(function () {\ + postMessage({fakeId: fakeId});\ + }, time);\ + break;\ + case 'clearInterval':\ + if (fakeIdToId.hasOwnProperty (fakeId)) {\ + clearInterval(fakeIdToId[fakeId]);\ + delete fakeIdToId[fakeId];\ + }\ + break;\ + case 'setTimeout':\ + fakeIdToId[fakeId] = setTimeout(function () {\ + postMessage({fakeId: fakeId});\ + if (fakeIdToId.hasOwnProperty (fakeId)) {\ + delete fakeIdToId[fakeId];\ + }\ + }, time);\ + break;\ + case 'clearTimeout':\ + if (fakeIdToId.hasOwnProperty (fakeId)) {\ + clearTimeout(fakeIdToId[fakeId]);\ + delete fakeIdToId[fakeId];\ + }\ + break;\ + }\ +}\ +"]); + // Obtain a blob URL reference to our worker 'file'. + workerScript = window.URL.createObjectURL(blob); + } catch (error) { + /* Blob is not supported, use external script instead */ + console.log(logPrefix + 'Initialisation failed: Blob is not supported!') + return; + } + var worker, + fakeIdToCallback = {}, + lastFakeId = 0, + maxFakeId = 0x7FFFFFFF, // 2 ^ 31 - 1, 31 bit, positive values of signed 32 bit integer + logPrefix = 'HackTimer.js by turuslan: '; + if (typeof (Worker) !== 'undefined') { + function getFakeId () { + do { + if (lastFakeId == maxFakeId) { + lastFakeId = 0; + } else { + lastFakeId ++; + } + } while (fakeIdToCallback.hasOwnProperty (lastFakeId)); + return lastFakeId; + } + try { + worker = new Worker (workerScript); + window.setInterval = function (callback, time /* , parameters */) { + var fakeId = getFakeId (); + fakeIdToCallback[fakeId] = { + callback: callback, + parameters: Array.prototype.slice.call(arguments, 2) + }; + worker.postMessage ({ + name: 'setInterval', + fakeId: fakeId, + time: time + }); + return fakeId; + }; + window.clearInterval = function (fakeId) { + if (fakeIdToCallback.hasOwnProperty(fakeId)) { + delete fakeIdToCallback[fakeId]; + worker.postMessage ({ + name: 'clearInterval', + fakeId: fakeId + }); + } + }; + window.setTimeout = function (callback, time /* , parameters */) { + var fakeId = getFakeId (); + fakeIdToCallback[fakeId] = { + callback: callback, + parameters: Array.prototype.slice.call(arguments, 2), + isTimeout: true + }; + worker.postMessage ({ + name: 'setTimeout', + fakeId: fakeId, + time: time + }); + return fakeId; + }; + window.clearTimeout = function (fakeId) { + if (fakeIdToCallback.hasOwnProperty(fakeId)) { + delete fakeIdToCallback[fakeId]; + worker.postMessage ({ + name: 'clearTimeout', + fakeId: fakeId + }); + } + }; + worker.onmessage = function (event) { + var data = event.data, + fakeId = data.fakeId, + request, + parameters, + callback; + if (fakeIdToCallback.hasOwnProperty(fakeId)) { + request = fakeIdToCallback[fakeId]; + callback = request.callback; + parameters = request.parameters; + if (request.hasOwnProperty ('isTimeout') && request.isTimeout) { + delete fakeIdToCallback[fakeId]; + } + } + if (typeof (callback) === 'string') { + try { + callback = new Function (callback); + } catch (error) { + console.log (logPrefix + 'Error parsing callback code string: ', error); + } + } + if (typeof (callback) === 'function') { + callback.apply (window, parameters); + } + }; + worker.onerror = function (event) { + console.log (event); + }; + console.log (logPrefix + 'Initialisation succeeded'); + } catch (error) { + console.log (logPrefix + 'Initialisation failed'); + console.error (error); + } + } else { + console.log (logPrefix + 'Initialisation failed - HTML5 Web Worker is not supported'); + } +}; +HackTimer();