Hallöchen,
nun ich nutzte die setTimeout()-Funktion um kurzfrisstige banns zu händeln, soweit klappt alles ganz gut.
So lege ich die Funktion an und speichere es in die User-Instanz. Beim debuggen kommt dann folgendes heraus (SSH-Terminal):
Da die Funktion ja automatisch einen Zeitstempel erstellt von wo an der timeout läuft, sollte man meinen das ich nun nur einen aktuellen Stemepl brauche zum gegenrechnen zum erhalten der verbleibenden Sekunden, ja schön wäre es gewesen =(
Nun ja die Problematik liegt darin das die beiden Stempel die zur Berechnung als Grundlage dienen sollen super weit auseinander liegen, über sehe ich was oder was mache ich falsch? =(
MFG: Paykoman
nun ich nutzte die setTimeout()-Funktion um kurzfrisstige banns zu händeln, soweit klappt alles ganz gut.
Code:
spamData[socket.uid].timeout = setTimeout(function(socket){
spamData[socket.uid] = {
spamScore: 0,
kickCount: 0,
banned: false,
timeout: 0
}
}, spamTempBanInMinutes, socket);
So lege ich die Funktion an und speichere es in die User-Instanz. Beim debuggen kommt dann folgendes heraus (SSH-Terminal):
Code:
Add user: 9X72h2fWz3r7ECaMAAAC (1) to disconnect loop
{ spamScore: 1,
kickCount: 2,
banned: true,
timeout:
{ _idleTimeout: 600000,
_idlePrev:
{ '0': [Function: listOnTimeout],
_idleNext: [Circular],
_idlePrev: [Circular],
msecs: 600000 },
_idleNext:
{ '0': [Function: listOnTimeout],
_idleNext: [Circular],
_idlePrev: [Circular],
msecs: 600000 },
_idleStart: 8338195633,
_onTimeout: [Function],
_repeat: false } }
Da die Funktion ja automatisch einen Zeitstempel erstellt von wo an der timeout läuft, sollte man meinen das ich nun nur einen aktuellen Stemepl brauche zum gegenrechnen zum erhalten der verbleibenden Sekunden, ja schön wäre es gewesen =(
Code:
if( spamData[socket.uid].banned )
{
timeout = spamData[socket.uid].timeout; // hole timeout instanz
left = Math.ceil((timeout._idleStart + timeout._idleTimeout - Date.now()) / 1000); // berechne verbleibende Sekunden
if( Debug ){ console.log("[ "+socket.id + " / "+socket.uid+" ] is still banned for "+left+" seconds"); }
// test ausgabe
console.log('timeout._idleStart: '+timeout._idleStart); // 8.336.943.545 (so klein und Date.now() so viel höher??!!??)
console.log('timeout._idleTimeout: '+timeout._idleTimeout); // 600.000
console.log('Date.now(): '+Date.now()); // 1.443.867.601.833 ( WTF ??? )
console.log('left: '+left); // -1.435.530.058
socket.emit('auth', {e: 'bann', left: left});
socket.disconnect();
}
Nun ja die Problematik liegt darin das die beiden Stempel die zur Berechnung als Grundlage dienen sollen super weit auseinander liegen, über sehe ich was oder was mache ich falsch? =(
MFG: Paykoman