Yanix im Detail: Events, Handler und SmartIRC
13. Januar 2008
Bisher gab es für Plugins so gut wie keine Möglichkeit, mit dem Bot-Kern zu arbeiten. Durch die Entwicklung der allgemeinen Events-Klasse wird sich einiges ändern. Doch erstmal ein bisschen Geschichte:
Wegen einem Fehler (oder Feature?) in SmartIRC war es bisher nicht möglich, mehr als einen Handler für eine Aktion zu registrieren, z.B. konnte nur ein Plugin auf einen Join reagieren. Deswegen wurden die YanixHandlers geschrieben, welche dies überwunden, indem sie diese Aktionen belegten und an beliebig viele Plugins weitergeben konnten. Durch einen Patch (von vielen), welche ich an SmartIRC angewandt habe, sind diese nicht mehr möglich.
Diese Klasse wurde im Laufe der Entwicklung auch für den Heartbeat verwand, welcher regelmäßige Aktionen ermöglicht. Erst durch diesen wurden Funktionen wie die Absturzsicherung möglich. Anfangs habe ich diesen als Erweiterung der YanixHandlers-Klasse genutzt, was jedoch eine ziemlich Zweckentfremdung und ziemlich unsauber war. Da das Ganze auch alles andere als flexibel war, musste eine komplett neue Lösung her. Die Events.
Die Events funktionieren wie die meisten Plugin-Systeme. Es können Callbacks registriert werden welche dann im späteren Verlauf aufgerufen werden. Prominentes Beispiel für diese Methode ist Wordpress (welches dies aber nicht objektorientiert macht). Die Klasse ist simpel und allgemein und kann daher auch für andere Projekte genutzt werden aber doch sehr praktisch.
SmartIRC ist eine sehr praktische Klasse um mit PHP eine Verbindugn zu IRC-Servern herstellen zu können. Leider ist die Klasse veraltet und schon lange nicht mehr weiterentwickelt worden. Das letzte Release ist vom 27.05.2005, der letzte Commit im CVS knapp 4 Monate her, manche Bugsmeldungen sind schon über ein Jahr offen. Ich bin schon öfters am Überlegen ob ich einen Fork der Klasse mache, vor allem wegen diesen Gründen:
- Ist nicht wirklich PHP5-kompatibel, ich musste einige Male patchen um E_STRICT Fehler los zu werden.
- Merkwürdige Bugs und Verhaltensweisen, teilweise beendet die Klasse mit die() den Bot.
- Callbacks sind nur mit Objekten möglich, Funktionen und rein statische Klassen bleiben außen vor.
Aufgrund des Umfangs der Klasse würde das Umschreiben auf eine komplett statische Klasse (was ich am sinnvollsten und praktischsten) einige Zeit kosten und ein Umschreiben von großen Teilen von Yanix bedeuten (was eh schon beim Umstieg von iBot der Fall war). Jedoch würde es viele Vorteile haben.
Vor wenigen Tagen habe ich mal die CVS-Version von SmartIRC getestet. Sie ist 4 Monate alt, also recht “neu”. Ergebnis: Ständige Abstürze durch den Aufruf von nicht-existenten Funktionen. Schade.
Ich warte erst mal auf PHP 5.3, die Namespaces könnten sehr interessant werden.
man man man….bei dir klingt das ja total kompliziert^^
mein rubybot is da um einiges simpler glaub ich
Yanix kann auch etwas mehr
Yanix das Monster
Yanix fliegt und fährt von selber
Yanix melkt selbst junge Kälber
Yanix kann ein Weib verführen
Yanix wird selbst Pudding rühren
Yanix hilft der Oma kehren
Yanix kann den Müll entleeren
Yanix kann auch noch beglücken
Yanix tut nach Seife bücken
Yanix schlägt den Rubybot
Yeah I think, thats quite a lot…
lol