Class: Cinch::Handler
- Inherits:
-
Object
- Object
- Cinch::Handler
- Defined in:
- lib/cinch/handler.rb
Overview
Instance Attribute Summary collapse
- #args ⇒ Array readonly
- #block ⇒ Proc readonly
- #bot ⇒ Bot readonly
- #event ⇒ Symbol readonly
- #group ⇒ Symbol readonly
- #pattern ⇒ Pattern readonly
- #strip_colors ⇒ Boolean readonly
- #thread_group ⇒ ThreadGroup readonly private
Instance Method Summary collapse
-
#call(message, captures, arguments) ⇒ Thread
Executes the handler.
-
#initialize(bot, event, pattern, options = {}, &block) ⇒ Handler
constructor
A new instance of Handler.
-
#stop ⇒ void
Stops execution of the handler.
- #to_s ⇒ String
-
#unregister ⇒ void
Unregisters the handler.
Constructor Details
#initialize(bot, event, pattern, options = {}, &block) ⇒ Handler
Returns a new instance of Handler.
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/cinch/handler.rb', line 43 def initialize(bot, event, pattern, = {}, &block) = { group: nil, execute_in_callback: false, strip_colors: false, args: [] }.merge() @bot = bot @event = event @pattern = pattern @group = [:group] @execute_in_callback = [:execute_in_callback] @strip_colors = [:strip_colors] @args = [:args] @block = block @thread_group = ThreadGroup.new end |
Instance Attribute Details
#args ⇒ Array (readonly)
16 17 18 |
# File 'lib/cinch/handler.rb', line 16 def args @args end |
#block ⇒ Proc (readonly)
19 20 21 |
# File 'lib/cinch/handler.rb', line 19 def block @block end |
#event ⇒ Symbol (readonly)
10 11 12 |
# File 'lib/cinch/handler.rb', line 10 def event @event end |
#group ⇒ Symbol (readonly)
22 23 24 |
# File 'lib/cinch/handler.rb', line 22 def group @group end |
#pattern ⇒ Pattern (readonly)
13 14 15 |
# File 'lib/cinch/handler.rb', line 13 def pattern @pattern end |
#strip_colors ⇒ Boolean (readonly)
25 26 27 |
# File 'lib/cinch/handler.rb', line 25 def strip_colors @strip_colors end |
#thread_group ⇒ ThreadGroup (readonly)
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
29 30 31 |
# File 'lib/cinch/handler.rb', line 29 def thread_group @thread_group end |
Instance Method Details
#call(message, captures, arguments) ⇒ Thread
Executes the handler.
91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 |
# File 'lib/cinch/handler.rb', line 91 def call(, captures, arguments) = captures + arguments thread = Thread.new { @bot.loggers.debug "[New thread] For #{self}: #{Thread.current} -- #{@thread_group.list.size} in total." begin if @execute_in_callback @bot.callback.instance_exec(, *@args, *, &@block) else @block.call(, *@args, *) end rescue => e @bot.loggers.exception(e) ensure @bot.loggers.debug "[Thread done] For #{self}: #{Thread.current} -- #{@thread_group.list.size - 1} remaining." end } @thread_group.add(thread) thread end |
#stop ⇒ void
This method returns an undefined value.
Stops execution of the handler. This means stopping and killing all associated threads.
73 74 75 76 77 78 79 80 81 82 83 |
# File 'lib/cinch/handler.rb', line 73 def stop @bot.loggers.debug "[Stopping handler] Stopping all threads of handler #{self}: #{@thread_group.list.size} threads..." @thread_group.list.each do |thread| Thread.new do @bot.loggers.debug "[Ending thread] Waiting 10 seconds for #{thread} to finish..." thread.join(10) @bot.loggers.debug "[Killing thread] Killing #{thread}" thread.kill end end end |
#to_s ⇒ String
115 116 117 118 |
# File 'lib/cinch/handler.rb', line 115 def to_s # TODO maybe add the number of running threads to the output? "#<Cinch::Handler @event=#{@event.inspect} pattern=#{@pattern.inspect}>" end |
#unregister ⇒ void
This method returns an undefined value.
Unregisters the handler.
65 66 67 |
# File 'lib/cinch/handler.rb', line 65 def unregister @bot.handlers.unregister(self) end |