Class: SplitIoClient::Engine::Events::EventsManager

Inherits:
Object
  • Object
show all
Defined in:
lib/splitclient-rb/engine/events/events_manager.rb

Instance Method Summary collapse

Constructor Details

#initialize(events_manager_config, events_delivery, config) ⇒ EventsManager

Returns a new instance of EventsManager.



7
8
9
10
11
12
13
14
# File 'lib/splitclient-rb/engine/events/events_manager.rb', line 7

def initialize(events_manager_config, events_delivery, config)
  @manager_config = events_manager_config
  @events_delivery = events_delivery
  @active_subscriptions = {}
  @internal_events_status = {}
  @mutex = Mutex.new
  @config = config
end

Instance Method Details

#destroyObject



59
60
61
62
63
64
# File 'lib/splitclient-rb/engine/events/events_manager.rb', line 59

def destroy
  @mutex.synchronize do
    @active_subscriptions = {}
    @internal_events_status = {}
  end
end

#notify_internal_event(sdk_internal_event, event_metadata) ⇒ Object



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/splitclient-rb/engine/events/events_manager.rb', line 41

def notify_internal_event(sdk_internal_event, )
  @mutex.synchronize do
    update_internal_event_status(sdk_internal_event, true)
    @manager_config.evaluation_order.each do |sorted_event|
      if get_sdk_event_if_applicable(sdk_internal_event).include?(sorted_event) &&
         !get_event_handler(sorted_event).nil?
        fire_sdk_event(sorted_event, )
      end

      # if client is not subscribed to SDK_READY
      if check_if_register_needed(sorted_event)
        @config.logger.debug('EventsManager: Registering SDK_READY event as fired') if @config.debug_enabled
        @active_subscriptions[Engine::Models::SdkEvent::SDK_READY] = Engine::Models::EventActiveSubscriptions.new(true, nil)
      end
    end
  end
end

#register(sdk_event, event_handler) ⇒ Object



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/splitclient-rb/engine/events/events_manager.rb', line 16

def register(sdk_event, event_handler)
  return if @active_subscriptions.key?(sdk_event) && !get_event_handler(sdk_event).nil?

  @mutex.synchronize do
    # SDK ready already fired
    if sdk_event == SplitIoClient::Engine::Models::SdkEvent::SDK_READY && event_already_triggered(sdk_event)
      @active_subscriptions[sdk_event] = SplitIoClient::Engine::Models::EventActiveSubscriptions.new(true, event_handler)
      @config.logger.debug('EventsManager: Firing SDK_READY event for new subscription') if @config.debug_enabled
      fire_sdk_event(sdk_event, nil)
      return
    end

    @config.logger.debug("EventsManager: Register event: #{sdk_event}") if @config.debug_enabled
    @active_subscriptions[sdk_event] = SplitIoClient::Engine::Models::EventActiveSubscriptions.new(false, event_handler)
  end
end

#unregister(sdk_event) ⇒ Object



33
34
35
36
37
38
39
# File 'lib/splitclient-rb/engine/events/events_manager.rb', line 33

def unregister(sdk_event)
  return unless @active_subscriptions.key?(sdk_event)

  @mutex.synchronize do
    @active_subscriptions.delete(sdk_event)
  end
end