module Fluent::PluginHelper::EventEmitter

def after_shutdown

def after_shutdown
  @router = nil
  super
end

def close # unset router many times to reduce test cost

unset router many times to reduce test cost
def close # unset router many times to reduce test cost
  @router = nil
  super
end

def configure(conf)

def configure(conf)
  require 'fluent/engine'
  super
  @router = event_emitter_router(conf['@label'])
end

def event_emitter_router(label_name)

def event_emitter_router(label_name)
  if label_name
    Engine.root_agent.find_label(label_name).event_router
  elsif self.respond_to?(:as_secondary) && self.as_secondary
    if @primary_instance.has_router?
      @_event_emitter_lazy_init = true
      nil # primary plugin's event router is not initialized yet, here.
    else
      @primary_instance.context_router
    end
  else
    # `Engine.root_agent.event_router` is for testing
    self.context_router || Engine.root_agent.event_router
  end
end

def event_emitter_used_actually?

def event_emitter_used_actually?
  @_event_emitter_used_actually
end

def has_router?

def has_router?
  true
end

def initialize

def initialize
  super
  @_event_emitter_used_actually = false
  @_event_emitter_lazy_init = false
  @router = nil
end

def router

def router
  @_event_emitter_used_actually = true
  if @_event_emitter_lazy_init
    @router = @primary_instance.router
  end
  @router
end

def router=(r)

def router=(r)
  # not recommended now...
  @router = r
end

def terminate

def terminate
  @router = nil
  super
end