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 +4 -4
- data/Gemfile.lock +1 -1
- data/lib/q3_servers/list.rb +23 -30
- data/lib/q3_servers/massive_helper.rb +20 -16
- data/lib/q3_servers/server.rb +1 -6
- data/lib/q3_servers/server_connection.rb +1 -0
- data/lib/q3_servers/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bb4e62e7d698bb676e11016d338ba7b3baf43eb8a328d0be34eb6aa9f9b2464c
|
4
|
+
data.tar.gz: 1a11791880f77e36e9fec352e8a722cb564b35ec34b4d9276010c3d904f24ce4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 866cb3d062ce232545146c03864917d00c52c3fa6a5f5e010d9ecf63d3080249cecca17780ef6de30cde5b1a7a92d84adf6cd62436efdbb313afae172f35b5c5
|
7
|
+
data.tar.gz: 76293844f274ebaac38d4929fe33a6cb3afb55d254cca542804005c841c4119a22303871ceadc88359c300d36767494b87ec2e4784bf3cc8d4e010ad9bb29188
|
data/Gemfile.lock
CHANGED
data/lib/q3_servers/list.rb
CHANGED
@@ -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
|
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
|
79
|
-
|
80
|
-
|
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
|
-
|
161
|
-
|
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
|
-
|
166
|
-
filtered_servers.
|
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.
|
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
|
-
|
5
|
+
attr_reader :sockets, :servers
|
6
6
|
|
7
7
|
def initialize(servers, logger)
|
8
8
|
@logger = logger
|
9
|
-
|
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
|
16
|
-
read_info(servers.map { |_unique_index, server| server.socket }, max_retries, timeout, &
|
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(
|
20
|
-
@logger
|
21
|
-
read_info(servers.map
|
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
|
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
|
data/lib/q3_servers/server.rb
CHANGED
@@ -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!
|
data/lib/q3_servers/version.rb
CHANGED
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.
|
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-
|
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.
|
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
|