minestat 2.2.3 → 2.3.0

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 +4 -4
  2. data/lib/minestat.rb +27 -8
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1aae005889c4dfd2940d4fe464195aceb82380a03437603bbfc984a036a79b91
4
- data.tar.gz: bb333f2e25d3dd899b26e357bfeffffa8411055832f5c6b36eee850c6912314f
3
+ metadata.gz: 0edcad23af3b5a770f9711cf137a82e060e74cbd50d53a50bad64f86a94e2dcb
4
+ data.tar.gz: cce9bd821aea062f9cc84fa68750b4a6ea1f9028bd68bd11c075ae721e6a0dee
5
5
  SHA512:
6
- metadata.gz: 98d83d61c188baffac40427684cc7e93d1e77db3a4acf1e58c55e6f0cba39d2e48a57b7ae53562aa0041c47ca60fdd6abb360e0caae820e30b13e7164b1819ae
7
- data.tar.gz: 8ccb0e3159c32175ec677b37dc15960532bedf2bb238ea185f7f01c4ee02e4a3245d166889abaa36bbf1f6e152f0ee477dbb4bd72022093b6b09c50847174a52
6
+ metadata.gz: 06a145da313fe0700857906b36c51a7a2a5b2d12f95b40090a04bedc7c261aad39319805ebf2c4c7b13840162cbffe556c1e23753c055ea49321c7ff87b1cbc1
7
+ data.tar.gz: 8d86892695c1cd890d08b4934a4dc769482a7ee815d8cbf98c5dd63c770064d535a7f8a29ef958c07a92bc2eb8d9a275f0a9b3a39b0b0c726e2440dbde0c122a
data/lib/minestat.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # minestat.rb - A Minecraft server status checker
2
- # Copyright (C) 2014-2022 Lloyd Dilley
2
+ # Copyright (C) 2014-2023 Lloyd Dilley
3
3
  # http://www.dilley.me/
4
4
  #
5
5
  # This program is free software; you can redistribute it and/or modify
@@ -18,6 +18,7 @@
18
18
 
19
19
  require 'base64'
20
20
  require 'json'
21
+ require 'resolv'
21
22
  require 'socket'
22
23
  require 'timeout'
23
24
 
@@ -25,7 +26,7 @@ require 'timeout'
25
26
  # Provides a ruby interface for polling Minecraft server status.
26
27
  class MineStat
27
28
  # MineStat version
28
- VERSION = "2.2.3"
29
+ VERSION = "2.3.0"
29
30
  # Number of values expected from server
30
31
  NUM_FIELDS = 6
31
32
  # Number of values expected from a 1.8b/1.3 server
@@ -85,7 +86,7 @@ class MineStat
85
86
  @port = port # TCP/UDP port of server
86
87
  @online # online or offline?
87
88
  @version # server version
88
- @mode = "Unspecified" # game mode (Bedrock/Pocket Edition only)
89
+ @mode # game mode (Bedrock/Pocket Edition only)
89
90
  @motd # message of the day
90
91
  @stripped_motd # message of the day without formatting
91
92
  @current_players # current number of players online
@@ -102,7 +103,25 @@ class MineStat
102
103
  @try_all = false # try all protocols?
103
104
 
104
105
  @try_all = true if request_type == Request::NONE
106
+ resolve_srv(address, port)
107
+ set_connection_status(attempt_protocols())
108
+ end
109
+
110
+ # Attempts to resolve SRV records
111
+ def resolve_srv(address, port)
112
+ begin
113
+ resolver = Resolv::DNS.new
114
+ res = resolver.getresource("_minecraft._tcp.#{@address}", Resolv::DNS::Resource::IN::SRV)
115
+ @address = res.target.to_s # SRV target
116
+ @port = res.port.to_i # SRV port
117
+ rescue => exception # primarily catch Resolv::ResolvError and revert if unable to resolve SRV record(s)
118
+ @address = address
119
+ @port = port
120
+ end
121
+ end
105
122
 
123
+ # Attempts the use of various protocols
124
+ def attempt_protocols()
106
125
  case request_type
107
126
  when Request::BETA
108
127
  retval = beta_request()
@@ -135,16 +154,16 @@ class MineStat
135
154
  retval = json_request()
136
155
  end
137
156
  # Bedrock/Pocket Edition
138
- unless @online || retval == Retval::SUCCESS || retval == Retval::CONNFAIL
157
+ unless @online || retval == Retval::SUCCESS
139
158
  retval = bedrock_request()
140
159
  end
141
160
  end
142
- set_connection_status(retval) unless @online
161
+ return retval
143
162
  end
144
163
 
145
164
  # Sets connection status
146
165
  def set_connection_status(retval)
147
- @connection_status = "Success" if retval == Retval::SUCCESS
166
+ @connection_status = "Success" if @online || retval == Retval::SUCCESS
148
167
  @connection_status = "Fail" if retval == Retval::CONNFAIL
149
168
  @connection_status = "Timeout" if retval == Retval::TIMEOUT
150
169
  @connection_status = "Unknown" if retval == Retval::UNKNOWN
@@ -186,7 +205,7 @@ class MineStat
186
205
  rescue Errno::ECONNREFUSED, Errno::EHOSTUNREACH
187
206
  return Retval::CONNFAIL
188
207
  rescue => exception
189
- $stderr.puts exception
208
+ #$stderr.puts exception
190
209
  return Retval::UNKNOWN
191
210
  end
192
211
  return Retval::SUCCESS
@@ -537,6 +556,7 @@ class MineStat
537
556
  retval = nil
538
557
  begin
539
558
  Timeout::timeout(@timeout) do
559
+ @request_type = "Bedrock/Pocket Edition"
540
560
  retval = connect()
541
561
  return retval unless retval == Retval::SUCCESS
542
562
  # Perform handshake and acquire data
@@ -555,7 +575,6 @@ class MineStat
555
575
  return Retval::UNKNOWN
556
576
  end
557
577
  if retval == Retval::SUCCESS
558
- @request_type = "Bedrock/Pocket Edition"
559
578
  set_connection_status(retval)
560
579
  end
561
580
  return retval
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.3
4
+ version: 2.3.0
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-30 00:00:00.000000000 Z
11
+ date: 2023-01-24 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.