# class GxG::Networking::XmppAgentConversation

Conversation Channel

### Public Class Methods

new(parent=nil, details={}) click to toggle source

    # File lib/gxg/net_clients.rb, line 2935
    def initialize(parent=nil, details={})
      if ::GxG::valid_uuid?(details[:context])
          @uuid = details[:context].to_s.to_sym
      else
          @uuid = ::GxG::uuid_generate.to_sym
      end
      @parent = parent
      # @details should have a JID for the sender-jid/room-jid
      # @details should indicate whether a private direct message or MUC ROOM message (:chat? or :groupchat?)
      @details = details
      #
      @received = []
      @received_thread_safety = ::Mutex.new
      # Add call backs
      # @parent.notify({:event => :new_message, :conversation => @uuid, :message => message.id})
      # @parent.notify({:event => :new_private_message, :conversation => @uuid, :message => message.id})
      self
    end

### Public Instance Methods

[](the_key=nil) click to toggle source

    # File lib/gxg/net_clients.rb, line 2970
    def [](the_key=nil)
      result = nil
      if the_key.is_a?(::Symbol)
          result = @details[(the_key)]
      end
      result
    end

add_message(the_message=nil) click to toggle source

    # File lib/gxg/net_clients.rb, line 3019
    def add_message(the_message=nil)
      if the_message
          @received_thread_safety.synchronize { @received << the_message }
          true
      else
          false
      end
    end

change_configuration(the_configuration=nil) click to toggle source

    # File lib/gxg/net_clients.rb, line 3120
    def change_configuration(the_configuration=nil)
      result = false
      begin
          # Review : TODO - alter ROOM configuration if admin/owner
          #   if @handler
          #     if @handler.owner?
          #       unless the_configuration.is_a?(::Hash)
          #         raise ArgumentError, "You MUST provide a configuration Hash."
          #       end
          #       the_configuration = this().default_room_configuration(the_configuration)
          #       @handler.submit_room_configuration(the_configuration)
          #       result = true
          #     else
          #       raise Exception, "You are not the owner of this conversation room."
          #     end
          #   end
      rescue Exception => the_error
        log_error({:error => the_error, :parameters => {:configuration => the_configuration}})
      end
      result
    end

chat_buddies() click to toggle source

    # File lib/gxg/net_clients.rb, line 3049
    def chat_buddies()
      result = []
      begin
          # Review : TODO - like XmppAgent.buddies but for this ROOM only.
      rescue Exception => the_error
        log_error({:error => the_error, :parameters => {}})
      end
      result
    end

closed?() click to toggle source

    # File lib/gxg/net_clients.rb, line 2988
    def closed?()
      # Review : integrate with new system
      false
    end

configuration() click to toggle source

    # File lib/gxg/net_clients.rb, line 3086
    def configuration()
      result = nil
      begin
          # Review : TODO - get ROOM configuration
          #   if @handler
          #     if @handler.owner?
          #       current_configuration = {}
          #       iq = ::Jabber::Iq.new(:get, @handler.jid.to_s)
          #       iq.to = @handler.jid.to_s
          #       iq.from = @handler.my_jid.to_s
          #       iq.add(::Jabber::MUC::IqQueryMUCOwner.new)
          #       field_keys = this().default_room_configuration.keys
          #       response = @stream.send_with_id(iq)
          #       if response
          #         if (response.query && response.query.x(::Jabber::Dataforms::XData))
          #           field_keys.each do |the_key|
          #             field = response.query.x(::Jabber::Dataforms::XData).field(the_key.to_s)
          #             if field.is_a?(::Jabber::Dataforms::XDataField)
          #               current_configuration[(the_key.to_s)] = field.value
          #             end
          #           end
          #         end
          #       end
          #       result = current_configuration
          # else
          #   raise Exception, "You are not the owner of this conversation room."
          # end
          #   end
      rescue Exception => the_error
        log_error({:error => the_error, :parameters => {}})
      end
      result
    end

