acpc_table_manager 3.0.11 → 3.0.12
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/acpc_table_manager/match.rb +5 -1
- data/lib/acpc_table_manager/table_queue.rb +33 -31
- data/lib/acpc_table_manager/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f0e45bdd8fff4488222915a4e977067542d335c4
|
4
|
+
data.tar.gz: '0992f61ada4f67006c53c1653ef371f1d11f6950'
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 654139f50b17ec5541c14b977049d47e67aae1caccc55c70297938cae5828eb344efd9d3c54e255242da02953b0047e74575c71b33bc03f5efc0dd6ae5fafd19
|
7
|
+
data.tar.gz: 3a2ad7ac571d4a9beba6bd6e020023e289f5dda4840e5e305a8bc4e795a1b55637c06c2022786c5856d22c4816db4c4839a7b6b83d3b3cb10888a88ba38fdf1c
|
@@ -113,7 +113,11 @@ class Match
|
|
113
113
|
end
|
114
114
|
|
115
115
|
def ports_in_use(matches=all)
|
116
|
-
|
116
|
+
ports = []
|
117
|
+
matches.possibly_running.each do |match|
|
118
|
+
ports += m.port_numbers if match.running?
|
119
|
+
end
|
120
|
+
ports
|
117
121
|
end
|
118
122
|
|
119
123
|
def kill_all_orphan_processes!(matches=all)
|
@@ -91,27 +91,30 @@ module AcpcTableManager
|
|
91
91
|
end
|
92
92
|
|
93
93
|
def check!
|
94
|
+
my_matches_to_start = matches_to_start.to_a
|
95
|
+
num_running_matches = Match.running(my_matches).length
|
94
96
|
log(
|
95
97
|
__method__,
|
96
98
|
{
|
97
|
-
num_running_matches:
|
98
|
-
num_matches_to_start:
|
99
|
+
num_running_matches: num_running_matches,
|
100
|
+
num_matches_to_start: my_matches_to_start.length
|
99
101
|
}
|
100
102
|
)
|
101
103
|
|
102
104
|
matches_started = []
|
103
105
|
while (
|
104
|
-
!
|
105
|
-
|
106
|
+
!my_matches_to_start.empty? &&
|
107
|
+
num_running_matches < AcpcTableManager.exhibition_config.games[@game_definition_key]['max_num_matches']
|
106
108
|
)
|
107
|
-
matches_started << dequeue
|
109
|
+
matches_started << dequeue(my_matches_to_start.pop)
|
110
|
+
num_running_matches += 1
|
108
111
|
end
|
109
112
|
|
110
113
|
log(
|
111
114
|
__method__,
|
112
115
|
{
|
113
116
|
matches_started: matches_started,
|
114
|
-
num_running_matches:
|
117
|
+
num_running_matches: num_running_matches,
|
115
118
|
num_matches_to_start: matches_to_start.length
|
116
119
|
}
|
117
120
|
)
|
@@ -121,13 +124,13 @@ module AcpcTableManager
|
|
121
124
|
|
122
125
|
protected
|
123
126
|
|
124
|
-
def port(
|
125
|
-
port_ =
|
127
|
+
def port(available_ports)
|
128
|
+
port_ = available_ports.pop
|
126
129
|
while !AcpcDealer::port_available?(port_)
|
127
|
-
if
|
130
|
+
if available_ports.empty?
|
128
131
|
raise NoPortForDealerAvailable.new("None of the special ports (#{available_special_ports}) are open")
|
129
132
|
end
|
130
|
-
port_ =
|
133
|
+
port_ = available_ports.pop
|
131
134
|
end
|
132
135
|
unless port_
|
133
136
|
raise NoPortForDealerAvailable.new("None of the special ports (#{available_special_ports}) are open")
|
@@ -135,18 +138,22 @@ module AcpcTableManager
|
|
135
138
|
port_
|
136
139
|
end
|
137
140
|
|
141
|
+
def ports_to_use(special_port_requirements, available_ports = nil)
|
142
|
+
ports = special_port_requirements.map do |r|
|
143
|
+
if r
|
144
|
+
# Slow. Only check available special ports if necessary
|
145
|
+
available_ports ||= available_special_ports
|
146
|
+
port(available_ports)
|
147
|
+
else
|
148
|
+
0
|
149
|
+
end
|
150
|
+
end
|
151
|
+
return ports, available_ports
|
152
|
+
end
|
153
|
+
|
138
154
|
# @return [Object] The match that has been started or +nil+ if none could
|
139
155
|
# be started.
|
140
|
-
def dequeue
|
141
|
-
my_matches_to_start = matches_to_start
|
142
|
-
log(
|
143
|
-
__method__,
|
144
|
-
num_matches_to_start: my_matches_to_start.length
|
145
|
-
)
|
146
|
-
return nil if my_matches_to_start.empty?
|
147
|
-
|
148
|
-
match = my_matches_to_start.last
|
149
|
-
|
156
|
+
def dequeue(match)
|
150
157
|
log(
|
151
158
|
__method__,
|
152
159
|
msg: "Starting dealer for match \"#{match.name}\" (#{match.id})",
|
@@ -158,10 +165,7 @@ module AcpcTableManager
|
|
158
165
|
# Add user's port
|
159
166
|
special_port_requirements.insert(match.seat - 1, false)
|
160
167
|
|
161
|
-
|
162
|
-
ports_to_be_used = special_port_requirements.map do |r|
|
163
|
-
if r then port(available_ports_) else 0 end
|
164
|
-
end
|
168
|
+
ports_to_be_used, available_ports = ports_to_use(special_port_requirements)
|
165
169
|
|
166
170
|
num_repetitions = 0
|
167
171
|
dealer_info = nil
|
@@ -170,7 +174,7 @@ module AcpcTableManager
|
|
170
174
|
log(
|
171
175
|
__method__,
|
172
176
|
msg: "Added #{match.id} list of running matches",
|
173
|
-
available_special_ports:
|
177
|
+
available_special_ports: available_ports,
|
174
178
|
special_port_requirements: special_port_requirements,
|
175
179
|
:'ports_to_be_used_(zero_for_random)' => ports_to_be_used
|
176
180
|
)
|
@@ -183,14 +187,12 @@ module AcpcTableManager
|
|
183
187
|
Logger::Severity::WARN
|
184
188
|
)
|
185
189
|
begin
|
186
|
-
ports_to_be_used = special_port_requirements
|
187
|
-
if r then port(available_ports_) else 0 end
|
188
|
-
end
|
190
|
+
ports_to_be_used, available_ports = ports_to_use(special_port_requirements, available_ports)
|
189
191
|
rescue NoPortForDealerAvailable => e
|
190
|
-
|
192
|
+
available_ports = available_special_ports
|
191
193
|
log(
|
192
194
|
__method__,
|
193
|
-
{warning: "#{ports_to_be_used} ports unavailable, retrying with all special ports, #{
|
195
|
+
{warning: "#{ports_to_be_used} ports unavailable, retrying with all special ports, #{available_ports}."},
|
194
196
|
Logger::Severity::WARN
|
195
197
|
)
|
196
198
|
end
|
@@ -198,7 +200,7 @@ module AcpcTableManager
|
|
198
200
|
sleep 1
|
199
201
|
log(
|
200
202
|
__method__,
|
201
|
-
{warning: "Retrying with all special ports, #{
|
203
|
+
{warning: "Retrying with all special ports, #{available_ports}."},
|
202
204
|
Logger::Severity::WARN
|
203
205
|
)
|
204
206
|
num_repetitions += 1
|