class Strum::Internal::Listener

Public Class Methods

new() click to toggle source

Creates a new API Hook

Calls superclass method Strum::Internal::Component::new
# File lib/strum/internal/listener.rb, line 15
def initialize
  super(:Container)
  self[:Events] = {}
  load_events
end

Public Instance Methods

register_event(event) click to toggle source

Registers an Event to this Listener.

# File lib/strum/internal/listener.rb, line 51
def register_event(event)
  raise Strum::Errors::NilEventRegistration unless event

  self[:Events][event.class.name.split('::').last.to_sym] << event
end
register_generic_event(event) click to toggle source

Registers an Event to this Listener.

# File lib/strum/internal/listener.rb, line 59
def register_generic_event(event)
  raise Strum::Errors::NilEventRegistration unless event

  self[:GenericEvents][event.class.name.split('::').last.to_sym] << event
end
trigger_events(klass) click to toggle source

Fires events of a specific type

# File lib/strum/internal/listener.rb, line 23
def trigger_events(klass)
  report "#{klass.name.split('::').last.to_sym} event raised!" unless ENV['EVENT_DEBUG'].to_i.zero?
  unless klass.nil?
    self[:Events][klass.name.split('::').last.to_sym].each do |event|
      unless event.nil?
        event.call
        self[:Events][klass.name.split('::').last.to_sym].delete(event) if event[:SingleExec]
      end
    end
  end
end
trigger_generic_events(generic, klass) click to toggle source

Fires events of a specific type

# File lib/strum/internal/listener.rb, line 37
def trigger_generic_events(generic, klass)
  report "#{klass.name.split('::').last.to_sym} Generic Event raised!" unless ENV['EVENT_DEBUG'].to_i.zero?
  unless klass.nil?
    self[:GenericEvents][klass.name.split('::').last.to_sym].each do |event|
      unless event.nil?
        event.call(generic)
        self[:GenericEvents][klass.name.split('::').last.to_sym].delete(event) if event[:SingleExec]
      end
    end
  end
end

Private Instance Methods

load_events() click to toggle source

Loads our predefined events.

# File lib/strum/internal/listener.rb, line 68
def load_events
  Dir["events/*.rb"].sort.each { |event| require event }
  self[:Events] = {
      EndpointAcceptEvent: [],
      EndpointInitializationEvent: [],
      EndpointListenEvent: [],
      EndpointSocketRegistrationEvent: [],
      EndpointSpawnEvent: [],
      EndpointEvent: [],
      ManagerEvent: [],
  }
  self[:GenericEvents] = {
      SessionEvent: [],
      SessionClosedEvent: [],
      SessionReadEvent: [],
      SessionRegistrationEvent: [],
      SessionBuildEvent: [],
      SocketEvent: [],
      SocketThrottleEvent: [],
      SocketListOverflow: [],
      SocketClosedEvent: [],
      SocketReceiveEvent: [],
      SocketTimeoutEvent: []
  }
end