Class Jabber::Reliable::Connection
In: lib/xmpp4r/reliable.rb
Parent: Jabber::Client

Methods

connect   new  

Public Class methods

[Source]

    # File lib/xmpp4r/reliable.rb, line 7
 7:       def initialize(full_jid, config)
 8:         super(full_jid)
 9:         @servers = config[:servers]
10:         @port = config[:port] || 5222
11:         @max_retry = config[:max_retry] || 30
12:         @retry_sleep = config[:retry_sleep] || 2
13:         if(@servers.nil? or @servers.empty?)
14:           @servers = [@jid.domain]
15:         end
16:       end

Public Instance methods

[Source]

    # File lib/xmpp4r/reliable.rb, line 18
18:       def connect
19:         retry_count = 0
20:         server_to_use = nil
21:         server_pool = @servers.dup.sort{ rand <=> rand }
22:         begin
23:           server_to_use = server_pool.shift
24:           server_pool.push(server_to_use)
25: 
26:           Jabber::debuglog "timeout will be: #{@retry_sleep.to_f}"
27:           Timeout.timeout(@retry_sleep.to_f){
28:             Jabber::debuglog "trying to connect to #{server_to_use}"
29:             super(server_to_use, @port)
30:           }
31: 
32:           Jabber::debuglog self.jid.to_s + " connected to " + server_to_use.to_s
33:           Jabber::debuglog "out of possible servers " + @servers.inspect
34:         rescue Exception, Timeout::Error => e
35:           Jabber::warnlog "#{server_to_use} error: #{e.inspect}. Will attempt to reconnect in #{@retry_sleep}"
36:           sleep(@retry_sleep.to_f)
37:           if(retry_count >= @max_retry.to_i)
38:             Jabber::warnlog "reached max retry count on exception, failing"
39:             raise e
40:           end
41:           retry_count += 1
42:           retry
43:         end
44:       end

[Validate]