ich wollte für eines meiner Projekte eine Art "Event System" realisieren.
Die umgebende Struktur sieht so aus:
ConfigParser Dateien definieren für bestimmte Objekte die Art eines Events, also zb so:
Code: Alles auswählen
Handle_name: call::Event_name
Die Events selber funktionieren bisher so:
Ich habe ein Plugin System gebaut, das aus einer zentralen CSV Datei die einzelnen Pfade der Events ausliest und intern dann an den ebenfalls in der CSV Datei definierten Namen bindet.
Die Events selbst sind py Dateien, werden also dann als plugin importiert. Jedes Event hat eine zentrale "make" Funktion, die zwei Parameter entgegennimmt: Das zentrale HandlerObjekt (zu dem ich gleich komme) und seinen Aufrufer.
Soweit, so gut, nun war der Gedanke, das so weiterzustricken:
Ich baue eine Art zentrales "Handler" Objekt, das eine API für die Events bildet, also festlegt, welche Methoden die Events benutzen können. Das Objekt selbst verwaltet die einzelnen Events und gibt ihnen auf Anfrage dann die Informationen, die sie haben wollen.
Jedes Event wird dann intern durch ein "Event-Objekt" dargestellt, das von threading.Thread abgeleitet ist, und hat einzig die Berechtigung, mithilfe des Handlers Dinge zu verändern oder abzufragen usw. Der Handler verwendet dabei bei jedem Methoden-Aufruf ein einziges threading.Lock Objekt, damit das ganze threadsafe ist.
Der Hintergrund, warum es Threads sein müssen, liegt in der "call" Methode. Es wird notwendig sein, Events zu definieren, die, wenn aufgerufen, in eine eigene Endlosschleife übergehen und bei bestimmten Aktivitäten bestimmte Dinge ändern. Ist das nicht der Fall, wird zwar unnötigerweise ein neuer Thread gestartet, der daraufhin gleich wieder kollabiert, aber um das ganze nicht mit zig Ausnahmen zu versehen, wird das wohl die beste Möglichkeit sein.
Das "Handler Objekt" wollte ich dann entsprechend durch zig property's (bzw get/set Methoden) realisieren, und eben Verwaltung für Events, wobei ich da noch keine genaue Vorstellung habe.
Sinn der Events ist es, die einzelnen Objekte dynamisch Dinge ausführen zu lassen. Da die Objekte hierarchisch organisiert sind, hat ein "höheres" Objekt durch entsprechende Events dann die Möglichkeit, die Erzeugung/Vernichtung "niederer" Objekte zu steuern, eben durch Events, je nach Event in Abhängigkeit bestimmter Gegebenheiten. Events selber und deren Aufrufe werden durch eine zentrale AI des Objektes gesteuert. So ist es zb auch möglich, eine AI durch die andere auszutauschen, die alle Events dann reinitialisiert und ihrer Handlungsart entsprechend steuert. Das beinhaltet natürlich, das jedes Objekt eine AI hat, was irgendwann bei den Objekten, die keine eigenen "Eltern Objekte" mehr haben, zu einer "GodAI" führt, die das "big picture" kontrolliert.
Hoffe, ich habe nichts vergessen. Nun die Frage: Haltet ihr das für eine gute Idee?