Class: Cinch::Handler

Inherits:
Object
  • Object
show all
Defined in:
lib/cinch/handler.rb

Overview

Since:

Instance Attribute Summary (collapse)

Instance Method Summary (collapse)

Constructor Details

- (Handler) initialize(bot, event, pattern, options = {}, &block)

A new instance of Handler

Parameters:

  • bot (Bot)
  • event (Symbol)
  • pattern (Pattern)
  • options (Hash) (defaults to: {})

Options Hash (options):

  • :group (Symbol) — default: nil

    Match group the h belongs to.

  • :execute_in_callback (Boolean) — default: false

    Whether to execute the handler in an instance of Callback

  • :args (Array) — default: []

    Additional arguments to pass to the block

Since:

  • 2.0.0



36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/cinch/handler.rb', line 36

def initialize(bot, event, pattern, options = {}, &block)
  options              = {:group => nil, :execute_in_callback => false, :args => []}.merge(options)
  @bot                 = bot
  @event               = event
  @pattern             = pattern
  @group               = options[:group]
  @execute_in_callback = options[:execute_in_callback]
  @args                = options[:args]
  @block               = block

  @thread_group = ThreadGroup.new
end

Instance Attribute Details

- (Array) args (readonly)

Returns:

  • (Array)

Since:

  • 2.0.0



14
15
16
# File 'lib/cinch/handler.rb', line 14

def args
  @args
end

- (Proc) block (readonly)

Returns:

  • (Proc)

Since:

  • 2.0.0



17
18
19
# File 'lib/cinch/handler.rb', line 17

def block
  @block
end

- (Bot) bot (readonly)

Returns:

Since:

  • 2.0.0



5
6
7
# File 'lib/cinch/handler.rb', line 5

def bot
  @bot
end

- (Symbol) event (readonly)

Returns:

  • (Symbol)

Since:

  • 2.0.0



8
9
10
# File 'lib/cinch/handler.rb', line 8

def event
  @event
end

- (Symbol) group (readonly)

Returns:

  • (Symbol)

Since:

  • 2.0.0



20
21
22
# File 'lib/cinch/handler.rb', line 20

def group
  @group
end

- (Pattern) pattern (readonly)

Returns:

Since:

  • 2.0.0



11
12
13
# File 'lib/cinch/handler.rb', line 11

def pattern
  @pattern
end

- (ThreadGroup) thread_group (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.

Returns:

  • (ThreadGroup)

Since:

  • 2.0.0



24
25
26
# File 'lib/cinch/handler.rb', line 24

def thread_group
  @thread_group
end

Instance Method Details

- call(message, captures, arguments)

This method returns an undefined value.

Executes the handler.

Parameters:

  • message (Message)

    Message that caused the invocation

  • captures (Array)

    Capture groups of the pattern that are being passed as arguments

Since:

  • 2.0.0



78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
# File 'lib/cinch/handler.rb', line 78

def call(message, captures, arguments)
  bargs = captures + arguments

  @thread_group.add 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(message, *@args, *bargs, &@block)
      else
        @block.call(message, *@args, *bargs)
      end
    rescue => e
      @bot.loggers.exception(e)
    ensure
      @bot.loggers.debug "[Thread done] For #{self}: #{Thread.current} -- #{@thread_group.list.size - 1} remaining."
    end
  }
end

- stop

This method returns an undefined value.

Stops execution of the handler. This means stopping and killing all associated threads.

Since:

  • 2.0.0



60
61
62
63
64
65
66
67
68
69
70
# File 'lib/cinch/handler.rb', line 60

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

- (String) to_s

Returns:

Since:

  • 2.0.0



99
100
101
102
# File 'lib/cinch/handler.rb', line 99

def to_s
  # TODO maybe add the number of running threads to the output?
  "#<Cinch::Handler @event=#{@event.inspect} pattern=#{@pattern.inspect}>"
end

- unregister

This method returns an undefined value.

Unregisters the handler.

Since:

  • 2.0.0



52
53
54
# File 'lib/cinch/handler.rb', line 52

def unregister
  @bot.handlers.unregister(self)
end