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 +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
|