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.



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

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.



537
538
539
# File 'lib/adhearsion/voip/asterisk/manager_interface.rb', line 537

def action_id
  @action_id
end

#causal_event_terminator_nameObject (readonly)

Returns the value of attribute causal_event_terminator_name.



537
538
539
# File 'lib/adhearsion/voip/asterisk/manager_interface.rb', line 537

def causal_event_terminator_name
  @causal_event_terminator_name
end

#future_resourceObject (readonly)

Returns the value of attribute future_resource.



537
538
539
# File 'lib/adhearsion/voip/asterisk/manager_interface.rb', line 537

def future_resource
  @future_resource
end

#headersObject (readonly)

Returns the value of attribute headers.



537
538
539
# File 'lib/adhearsion/voip/asterisk/manager_interface.rb', line 537

def headers
  @headers
end

#nameObject (readonly)

Returns the value of attribute name.



537
538
539
# File 'lib/adhearsion/voip/asterisk/manager_interface.rb', line 537

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)


558
559
560
# File 'lib/adhearsion/voip/asterisk/manager_interface.rb', line 558

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”)



568
569
570
# File 'lib/adhearsion/voip/asterisk/manager_interface.rb', line 568

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)


550
551
552
# File 'lib/adhearsion/voip/asterisk/manager_interface.rb', line 550

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.



588
589
590
# File 'lib/adhearsion/voip/asterisk/manager_interface.rb', line 588

def response
  future_resource.resource
end

#to_sObject

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



575
576
577
578
579
580
581
# File 'lib/adhearsion/voip/asterisk/manager_interface.rb', line 575

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