Einzelnen Beitrag anzeigen

Benutzerbild von alias5000
alias5000

Registriert seit: 10. Sep 2005
Ort: Heilbronn
268 Beiträge
 
#1

Geeignetes (professionelles) Plugin-system?

  Alt 22. Feb 2006, 14:15
Hi
ich bin grad so am überlegen, weil ich für ne zukünftige Version meines Netzwerkchats (TBX-Client auf www.lanchat2.de) ein Plugin- system einbauen will.
Was wäre dazu ideal?

Was sollte nach meinen bisherigen Überlegungen so alles möglich sein:
  • ein Plugin sollte Funktionen der Anwendung aufrufen können, auch welche, die in Units ausgelagert sind und zu keiner Form gehören
  • Das Plugin sollte die Möglichkeit besitzen, eigene Menüeinträge zu erstellen
  • Das Programm sollte Proceduren des Plugins aufrufen können, um es zu benachrichtigen, wenn bestimmte Aktionen eintreten (z.B. ein User Online kommt), dabei sollte es für ein Plugin möglich sein, bestimmte Ereignisse zu "abbonnieren"
  • Es wäre toll, wenn ein Plugin Proceduren der Anwendung ergänzen könnte, d.h., dass man z.B. ein neues Protokoll implemetiert. Dann wird im Hauptprogramm die Funktion aufgerufen "SendMessage(Message: string);" und das Hauptprogramm arbeitet diese Funktion ganz normal mit dem implemetierten Protkoll ab. Jetzt sollte hier aber ein Plugin die Möglichkeit haben, anstatt dem Protkoll der Anwendung ein anderes zu benutzen, dass es selber zur Verfügung stellt. Das Plugin sollte desweiteren auch entscheiden können, welches Protokoll genommen werden muss.
  • Auch sollten weitere TForms durch ein Plugin ermöglicht werden.
  • Ich würde aber auch gerne als Schutz davor, dass sich ein Plugin als Schädling entpuppt, per Sicherheitscode überprüfen lassen, ob das Plugin von den Autoren als sicher eingestuft wurde. D.h. es muss Pluginseitig gewährleistet sein, dass dieser Schutz recht schwer zu umgehen ist. Es kann beim Chat leider nicht davon ausgegangen werden, dass der PC dauerhaft ans Internet angeschlossen ist. Sicherheitslisten könnte man dennoch über das Internet beziehen. Wenn das Plugin nicht als sicher eingestuft wurde, könnte man ja auch einfach ne Meldung anzeigen.


Jetzt ist halt die Frage, womit/wie man sowas am besten macht.
Mir fallen da spontan nämlich recht wenig Möglichkeiten ein.

Eine wäre, einfach eine DLL zu schreiben, die dann bestimmte Funktionen hat, die von dem Programm zu bestimmten Augenblicken (User geht online,...) aufgerufen werden. Vorteil: es können beliebige Parameter übergeben werden.
Alles andere muss die DLL dann selbst machen. An das TApplication-Objekt kommt man ja mit [jetzt weiß ichs nimmer auswenig] ran. Dort kann man dann auch auf die einzelnen Forms zugreifen und alle Komponenten ansteuern (mit FindComponent) und deren Methoden aufrufen (GetMethodAdress, etc.). Wie das mit der Authorisierung ist, weiß ich nicht so recht, weil sobald ich eine DLL-Funktion aufrufe, hat diese vollen Zugriff auf die TApplication und das wär zuviel...
Was nicht geht, ist meines Wissens nach, Prozeduren und Funktionen aufzurufen, die keiner Form zugeordnet sind und das finde ich äußerst schlecht, da fast das gesamte Protokoll so aufgebaut ist, auf der anderen Seite könnte man so Prozeduren vor Plugins verstecken...
Nachteil:
  • Ein wahnsinniger Schreibaufwand. Um allein eine DLL dynamisch zu laden, wenn tatsächlich so viele Prozeduren reinkämen, wäre sicher als Produkt eine Unit mit vielen 100 oder 1000 Zeilen.
  • FindComponent funktioniert nur, wenn die Komponenten auch immer denselben Namen haben. Sobald einmal in einer Version der Name geändert wurde, gehts nimmer, aber das wird überall so sein.

Eine weitere Möglichkeit, die mir bekannt ist, ist der TJvPluginManager:
  • Leichteres erstellen von Menüeinträgen, da dies bereits vorbereitet ist
  • sehr viel einfacheres laden, ein zwei Zeilen
  • Authorisierung könnte einfacher sein, da dafür ein eigenes Event vorbereitet ist. Inwiefern dort eine DLL auf TApplication zugriff hat, weiß ich nicht.
  • alle anderen Funktionen einer DLL mit beliebigen Parametern werden sich bestimmt komplizierter gestalten.
  • Nicht so flexibel wie beim selbstschreiben eines DLL-Systems
  • Verschiedene Versionen eines Pluginsystems, bzw. einer Hostanwendung können nicht so gut unterschieden werden
  • die VCL(->Forms anzeigen) kann meines Wissens einen Tick leichter/schneller implemetiert werden
-------------------------------------


Beide haben den Nachteil, dass sie relativ große DLLs produzieren würden (wegen der VCL).

Jetzt, warum erzähl ich euch das???
Ich erhoffe mir, dass vllcht
  • jemand noch einen anderen, vllcht ganz alternativen Weg kennt
  • jemand weiß, wie es in anderen populären Anwendungen gemacht wird (Firefox, Internet Explorer, Winamp, Media Player,...)
  • oder auch einfach, dass ihr euren (konstruktiven ) Senf dazugebt

Bis dann
beste Grüße
alias5000
Im Interesse der Purierung des germanischen Ideoms ist es opertum den immensen Usus peregrieder Verben auf ein Minimum zu reduzieren.
--> www.lanchat2.de <---
  Mit Zitat antworten Zitat