default_room_configuration(options={}) click to toggle source

    # File lib/gxg/net_clients.rb, line 2903
    def default_room_configuration(options={})
      unless options.is_a?(::Hash)
        options = {}
      end
      default_config = {
        'FORM_TYPE' => 'http://jabber.org/protocol/muc#roomconfig',
        'form' => 'config',
        'muc#roomconfig_roomname' => nil,
        'muc#roomconfig_roomdesc' => nil,
        'leave' => 'has left',
        'join' => 'has become available',
        'rename' => 'is now known as',
        'muc#roomconfig_changesubject' => 0,
        'muc#roomconfig_maxusers' => 0,
        'privacy' => 0,
        'muc#roomconfig_publicroom' => 1,
        'muc#roomconfig_persistentroom' => 1,
        'legacy' => 0,
        'muc#roomconfig_moderatedroom' => 0,
        'defaulttype' => 0,
        'privmsg' => 0,
        'muc#roomconfig_membersonly' => 0,
        'muc#roomconfig_allowinvites' => 1,
        'muc#roomconfig_passwordprotectedroom' => 0,
        'muc#roomconfig_roomsecret' => nil,
        'muc#roomconfig_whois' => 'moderators',
        'muc#roomconfig_enablelogging' => 0,
        'logformat' => 'xml'
      }
      default_config.merge(options)
    end

inspect() click to toggle source

    # File lib/gxg/net_clients.rb, line 2984
    def inspect()
      {:jid => this().jid, :title => this().title}.inspect
    end

jid() click to toggle source

    # File lib/gxg/net_clients.rb, line 2958
    def jid()
      @details[:sender].to_s
    end

join(the_jid=nil, password=nil, options={}) click to toggle source

    # File lib/gxg/net_clients.rb, line 3028
    def join(the_jid=nil, password=nil, options={})
      result = false
      begin
          # Review : TODO - MUC join
      rescue Exception => the_error
        log_error({:error => the_error, :parameters => {:the_jid => the_jid, :options => options}})
      end
      result
    end

leave(exit_string=nil) click to toggle source

    # File lib/gxg/net_clients.rb, line 3038
    def leave(exit_string=nil)
      result = false
      begin
          # Review : TODO - MUC leave
          # @parent.refresh_conversations
      rescue Exception => the_error
        log_error({:error => the_error, :parameters => {:exit_string => exit_string}})
      end
      result
    end

my_jid() click to toggle source

    # File lib/gxg/net_clients.rb, line 2962
    def my_jid()
      result = nil
      if @parent
        result = @parent.jid().to_s
      end
      result
    end

process_received(&block) click to toggle source

    # File lib/gxg/net_clients.rb, line 2993
    def process_received(&block)
      begin
          if block.respond_to?(:call)
              count = 0
              @received_thread_safety.synchronize {
                  count = @received.size
              }
              record = nil
              count.times do
                  @received_thread_safety.synchronize {
                      record = @received.shift
                  }
                  if record
                      block.call(record)
                  end
              end
              true
          else
              false
          end
      rescue Exception => the_error
          log_error({:error => the_error, :parameters => {}})
          false
      end
    end

say_something(the_message=nil, to_jid=nil) click to toggle source

    # File lib/gxg/net_clients.rb, line 3059
    def say_something(the_message=nil, to_jid=nil)
      result = false
      begin
          if @details[:type] == :chat
              recipient = (to_jid || the_message[:to]).to_s
              @parent.say(::Blather::JID.new(recipient), @parent.gxg_message_to_xmpp(the_message))
          else
              # Review : TODO - send chat message to ROOM
          end
          result = true
      rescue Exception => the_error
        log_error({:error => the_error, :parameters => {:message => the_message, :to => to_jid}})
      end
      result
    end

send_invitations(the_recipients=nil, reason=nil) click to toggle source

    # File lib/gxg/net_clients.rb, line 3075
    def send_invitations(the_recipients=nil, reason=nil)
      result = false
      begin
          # Review : TODO - ROOM invitation list processing list.each { |i| send i }
          # "You MUST provide an Array of JID Strings."
      rescue Exception => the_error
        log_error({:error => the_error, :parameters => {:recipients => the_recipients, :message => reason}})
      end
      result
    end

title() click to toggle source

    # File lib/gxg/net_clients.rb, line 2978
    def title()
      result = nil
      # Review : TODO - return ROOM title
      result
    end

uuid() click to toggle source

    # File lib/gxg/net_clients.rb, line 2954
    def uuid()
      @uuid
    end