minestat 2.2.1 → 2.2.3
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 +5 -5
- data/lib/minestat.rb +50 -9
- metadata +3 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 1aae005889c4dfd2940d4fe464195aceb82380a03437603bbfc984a036a79b91
|
4
|
+
data.tar.gz: bb333f2e25d3dd899b26e357bfeffffa8411055832f5c6b36eee850c6912314f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 98d83d61c188baffac40427684cc7e93d1e77db3a4acf1e58c55e6f0cba39d2e48a57b7ae53562aa0041c47ca60fdd6abb360e0caae820e30b13e7164b1819ae
|
7
|
+
data.tar.gz: 8ccb0e3159c32175ec677b37dc15960532bedf2bb238ea185f7f01c4ee02e4a3245d166889abaa36bbf1f6e152f0ee477dbb4bd72022093b6b09c50847174a52
|
data/lib/minestat.rb
CHANGED
@@ -16,6 +16,7 @@
|
|
16
16
|
# with this program; if not, write to the Free Software Foundation, Inc.,
|
17
17
|
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
18
18
|
|
19
|
+
require 'base64'
|
19
20
|
require 'json'
|
20
21
|
require 'socket'
|
21
22
|
require 'timeout'
|
@@ -24,7 +25,7 @@ require 'timeout'
|
|
24
25
|
# Provides a ruby interface for polling Minecraft server status.
|
25
26
|
class MineStat
|
26
27
|
# MineStat version
|
27
|
-
VERSION = "2.2.
|
28
|
+
VERSION = "2.2.3"
|
28
29
|
# Number of values expected from server
|
29
30
|
NUM_FIELDS = 6
|
30
31
|
# Number of values expected from a 1.8b/1.3 server
|
@@ -91,10 +92,13 @@ class MineStat
|
|
91
92
|
@max_players # maximum player capacity
|
92
93
|
@protocol # protocol level
|
93
94
|
@json_data # JSON data for 1.7 queries
|
95
|
+
@favicon_b64 # base64-encoded favicon possibly contained in JSON 1.7 responses
|
96
|
+
@favicon # decoded favicon data
|
94
97
|
@latency # ping time to server in milliseconds
|
95
98
|
@timeout = timeout # TCP/UDP timeout
|
96
99
|
@server # server socket
|
97
|
-
@request_type #
|
100
|
+
@request_type # protocol version
|
101
|
+
@connection_status # status of connection ("Success", "Fail", "Timeout", or "Unknown")
|
98
102
|
@try_all = false # try all protocols?
|
99
103
|
|
100
104
|
@try_all = true if request_type == Request::NONE
|
@@ -131,11 +135,19 @@ class MineStat
|
|
131
135
|
retval = json_request()
|
132
136
|
end
|
133
137
|
# Bedrock/Pocket Edition
|
134
|
-
unless retval == Retval::CONNFAIL
|
138
|
+
unless @online || retval == Retval::SUCCESS || retval == Retval::CONNFAIL
|
135
139
|
retval = bedrock_request()
|
136
140
|
end
|
137
141
|
end
|
138
|
-
|
142
|
+
set_connection_status(retval) unless @online
|
143
|
+
end
|
144
|
+
|
145
|
+
# Sets connection status
|
146
|
+
def set_connection_status(retval)
|
147
|
+
@connection_status = "Success" if retval == Retval::SUCCESS
|
148
|
+
@connection_status = "Fail" if retval == Retval::CONNFAIL
|
149
|
+
@connection_status = "Timeout" if retval == Retval::TIMEOUT
|
150
|
+
@connection_status = "Unknown" if retval == Retval::UNKNOWN
|
139
151
|
end
|
140
152
|
|
141
153
|
# Strips message of the day formatting characters
|
@@ -273,7 +285,6 @@ class MineStat
|
|
273
285
|
retval = connect()
|
274
286
|
return retval unless retval == Retval::SUCCESS
|
275
287
|
# Perform handshake and acquire data
|
276
|
-
@request_type = "SLP 1.8b/1.3 (beta)"
|
277
288
|
@server.write("\xFE")
|
278
289
|
retval = parse_data("\u00A7", true) # section symbol
|
279
290
|
end
|
@@ -283,6 +294,10 @@ class MineStat
|
|
283
294
|
$stderr.puts exception
|
284
295
|
return Retval::UNKNOWN
|
285
296
|
end
|
297
|
+
if retval == Retval::SUCCESS
|
298
|
+
@request_type = "SLP 1.8b/1.3 (beta)"
|
299
|
+
set_connection_status(retval)
|
300
|
+
end
|
286
301
|
return retval
|
287
302
|
end
|
288
303
|
|
@@ -312,7 +327,6 @@ class MineStat
|
|
312
327
|
retval = connect()
|
313
328
|
return retval unless retval == Retval::SUCCESS
|
314
329
|
# Perform handshake and acquire data
|
315
|
-
@request_type = "SLP 1.4/1.5 (legacy)"
|
316
330
|
@server.write("\xFE\x01")
|
317
331
|
retval = parse_data("\x00") # null
|
318
332
|
end
|
@@ -322,6 +336,10 @@ class MineStat
|
|
322
336
|
$stderr.puts exception
|
323
337
|
return Retval::UNKNOWN
|
324
338
|
end
|
339
|
+
if retval == Retval::SUCCESS
|
340
|
+
@request_type = "SLP 1.4/1.5 (legacy)"
|
341
|
+
set_connection_status(retval)
|
342
|
+
end
|
325
343
|
return retval
|
326
344
|
end
|
327
345
|
|
@@ -359,7 +377,6 @@ class MineStat
|
|
359
377
|
retval = connect()
|
360
378
|
return retval unless retval == Retval::SUCCESS
|
361
379
|
# Perform handshake and acquire data
|
362
|
-
@request_type = "SLP 1.6 (extended legacy)"
|
363
380
|
@server.write("\xFE\x01\xFA")
|
364
381
|
@server.write("\x00\x0B") # 11 (length of "MC|PingHost")
|
365
382
|
@server.write('MC|PingHost'.encode('UTF-16BE').force_encoding('ASCII-8BIT'))
|
@@ -376,6 +393,10 @@ class MineStat
|
|
376
393
|
$stderr.puts exception
|
377
394
|
return Retval::UNKNOWN
|
378
395
|
end
|
396
|
+
if retval == Retval::SUCCESS
|
397
|
+
@request_type = "SLP 1.6 (extended legacy)"
|
398
|
+
set_connection_status(retval)
|
399
|
+
end
|
379
400
|
return retval
|
380
401
|
end
|
381
402
|
|
@@ -402,7 +423,6 @@ class MineStat
|
|
402
423
|
retval = connect()
|
403
424
|
return retval unless retval == Retval::SUCCESS
|
404
425
|
# Perform handshake
|
405
|
-
@request_type = "SLP 1.7 (JSON)"
|
406
426
|
payload = "\x00\x00"
|
407
427
|
payload += [@address.length].pack('c') << @address
|
408
428
|
payload += [@port].pack('n')
|
@@ -428,6 +448,11 @@ class MineStat
|
|
428
448
|
strip_motd
|
429
449
|
@current_players = json_data['players']['online'].to_i
|
430
450
|
@max_players = json_data['players']['max'].to_i
|
451
|
+
@favicon_b64 = json_data['favicon']
|
452
|
+
if !@favicon_b64.nil? && !@favicon_b64.empty?
|
453
|
+
@favicon_b64 = favicon_b64.split("base64,")[1]
|
454
|
+
@favicon = Base64.decode64(favicon_b64)
|
455
|
+
end
|
431
456
|
if !@version.empty? && !@motd.empty? && !@current_players.nil? && !@max_players.nil?
|
432
457
|
@online = true
|
433
458
|
else
|
@@ -442,6 +467,10 @@ class MineStat
|
|
442
467
|
$stderr.puts exception
|
443
468
|
return Retval::UNKNOWN
|
444
469
|
end
|
470
|
+
if retval == Retval::SUCCESS
|
471
|
+
@request_type = "SLP 1.7 (JSON)"
|
472
|
+
set_connection_status(retval)
|
473
|
+
end
|
445
474
|
return retval
|
446
475
|
end
|
447
476
|
|
@@ -508,7 +537,6 @@ class MineStat
|
|
508
537
|
retval = nil
|
509
538
|
begin
|
510
539
|
Timeout::timeout(@timeout) do
|
511
|
-
@request_type = "Bedrock/Pocket Edition"
|
512
540
|
retval = connect()
|
513
541
|
return retval unless retval == Retval::SUCCESS
|
514
542
|
# Perform handshake and acquire data
|
@@ -526,6 +554,10 @@ class MineStat
|
|
526
554
|
$stderr.puts exception
|
527
555
|
return Retval::UNKNOWN
|
528
556
|
end
|
557
|
+
if retval == Retval::SUCCESS
|
558
|
+
@request_type = "Bedrock/Pocket Edition"
|
559
|
+
set_connection_status(retval)
|
560
|
+
end
|
529
561
|
return retval
|
530
562
|
end
|
531
563
|
|
@@ -569,12 +601,21 @@ class MineStat
|
|
569
601
|
# servers with a version greater than or equal to 1.7
|
570
602
|
attr_reader :json_data
|
571
603
|
|
604
|
+
# Returns the base64-encoded favicon from JSON 1.7 queries
|
605
|
+
attr_reader :favicon_b64
|
606
|
+
|
607
|
+
# Returns the decoded favicon from JSON 1.7 queries
|
608
|
+
attr_reader :favicon
|
609
|
+
|
572
610
|
# Returns the ping time to the server in ms
|
573
611
|
attr_reader :latency
|
574
612
|
|
575
613
|
# Returns the protocol version
|
576
614
|
attr_reader :request_type
|
577
615
|
|
616
|
+
# Returns the connection status
|
617
|
+
attr_reader :connection_status
|
618
|
+
|
578
619
|
# Returns whether or not all ping protocols should be attempted
|
579
620
|
attr_reader :try_all
|
580
621
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: minestat
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.2.
|
4
|
+
version: 2.2.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Lloyd Dilley
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-11-30 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: MineStat polls Minecraft server data such as version, motd, current players,
|
14
14
|
and max players.
|
@@ -38,8 +38,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
38
38
|
- !ruby/object:Gem::Version
|
39
39
|
version: '0'
|
40
40
|
requirements: []
|
41
|
-
|
42
|
-
rubygems_version: 2.5.2.1
|
41
|
+
rubygems_version: 3.2.5
|
43
42
|
signing_key:
|
44
43
|
specification_version: 4
|
45
44
|
summary: Minecraft server status checker
|