Thread Techniken für Plugin-Einbindung
(3 answers)
Opened by marky at 2011-09-24 12:58
Bei Templateplugins würde ich zu einer Klasse raten, die zwangsweise von einer andern erbt:
Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 my $plugincode=load_code(); my $dataobj=get_data_object(); $plugincount++; $pugincode=<<EOC; { package PLUGIN::PLUGINS::$pugincount; use base 'PLUGIN::BASE'; use strict; use warnings; $plugincode; 1;} EOC my $pluginobj; if(eval(plugincode)) { $pluginobj=eval("PLUGIN::PLUGINS::$pugincount->new($dataobj)") if(!$pluginobj) { # create error } } else { # copmile error } #... $pluginobj->mach_was(); Wenn man ganz vorsichtig sein will, kann man auch Forken und über IPC mit dem Plugin kommunizieren. Das sähe gar nicht so anders aus. Nur das Paket, von dem Geerbt wird, ist komplexer. Beu Codeplugins würde ich auf Signalhandler setzen, die kann man überall einfügen und machen am wenigsten Probleme, finde ich. Das Laden wäre ähnlich zu dem was ich oben gezeigt habe, nur dass kein Datenobjekt übergeben wird sondern das "System"-Objekt. Im Plugin Code (perl): (dl
)
1 2 my $id=$obj->handler_add('aktion',sub{ ... },@options); $obj->handler_del($id); im System Code Code (perl): (dl
)
$obj->handler_exec('aktion',@data) if($obj->handler_exists('aktion')); Hier könne man auch Einbauen, dass Code der nicht "true" zurück liefert aus der Handlerliste gelöscht wird. |