q3_servers 1.0.0 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9fb8f8effc44482edebea0de3ba0a458ef03d7ebe44dabec1ecee2b2acfaa0d0
4
- data.tar.gz: 68567822f194a905695e814fe158be591b1a2d852eff6d69b9f885eb959896e6
3
+ metadata.gz: bb4e62e7d698bb676e11016d338ba7b3baf43eb8a328d0be34eb6aa9f9b2464c
4
+ data.tar.gz: 1a11791880f77e36e9fec352e8a722cb564b35ec34b4d9276010c3d904f24ce4
5
5
  SHA512:
6
- metadata.gz: f157543e7674b674c0f6bcfd98b01ceaf43a54552c2de5e03b8b116142bc8056715827ab394b41f4676f08f2f2e378af6aea268aeecac1f38bcc9167f01e9622
7
- data.tar.gz: 59dd575a839a181cca3101a020c7e3214b9e6c6be6d98a3da47f5f9ef54340b01ecb167e6eafdbc87580ac7dfc4c5fad2ecd214500f51b42cf95b3bd525c594f
6
+ metadata.gz: 866cb3d062ce232545146c03864917d00c52c3fa6a5f5e010d9ecf63d3080249cecca17780ef6de30cde5b1a7a92d84adf6cd62436efdbb313afae172f35b5c5
7
+ data.tar.gz: 76293844f274ebaac38d4929fe33a6cb3afb55d254cca542804005c841c4119a22303871ceadc88359c300d36767494b87ec2e4784bf3cc8d4e010ad9bb29188
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- q3_servers (1.0.0)
4
+ q3_servers (1.0.2)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -36,15 +36,6 @@ module Q3Servers
36
36
  fetch_info_servers(filter, use_threads)
37
37
  end
38
38
 
39
- def request_server_info(server, filter, use_threads)
40
- print_debug("INFO Server: Connecting to Server id => #{server.unique_index}")
41
- if use_threads
42
- thread_server_info(server, filter)
43
- else
44
- server.request_info
45
- end
46
- end
47
-
48
39
  def cached_info?(server)
49
40
  cache? && server.info? && !server_info_outdated?(server)
50
41
  end
@@ -68,16 +59,19 @@ module Q3Servers
68
59
 
69
60
  private
70
61
 
71
- def thread_server_info(server, filter)
62
+ def thread_server_info_status(server, filter)
72
63
  @threads << Thread.new { get_server_info_status_filter(server, filter) }
73
64
  rescue ThreadError => e
74
65
  p "Can't create thread! => #{e.inspect}"
75
66
  end
76
67
 
77
68
  def get_server_info_status_filter(server, filter)
78
- server.get_info_connect
79
- server.request_and_get_status if server.filter_info(filter)
80
- server.info
69
+ unless cached_info?(server)
70
+ print_debug("INFO Server: Connecting to Server id => #{server.unique_index}")
71
+ server.request_info
72
+ server.read_info
73
+ end
74
+ server.request_and_get_status if server.filter_info(filter) && !cached_status?(server)
81
75
  end
82
76
 
83
77
  def fill_list_favorites
@@ -99,27 +93,17 @@ module Q3Servers
99
93
  end
100
94
 
101
95
  def fetch_info_servers(filter, use_threads)
102
- servers.each do |server|
103
- cache_or_request_server_info(server, filter, use_threads)
104
- end
105
- # wait for "info servers"
106
96
  if use_threads
97
+ servers.each { |server| thread_server_info_status(server, filter) }
107
98
  @threads.each(&:join) # wait for threads
108
99
  else
109
100
  massive_read_info_status(servers, filter)
110
101
  end
102
+
111
103
  destroy_socket_servers
112
104
  servers.select { |server| server.filter_info(filter) }
113
105
  end
114
106
 
115
- def cache_or_request_server_info(server, filter, use_threads)
116
- if cached_info?(server)
117
- print_debug("INFO Server cached => #{server.unique_index}")
118
- else
119
- request_server_info(server, filter, use_threads)
120
- end
121
- end
122
-
123
107
  def servers_list_from_master
124
108
  servers.clear # #clean servers list
125
109
  print_debug("Connecting to master server: cache => #{cache} | timeout => #{timeout}")
@@ -157,15 +141,24 @@ module Q3Servers
157
141
 
158
142
  def massive_read_info_status(servers, filter)
159
143
  logger_object = debug ? logger : nil
160
- massive_helper = MassiveHelper.new(servers.select(&:request_status?), logger_object)
161
- alive_servers = massive_helper.read_info_servers(2, timeout) do |server|
144
+ requested_servers = servers.reject { |server| cached_info?(server) }
145
+
146
+ requested_servers.each do |not_cached_server|
147
+ print_debug("INFO Server: Connecting to Server id => #{not_cached_server.unique_index}")
148
+ not_cached_server.request_info
149
+ end
150
+
151
+ massive_helper = MassiveHelper.new(requested_servers, logger_object)
152
+ massive_helper.read_info_servers(2, timeout) do |server|
162
153
  server.read_info unless cached_info?(server)
