Class: ModSpox::PluginManager

Inherits:
Object
  • Object
show all
Defined in:
lib/mod_spox/PluginManager.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(pipeline) ⇒ PluginManager

pipeline

Pipeline for messages

Create new PluginManager



11
12
13
14
15
16
17
18
19
20
21
# File 'lib/mod_spox/PluginManager.rb', line 11

def initialize(pipeline)
    @plugins = Hash.new
    @pipeline = pipeline
    @pipeline.hook(self, :load_plugin, :Internal_PluginLoadRequest)
    @pipeline.hook(self, :unload_plugin, :Internal_PluginUnloadRequest)
    @pipeline.hook(self, :reload_plugins, :Internal_PluginReload)
    @pipeline.hook(self, :send_modules, :Internal_PluginModuleRequest)
    @pipeline.hook(self, :plugin_request, :Internal_PluginRequest)
    @plugins_module = Module.new
    load_plugins
end

Instance Attribute Details

#pluginsObject (readonly)

Hash of plugins. Defined by class name symbol (i.e. Trivia class: plugins)



7
8
9
# File 'lib/mod_spox/PluginManager.rb', line 7

def plugins
  @plugins
end

Instance Method Details

#destroy_pluginsObject

Destroys plugins



31
32
33
# File 'lib/mod_spox/PluginManager.rb', line 31

def destroy_plugins
    unload_plugins
end

#load_plugin(message) ⇒ Object

message

Messages::Internal::PluginLoadRequest

Loads a plugin



37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/mod_spox/PluginManager.rb', line 37

def load_plugin(message)
    begin
        path = !message.name ? BotConfig[:userpluginpath] : "#{BotConfig[:userpluginpath]}/#{message.name}"
        FileUtils.copy(message.path, path)
        reload_plugins
        @pipeline << Messages::Internal::PluginLoadResponse.new(message.requester, true)
        Logger.log("Loaded new plugin: #{message.path}", 10)
    rescue Object => boom
        Logger.log("Failed to load plugin: #{message.path} Reason: #{boom}", 10)
        @pipeline << Messages::Internal::PluginLoadResponse.new(message.requester, false)
    end
end

#plugin_request(message) ⇒ Object

message

Messages::Internal::PluginRequest

Returns a plugin to requesting object



75
76
77
78
79
80
81
82
# File 'lib/mod_spox/PluginManager.rb', line 75

def plugin_request(message)
    if(@plugins.has_key?(message.plugin))
        response = Messages::Internal::PluginResponse.new(message.requester, @plugins[message.plugin])
    else
        response = Messages::Internal::PluginResponse.new(message.requester, nil)
    end
    @pipeline << response
end

#reload_plugins(mesasge = nil) ⇒ Object

message

Messages::Internal::PluginReload

Destroys and reinitializes plugins



25
26
27
28
# File 'lib/mod_spox/PluginManager.rb', line 25

def reload_plugins(mesasge=nil)
    unload_plugins
    load_plugins
end

#send_modules(message) ⇒ Object

message

Messages::Internal::PluginModuleRequest

Sends the plugins module to the requester



69
70
71
# File 'lib/mod_spox/PluginManager.rb', line 69

def send_modules(message)
    @pipeline << Messages::Internal::PluginModuleResponse.new(message.requester, @plugins_module)
end

#unload_plugin(message) ⇒ Object

message

Messages::Internal::PluginUnloadRequest

Unloads a plugin



52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/mod_spox/PluginManager.rb', line 52

def unload_plugin(message)
    begin
        unless(message.name.nil?)
            FileUtils.copy(message.path, "#{BotConfig[:userpluginpath]}/#{message.name}")
        end
        FileUtils.remove_file(message.path)
        reload_plugins
        @pipeline << Messages::Internal::PluginUnloadResponse.new(message.requester, true)
        Logger.log("Unloaded plugin: #{message.path}", 10)
    rescue Object => boom
        Logger.log("Failed to unload plugin: #{message.path} Reason: #{boom}", 10)
        @pipeline << Messages::Internal::PluginUnloadResponse.new(message.requester, false)
    end
end