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.



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

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.



535
536
537
# File 'lib/adhearsion/voip/asterisk/manager_interface.rb', line 535

def action_id
  @action_id
end

#causal_event_terminator_nameObject (readonly)

Returns the value of attribute causal_event_terminator_name.



535
536
537
# File 'lib/adhearsion/voip/asterisk/manager_interface.rb', line 535

def causal_event_terminator_name
  @causal_event_terminator_name
end

#future_resourceObject (readonly)

Returns the value of attribute future_resource.



535
536
537
# File 'lib/adhearsion/voip/asterisk/manager_interface.rb', line 535

def future_resource
  @future_resource
end

#headersObject (readonly)

Returns the value of attribute headers.



535
536
537
# File 'lib/adhearsion/voip/asterisk/manager_interface.rb', line 535

def headers
  @headers
end

#nameObject (readonly)

Returns the value of attribute name.



535
536
537
# File 'lib/adhearsion/voip/asterisk/manager_interface.rb', line 535

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)


556
557
558
# File 'lib/adhearsion/voip/asterisk/manager_interface.rb', line 556

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



566
567
568
# File 'lib/adhearsion/voip/asterisk/manager_interface.rb', line 566

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)


548
549
550
# File 'lib/adhearsion/voip/asterisk/manager_interface.rb', line 548

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.



586
587
588
# File 'lib/adhearsion/voip/asterisk/manager_interface.rb', line 586

def response
  future_resource.resource
end

#to_sObject

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



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

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