q3_servers 1.0.0 → 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
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