#main.rb
module BOT
class Bot
@@modules=[]
def initialize(plugin_path)
Dir.foreach(plugin_path) do |d|
if ((d != ".") and (d != "..")) then
#puts "#{d}"
require "#{plugin_path}/#{d}"
eval(%Q{@@modules << #{d.capitalize().sub(/.rb$/,"")}})
end
end
end
def run
# parsing
# msg.command == "JOIN"
# exécuter les méthodes "onJOIN" des plugins.
onJoin()
end
def onJoin(*args)
@@modules.each do |m|
#puts("Module : #{m}")
s=%Q{#{m}::onJoin(*args)}
#puts(s)
eval(s)
end
end
end
end
b=BOT::Bot.new("./plugins")
b.run()
#plugin3.rb
module Plugin3
def self.onJoin(*args)
puts("Module Plugin3, event onJoin detected, arguments : #{args}")
end
end
# plugin4.rb
module Plugin4
def self.onJoin(*args)
puts("Module Plugin4, event onJoin detected, arguments : #{args}")
end
end
Explications : tu mets le main dans un repertoire, et tu positionne les plugins dans un sous-répertoire plugins (ou celui que tu veux).
Lorsque tu crées ton objet bot, tu lui passe le repertoire contenant les plugins. Il va aller alimenter le tableau @@modules=[] qui contiendra la liste de tous les plugins présents.
Ensuite lorsque tu appeleras la méthode onJoin, elle ira appeler la méthode onJoin de chaque module référencé dans le tableau.
[^] # Re: Pour ma part, je ne passerais pas par des classes mais par des mixin
Posté par totof2000 . En réponse au message Système de plugins. Évalué à 2.
Voilà ce que j'ai pu faire ce soir :
Explications : tu mets le main dans un repertoire, et tu positionne les plugins dans un sous-répertoire plugins (ou celui que tu veux).
Lorsque tu crées ton objet bot, tu lui passe le repertoire contenant les plugins. Il va aller alimenter le tableau @@modules=[] qui contiendra la liste de tous les plugins présents.
Ensuite lorsque tu appeleras la méthode onJoin, elle ira appeler la méthode onJoin de chaque module référencé dans le tableau.
On pourrait tester la pésence de la fonction onJoin pour chaque module (voir http://ruby-doc.org/core-1.9.3/Module.html#method-i-included_modules pour ruby 1.9.3)
J'ai d'autres idées mais il est un peu tard ce soir, donc on verra plus tard si tu as besoin d'autres choses.