minestat 0.1.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 +7 -0
  2. data/lib/minestat.rb +67 -0
  3. metadata +44 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 09a8cf32e79d9b84421821e8cc1488af7536adbc
4
+ data.tar.gz: d6283c0a1283fc1295a5f39c68090a4f0a5cbf82
5
+ SHA512:
6
+ metadata.gz: bc95d4c77b69c9b7f81773628fcffab6771ec3f0c62f80781bcfc6783770e81812b8975d0304363e463697224d075b68039fccdf6050936b68ed68b9f79e3770
7
+ data.tar.gz: 79fade8a0317bb25e9775347b7f331d5edca976e70c5224a0b18aa488be03b387576b0436932a6751ded764cb9ec9adb3a5084c5b978054efd04282a7af76877
@@ -0,0 +1,67 @@
1
+ # minestat.rb - A Minecraft server status checker
2
+ # Copyright (C) 2014, 2016 Lloyd Dilley
3
+ # http://www.dilley.me/
4
+ #
5
+ # This program is free software; you can redistribute it and/or modify
6
+ # it under the terms of the GNU General Public License as published by
7
+ # the Free Software Foundation; either version 3 of the License, or
8
+ # (at your option) any later version.
9
+ #
10
+ # This program is distributed in the hope that it will be useful,
11
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ # GNU General Public License for more details.
14
+ #
15
+ # You should have received a copy of the GNU General Public License along
16
+ # with this program; if not, write to the Free Software Foundation, Inc.,
17
+ # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18
+
19
+ require 'socket'
20
+ require 'timeout'
21
+
22
+ class MineStat
23
+ NUM_FIELDS = 6 # number of values expected from server
24
+
25
+ def initialize(address, port, timeout = 7)
26
+ @address = address
27
+ @port = port
28
+ @online # online or offline?
29
+ @version # server version
30
+ @motd # message of the day
31
+ @current_players # current number of players online
32
+ @max_players # maximum player capacity
33
+
34
+ # Connect to the server and get the data
35
+ begin
36
+ data = nil
37
+ Timeout::timeout(timeout) do
38
+ server = TCPSocket.new(address, port)
39
+ server.write("\xFE\x01")
40
+ data=server.gets()
41
+ server.close()
42
+ end
43
+ rescue Errno::ECONNREFUSED => e
44
+ @online = false
45
+ rescue => e # timeout is handled here
46
+ @online = false
47
+ end
48
+
49
+ # Parse the received data
50
+ if data == nil || data.empty?
51
+ @online = false
52
+ else
53
+ server_info = data.split("\x00\x00\x00")
54
+ if server_info != nil && server_info.length >= NUM_FIELDS
55
+ @online = true
56
+ @version = server_info[2]
57
+ @motd = server_info[3]
58
+ @current_players = server_info[4]
59
+ @max_players = server_info[5]
60
+ else
61
+ @online = false
62
+ end
63
+ end
64
+ end
65
+
66
+ attr_reader :address, :port, :online, :version, :motd, :current_players, :max_players
67
+ end
metadata ADDED
@@ -0,0 +1,44 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: minestat
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Lloyd Dilley
8
+ - Stepan Melnikov
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2016-12-13 00:00:00.000000000 Z
13
+ dependencies: []
14
+ description:
15
+ email:
16
+ executables: []
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - lib/minestat.rb
21
+ homepage: https://github.com/ldilley/minestat
22
+ licenses: []
23
+ metadata: {}
24
+ post_install_message:
25
+ rdoc_options: []
26
+ require_paths:
27
+ - lib
28
+ required_ruby_version: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ required_rubygems_version: !ruby/object:Gem::Requirement
34
+ requirements:
35
+ - - ">="
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ requirements: []
39
+ rubyforge_project:
40
+ rubygems_version: 2.5.1
41
+ signing_key:
42
+ specification_version: 4
43
+ summary: Minecraft server status checker
44
+ test_files: []