Class: Adhearsion::VoIP::Asterisk::Manager::ManagerInterface::ManagerInterfaceAction

Inherits:
Object
  • Object
show all
Defined in:
lib/adhearsion/voip/asterisk/manager_interface.rb

Overview

Each time ManagerInterface#send_action is invoked, a new ManagerInterfaceAction is instantiated.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name, headers = {}) ⇒ ManagerInterfaceAction

Returns a new instance of ManagerInterfaceAction.



503
504
505
506
507
508
509
# File 'lib/adhearsion/voip/asterisk/manager_interface.rb', line 503

def initialize(name, headers={})
  @name      = name.to_s.downcase.freeze
  @headers   = headers.stringify_keys.freeze
  @action_id = new_action_id.freeze
  @future_resource = FutureResource.new
  @causal_event_terminator_name = ManagerInterface.causal_event_terminator_name_for name
end

Instance Attribute Details

#action_idObject (readonly)

Returns the value of attribute action_id.



502
503
504
# File 'lib/adhearsion/voip/asterisk/manager_interface.rb', line 502

def action_id
  @action_id
end

#causal_event_terminator_nameObject (readonly)

Returns the value of attribute causal_event_terminator_name.



502
503
504
# File 'lib/adhearsion/voip/asterisk/manager_interface.rb', line 502

def causal_event_terminator_name
  @causal_event_terminator_name
end

#future_resourceObject (readonly)

Returns the value of attribute future_resource.



502
503
504
# File 'lib/adhearsion/voip/asterisk/manager_interface.rb', line 502

def future_resource
  @future_resource
end

#headersObject (readonly)

Returns the value of attribute headers.



502
503
504
# File 'lib/adhearsion/voip/asterisk/manager_interface.rb', line 502

def headers
  @headers
end

#nameObject (readonly)

Returns the value of attribute name.



502
503
504
# File 'lib/adhearsion/voip/asterisk/manager_interface.rb', line 502

def name
  @name
end

Instance Method Details

#has_causal_events?Boolean

Some AMI actions effectively respond with many events which collectively constitute the actual response. These Must be handled specially by the protocol parser, so this method helps inform the parser.

Returns:

  • (Boolean)


523
524
525
# File 'lib/adhearsion/voip/asterisk/manager_interface.rb', line 523

def has_causal_events?
  ManagerInterface.has_causal_events?(@name, @headers)
end

#new_action_idString

Abstracts the generation of new ActionIDs. This could be implemented virutally any way, provided each invocation returns something unique, so this will generate a GUID and return it.

Returns:

  • (String)

    characters in GUID format (e.g. “4C5F4E1C-A0F1-4D13-8751-C62F2F783062”)



533
534
535
# File 'lib/adhearsion/voip/asterisk/manager_interface.rb', line 533

def new_action_id
  new_guid # Implemented in lib/adhearsion/foundation/pseudo_guid.rb
end

#replies_with_action_id?Boolean

Used internally by ManagerInterface for the actions in AMI which break the protocol’s definition and do not reply with an ActionID.

Returns:

  • (Boolean)


515
516
517
# File 'lib/adhearsion/voip/asterisk/manager_interface.rb', line 515

def replies_with_action_id?
  ManagerInterface.replies_with_action_id?(@name, @headers)
end

#responseObject

If the response has simply not been received yet from Asterisk, the calling Thread will block until it comes in. Once the response comes in, subsequent calls immediately return a reference to the ManagerInterfaceResponse object.



553
554
555
# File 'lib/adhearsion/voip/asterisk/manager_interface.rb', line 553

def response
  future_resource.resource
end

#to_sObject

Converts this action into a protocol-valid String, ready to be sent over a socket.



540
541
542
543
544
545
546
# File 'lib/adhearsion/voip/asterisk/manager_interface.rb', line 540

def to_s
  @textual_representation ||= (
      "Action: #{@name}\r\nActionID: #{@action_id}\r\n" +
      @headers.map { |(key,value)| "#{key}: #{value}" }.join("\r\n") +
      (@headers.any? ? "\r\n\r\n" : "\r\n")
  )
end