163
154
  end
164
155
 
165
- filtered_servers = alive_servers.select { |server| server.filter_info(filter) }
166
- filtered_servers.each(&:request_status)
156
+ requested_servers = servers.reject { |server| cached_status?(server) }
157
+ filtered_servers = requested_servers.select { |server| server.filter_info(filter) }
158
+ filtered_servers.each { |server| server.request_status unless cached_status?(server) }
167
159
 
168
- massive_helper.read_status_servers(filtered_servers, 2, timeout) do |server|
160
+ massive_helper.servers = filtered_servers
161
+ massive_helper.read_status_servers(2, timeout) do |server|
169
162
  server.read_status unless cached_status?(server)
170
163
  end
171
164
  end
@@ -2,32 +2,30 @@
2
2
 
3
3
  module Q3Servers
4
4
  class MassiveHelper
5
- attr_accessor :sockets, :servers
5
+ attr_reader :sockets, :servers
6
6
 
7
7
  def initialize(servers, logger)
8
8
  @logger = logger
9
- @servers = servers.each_with_object({}) do |server, hsh|
10
- hsh[server.unique_index] = server
11
- end
9
+ self.servers = servers
12
10
  end
13
-
11
+
14
12
  def read_info_servers(max_retries, timeout, &block)
15
- @logger.info '======== Read Info servers ========' if @logger
16
- read_info(servers.map { |_unique_index, server| server.socket }, max_retries, timeout, &Proc.new)
13
+ @logger&.info '======== Read Info servers ========'
14
+ read_info(servers.map { |_unique_index, server| server.socket }, max_retries, timeout, &block)
17
15
  end
18
-
19
- def read_status_servers(servers, max_retries, timeout)
20
- @logger.info '======== Read Status servers ========' if @logger
21
- read_info(servers.map(&:socket), max_retries, timeout, &Proc.new)
16
+
17
+ def read_status_servers(max_retries, timeout, &block)
18
+ @logger&.info '======== Read Status servers ========'
19
+ read_info(servers.map { |_unique_index, server| server.socket }, max_retries, timeout, &block)
22
20
  end
23
-
21
+
24
22
  def read_info(sockets, max_retries, timeout, &block)
25
23
  servers_with_info = []
26
24
  sockets_completed = 0
27
25
  retries = 0
28
26
  sockets.size.times do |_i|
29
27
  break if (sockets_completed >= sockets.size) || (retries >= max_retries)
30
-
28
+
31
29
  ready_sockets = IO.select(sockets, nil, nil, timeout)
32
30
  if ready_sockets && (ready_sockets = ready_sockets[0])
33
31
  retries = 0
@@ -39,16 +37,22 @@ module Q3Servers
39
37
  end
40
38
  else
41
39
  retries += 1
42
- @logger.info "Retry n #{retries}" if @logger
40
+ @logger&.info "Retry n #{retries}"
43
41
  end
44
42
  end
45
43
  servers_with_info
46
44
  end
47
-
45
+
48
46
  def calculate_index(socket)
49
47
  # to determine which socket answered
50
48
  addr = socket.peeraddr(false)
51
49
  ServerConnection.new(addr.last, addr[1]).unique_index
52
- end
50
+ end
51
+
52
+ def servers=(new_servers)
53
+ @servers = new_servers.each_with_object({}) do |server, hsh|
54
+ hsh[server.unique_index] = server
55
+ end
56
+ end
53
57
  end
54
58
  end
@@ -29,11 +29,6 @@ module Q3Servers
29
29
  !f.empty?
30
30
  end
31
31
 
32
- def get_info_connect
33
- request_info
34
- read_info
35
- end
36
-
37
32
  def request_info
38
33
  self.status = :request
39
34
  puts "Requesting info to #{connection}"
@@ -102,7 +97,7 @@ module Q3Servers
102
97
  def info_status?
103
98
  info? && !info_status.empty?
104
99
  end
105
-
100
+
106
101
  private
107
102
 
108
103
  def touch!
@@ -54,6 +54,7 @@ module Q3Servers
54
54
  end
55
55
 
56
56
  def request_status_server
57
+ connect
57
58
  send_data("#{prepend_oob_data}getstatus") # request step 2
58
59
  end
59
60
 
@@ -1,3 +1,3 @@
1
1
  module Q3Servers
2
- VERSION = "1.0.0"
2
+ VERSION = "1.0.2"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: q3_servers
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Juan Pablo Garritano
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-08-16 00:00:00.000000000 Z
11
+ date: 2021-09-19 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description:
14
14
  email:
@@ -55,7 +55,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
55
55
  - !ruby/object:Gem::Version
56
56
  version: '0'
57
57
  requirements: []
58
- rubygems_version: 3.1.4
58
+ rubygems_version: 3.1.2
59
59
  signing_key:
60
60
  specification_version: 4
61
61
  summary: Browse servers from Quake3/Urban-Terror game