Aufbau eines Eventhandlers

Entwickler-Ian

Mitglied
Moin Leute,

aktuell stehe etwas auf dem Schlauch und bräuchte einen kleinen Anstupser :)

Problem:
Ich versuche einen Zentralen Eventhandler in JS umzusetzen. (Timestamp/Feld-Id zum Anzeigen /Event)
Dazu läuft ein zentraler Counter den ich mit der Funktion zur Überprüfung der Events ausrüsten "würden".

Die Frage die sich mir noch stellt ist, wie ich die Events im Browser puffere. Array/Objekt? Welche Struktur? Wie kommt der Counter an die Timestamps dran? Woher weis das Feld, dass es von dem Event betroffen ist? Im Prinzip müsste ich Timestamp und Feld-Id als Key benutzen?

Vermutlich ist es aber auch wesentlich einfacher und ich komme nur nicht drauf^^
Wäre super wenn jmd eine Idee oder einen Tipp hat.

Gruß Ian
 
Ich brauche auch einen kleinen Anstupser da ich nicht verstehe was du machen willst.

Erkläre doch mal bitte genauerwas das Event machen soll, wie es ausgelöst werden soll und welche Daten verarbeitet werden.

Vielleicht kannst du ja mal ein Beispiel machen was du machst und was dann passieren soll.
 
Naja ich habe in letzter Zeit in verschiedenen Projekten immer mal wieder ein Counter, Uhrzeit, etc gebraucht. Jetzt wo ich mal ein Moment Ruhe habe, hab ich begonnen verschiedene "Klassen" aufzubauen. Diese soll die Grundlegenden Aufgaben im Bereich "Time & Events" abdecken.

Als Ereignis z.B wäre ein Termin im Kalender gespeichert in einer Datenbank.
Diese sollen beim laden der Seite exportiert werden. Sagen wir mal in einer Liste
- 15:00 Uhr - Termin 1 - In 15min
- 16:30 Uhr - Termin 2 - In 105min

Alle X min soll nun überprüft werden (derzeitig läuft ein counter serverzeit++/sek) wie lange es noch bis zum Termin ist. Und dann eventuell 5 min vorher Funktion Warnung ausführen. Oder Eben bei 0 Minuten Rest Termin anzeigen.

Jeder dieser Termine steht ja nun in einem Feld drin und muss eben alle 5 Minuten ausgetauscht werden. Das wäre mal ein Beispiel.

Kurz: Ich will nicht für jedes Event auf der Seite ein eigenen Counter starten, sondern nur einen laufen lassen und die Events an der entsprechenden Stelle anzeigen/updaten lassen... Und die Möglichkeit bei Erreichen des Timestamp-Wertes eine Funktion aufrufen lassen.

Hoffe es ist nun verständlicher.
Gruß Ian
 
Wo und wie sind die vorhandenen Termine gespeichert?

Da bei den Terminen ja das Datum und die Uhrzeit dabei sein muss, reicht es im Grunde aus wenn das Event z.B. jede Minute einmal ausgeführt wird.

Wenn die Termine in einer Datenbank stehen wird einfach überprüft welcher Termin innerhalb der nächsten 5, 10, ... Minuten fällig ist.

Mit Ajax kenne ich mich leider gar nicht aus aber damit sollte es eigentlich relativ einfach zu lösen sein.

So in etwa könnte aber zumindest die Abfrage aussehen:
SQL:
SELECT
    termin
FROM tabelle
WHERE TIMESTAMPDIFF(MINUTE, CURRENT_TIMESTAMP, termin) BETWEEN 1 AND 10
 
Jap das will ich gerade vermeiden. Es soll ja ein allgmeines Skript werden, um nicht bei jedem Projekt die 80% welche gleich sind, sich zusammen kopieren zu müssen, sondern nur noch die Klasse einbinden braucht.
Angenommen aus den Minuten Events werden welche die jede Sekunden abgefeuert werden müssten. Nehmen wir als Bsp Ebay. 20Counter die im Überblick runterzählen. Jede Sekunde eine Abfrage an die DB ist etwas Heavy.

Deswegen würde ich gerne einen Puffer im Browser schaffen, dass z.B eben nur alle 5 Minuten eine Abfrage getätigt werden muss, ein Counter (Servertime) mit einem Timeout hochzählt und dann jede Stunde/Minute/Sekunde prüft ob etwas im Puffer ist. Gegebenenfalls bei direkten Events den Puffer aktualisiert.
Alternativ könnte ich auch beim Laden der Seite für jeden Timer ein eigenen Counter starten, was meiner Meinung nach (man möge mich gern korrigieren) ein vielfaches an Last dem Browser abverlangt.

Das einzig logische was mir eben in den Sinn gekommen ist, ist ein Array in dem alle Events der kommenden 5 Minuten drin stehen. Ungefähr so:
Code:
  Temp_Buffer[2]['timestamp'] = 123456789;
  Temp_Buffer[2]['container']   = '#Timer1';
  Temp_Buffer[2]['function']     = 'do_something()';
  Temp_Buffer[3]['timestamp'] = 123456789;
  Temp_Buffer[3]['container']   = '#Timer1';
  Temp_Buffer[3]['function']     = 'do_something()';
Jetzt kommt das Problem wie komme ich an die Werte im Array dran wenn schon welche abgearbeitet wurden? mit ".length" erfahre ich zwar, dass 2 Elemente vorhanden sind aber ich kann nicht hochzählen, weil es eben erst ab [2] losgeht und der counter bei 0 beginnt. Also nur 0 und 1 prüft.

Und die wesentlichere Frage, gibt es nicht vlt einen ganz anderen Denkansatz als ein Array wie man so etwas realisieren könnte?

Gruß Ian
 
Also wenn du die Daten in ein Array ablegst und dann ein Termin dabei ist der bereits abgelaufen ist, dann musst du diesen auch wieder aus dem Array löschen (somit beginnt der Index aber wieder bei 0). Eine andere Möglichkeit wäre das du ein zusätzliches Feld nimmst in dem du TRUE bei den Terminen einträgst die noch beachtet werden müssen und FALSE bei Terminen die nicht mehr gültig sind.

Eventuell kannst du die Angaben auch als Cookie auslagern!?
 
Moin,

irgendwann im laufe der Nacht kam mir eine Idee^^

Code:
  this.check_events = function(){
    $('.Timer', 'body').each( function(){
      var Temp_Timestamp = $(this).children(":last").val();
       $(this).children(":first").text(Eventhandler.seconds2time(Temp_Timestamp - Eventhandler.G_Servertime));
    });
  }

HTML:
  <div class="Timer">
    <span class="ShowTime"></span>
    <input class="Timestamp" type="hidden" value="${timestamp}" />
  </div>

Auch wenn ich mir noch nicht ganz sicher über die Ressourcen bin die benötigt werden um die Seite jede Sekunde nach ".Timer" Elementen abzusuchen, scheint dies vorläufig die einfachste Lösung zu sein.

Danke dir für deine Zeit, manchmal reicht es einfach mit jmd drüber zu reden um selbst eine Lösung zu finden^^
Gruß Ian
 
Zurück