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.
- checksums.yaml +4 -4
- data/lib/minestat.rb +27 -8
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0edcad23af3b5a770f9711cf137a82e060e74cbd50d53a50bad64f86a94e2dcb
|
4
|
+
data.tar.gz: cce9bd821aea062f9cc84fa68750b4a6ea1f9028bd68bd11c075ae721e6a0dee
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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-
|
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.
|
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
|
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
|
157
|
+
unless @online || retval == Retval::SUCCESS
|
139
158
|
retval = bedrock_request()
|
140
159
|
end
|
141
160
|
end
|
142
|
-
|
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
|
-
|
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.
|
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:
|
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.
|