minestat 2.2.4 → 2.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/minestat.rb +25 -6
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6cf1517b7163565471c4785bb7cb8ba6242a8b5a0df07ec6a0de7bf477c37cde
4
- data.tar.gz: d76096e4980f85df61ea6dc20a7c0959d0fc16696c2acafc01cda72579a30e20
3
+ metadata.gz: 0edcad23af3b5a770f9711cf137a82e060e74cbd50d53a50bad64f86a94e2dcb
4
+ data.tar.gz: cce9bd821aea062f9cc84fa68750b4a6ea1f9028bd68bd11c075ae721e6a0dee
5
5
  SHA512:
6
- metadata.gz: 853bbf09e649df0b24262bf55fe55be477d7ce263031ceb6ce06df7f48c133a80062b71f7c49acea3caa118d24cc075d310c4181b313b9c39a86178d3ec8cb1a
7
- data.tar.gz: b205181e5e10ebf49fa784a9f324f8b8d262807a42fad444838a62bad84d77b620f65e4527a1ec547250059ccf42d2b2aac542ccb484b2597c52df735311a1cb
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.4"
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()
@@ -139,12 +158,12 @@ class MineStat
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
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
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-12-02 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.