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.
Files changed (3) hide show
  1. checksums.yaml +5 -5
  2. data/lib/minestat.rb +50 -9
  3. metadata +3 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: e0acf4a379eb97f4145d734b8f7d3b82b9b5f57d
4
- data.tar.gz: 8fe0222fc8892a44eea98917e87eaad75f0fd8d3
2
+ SHA256:
3
+ metadata.gz: 1aae005889c4dfd2940d4fe464195aceb82380a03437603bbfc984a036a79b91
4
+ data.tar.gz: bb333f2e25d3dd899b26e357bfeffffa8411055832f5c6b36eee850c6912314f
5
5
  SHA512:
6
- metadata.gz: 071fd966c47fd93d01087a4c85d20ca2ca56c05cec1d22c8aeff824602c900f085d7c877e37b0dfe25d3105f74dab2a52d2fa1f19b8706d3a31d16bbb96a7af8
7
- data.tar.gz: 4846ca755878fd8d81bddd5634916e83955b142ea587cb81c3ba55a629f04129a2eacdc11f7fa68d9b6d77f5ab8ed141628d330a7e33a5e2fc82e46d61b625ab
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.1"
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 # Protocol version
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
- @online = false unless retval == Retval::SUCCESS
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.1
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-05-15 00:00:00.000000000 Z
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
- rubyforge_project:
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