Class: Q3Servers::MassiveHelper

Inherits:
Object
  • Object
show all
Defined in:
lib/q3_servers/massive_helper.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(servers, context) ⇒ MassiveHelper

Returns a new instance of MassiveHelper.



7
8
9
10
11
12
# File 'lib/q3_servers/massive_helper.rb', line 7

def initialize(servers, context)
  @context = context
  @servers = servers.each_with_object({}) do |server, hsh|
    hsh[server.unique_index] = server
  end
end

Instance Attribute Details

#serversObject

Returns the value of attribute servers.



5
6
7
# File 'lib/q3_servers/massive_helper.rb', line 5

def servers
  @servers
end

#socketsObject

Returns the value of attribute sockets.



5
6
7
# File 'lib/q3_servers/massive_helper.rb', line 5

def sockets
  @sockets
end

Instance Method Details

#calculate_index(socket) ⇒ Object



48
49
50
51
52
# File 'lib/q3_servers/massive_helper.rb', line 48

def calculate_index(socket)
  # to determine which socket answered
  addr = socket.peeraddr(false)
  ServerConnection.new(addr.last, addr[1]).unique_index
end

#read_info(sockets, max_retries, timeout, &block) ⇒ Object



24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/q3_servers/massive_helper.rb', line 24

def read_info(sockets, max_retries, timeout, &block)
  servers_with_info = []
  sockets_completed = 0
  retries = 0
  sockets.size.times do |_i|
    break if (sockets_completed >= sockets.size) || (retries >= max_retries)
  
    ready_sockets = IO.select(sockets, nil, nil, timeout)
    if ready_sockets && (ready_sockets = ready_sockets[0])
      retries = 0
      ready_sockets.each do |socket|
        sockets_completed += 1
        server = servers[calculate_index(socket)]
        block.call(server)
        servers_with_info << server
      end
    else
      retries += 1
      puts "Retry n #{retries}"
    end
  end
  servers_with_info
end

#read_info_servers(max_retries, timeout, &block) ⇒ Object



14
15
16
17
# File 'lib/q3_servers/massive_helper.rb', line 14

def read_info_servers(max_retries, timeout, &block)
  puts '======== Read Info servers ========'
  read_info(servers.map { |_unique_index, server| server.socket }, max_retries, timeout, &Proc.new)
end

#read_status_servers(servers, max_retries, timeout) ⇒ Object



19
20
21
22
# File 'lib/q3_servers/massive_helper.rb', line 19

def read_status_servers(servers, max_retries, timeout)
  puts '======== Read Status servers ========'
  read_info(servers.map(&:socket), max_retries, timeout, &Proc.new)
end