• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

[FRAGE] setTimeout und _ideStart Zeitstempel?!?

Paykoman

New member
Hallöchen,

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
 
Da die Funktion ja automatisch einen Zeitstempel erstellt von wo an der timeout läuft
ist das irgendwo dokumentiert?

sollte man meinen das ich nun nur einen aktuellen Stemepl brauche zum gegenrechnen zum erhalten der verbleibenden Sekunden
nur dann sollte man das meinen

Nun ja die Problematik liegt darin das die beiden Stempel die zur Berechnung als Grundlage dienen sollen super weit auseinander liegen
allein der variablenbezeichner sollte dir sagen, dass du diese nicht nutzen solltest.
du lieferst das beste beispiel, das pseudoprivate variablen nicht verwendet werden sollten, sondern man immer richtig kapseln muss

über sehe ich was oder was mache ich falsch?
ja, du nutzt etwas, von dem du nicht weißt was es ist und nimmst an, es ist der zeitstempel bei dem du setTimeout aufgerufen hast.
wenn du diesen benötigst, besorge ihn dir zu diesem zeitpunkt und merke ihn dir
 
Zurück
Oben