steam-condenser 0.8.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.
- data/LICENSE +25 -0
- data/README.md +30 -0
- data/Rakefile +42 -0
- data/lib/abstract_class.rb +40 -0
- data/lib/byte_buffer.rb +126 -0
- data/lib/datagram_channel.rb +70 -0
- data/lib/exceptions/buffer_underflow_exception.rb +10 -0
- data/lib/exceptions/packet_format_exception.rb +12 -0
- data/lib/exceptions/rcon_no_auth_exception.rb +14 -0
- data/lib/exceptions/steam_condenser_exception.rb +8 -0
- data/lib/exceptions/timeout_exception.rb +10 -0
- data/lib/socket_channel.rb +54 -0
- data/lib/steam-condenser.rb +3 -0
- data/lib/steam/community/dods/dods_class.rb +32 -0
- data/lib/steam/community/dods/dods_stats.rb +47 -0
- data/lib/steam/community/dods/dods_weapon.rb +54 -0
- data/lib/steam/community/game_achievement.rb +26 -0
- data/lib/steam/community/game_class.rb +15 -0
- data/lib/steam/community/game_stats.rb +92 -0
- data/lib/steam/community/game_weapon.rb +29 -0
- data/lib/steam/community/l4d/l4d_explosive.rb +23 -0
- data/lib/steam/community/l4d/l4d_map.rb +34 -0
- data/lib/steam/community/l4d/l4d_stats.rb +166 -0
- data/lib/steam/community/l4d/l4d_weapon.rb +23 -0
- data/lib/steam/community/steam_group.rb +16 -0
- data/lib/steam/community/steam_id.rb +212 -0
- data/lib/steam/community/tf2/tf2_class.rb +31 -0
- data/lib/steam/community/tf2/tf2_class_factory.rb +38 -0
- data/lib/steam/community/tf2/tf2_engineer.rb +25 -0
- data/lib/steam/community/tf2/tf2_medic.rb +22 -0
- data/lib/steam/community/tf2/tf2_sniper.rb +20 -0
- data/lib/steam/community/tf2/tf2_spy.rb +23 -0
- data/lib/steam/community/tf2/tf2_stats.rb +39 -0
- data/lib/steam/packets/a2a_ack_packet.rb +21 -0
- data/lib/steam/packets/a2a_ping_packet.rb +18 -0
- data/lib/steam/packets/a2m_get_servers_batch2_packet.rb +25 -0
- data/lib/steam/packets/a2s_info_packet.rb +18 -0
- data/lib/steam/packets/a2s_player_packet.rb +22 -0
- data/lib/steam/packets/a2s_rules_packet.rb +21 -0
- data/lib/steam/packets/a2s_serverquery_getchallenge_packet.rb +18 -0
- data/lib/steam/packets/m2a_server_batch_packet.rb +37 -0
- data/lib/steam/packets/rcon/rcon_auth_request.rb +16 -0
- data/lib/steam/packets/rcon/rcon_auth_response.rb +16 -0
- data/lib/steam/packets/rcon/rcon_exec_request.rb +16 -0
- data/lib/steam/packets/rcon/rcon_exec_response.rb +20 -0
- data/lib/steam/packets/rcon/rcon_goldsrc_request.rb +20 -0
- data/lib/steam/packets/rcon/rcon_goldsrc_response.rb +20 -0
- data/lib/steam/packets/rcon/rcon_packet.rb +36 -0
- data/lib/steam/packets/rcon/rcon_packet_factory.rb +37 -0
- data/lib/steam/packets/request_with_challenge.rb +16 -0
- data/lib/steam/packets/s2a_info2_packet.rb +48 -0
- data/lib/steam/packets/s2a_info_base_packet.rb +29 -0
- data/lib/steam/packets/s2a_info_detailed_packet.rb +50 -0
- data/lib/steam/packets/s2a_player_packet.rb +32 -0
- data/lib/steam/packets/s2a_rules_packet.rb +33 -0
- data/lib/steam/packets/s2c_challenge_packet.rb +23 -0
- data/lib/steam/packets/steam_packet.rb +48 -0
- data/lib/steam/packets/steam_packet_factory.rb +90 -0
- data/lib/steam/servers/game_server.rb +222 -0
- data/lib/steam/servers/goldsrc_server.rb +36 -0
- data/lib/steam/servers/master_server.rb +60 -0
- data/lib/steam/servers/source_server.rb +65 -0
- data/lib/steam/sockets/goldsrc_socket.rb +108 -0
- data/lib/steam/sockets/master_server_socket.rb +20 -0
- data/lib/steam/sockets/rcon_socket.rb +50 -0
- data/lib/steam/sockets/source_socket.rb +72 -0
- data/lib/steam/sockets/steam_socket.rb +63 -0
- data/lib/steam/steam_player.rb +51 -0
- data/test/query_tests.rb +71 -0
- data/test/rcon_tests.rb +79 -0
- data/test/steam_community_tests.rb +36 -0
- metadata +132 -0
@@ -0,0 +1,51 @@
|
|
1
|
+
# This code is free software; you can redistribute it and/or modify it under the
|
2
|
+
# terms of the new BSD License.
|
3
|
+
#
|
4
|
+
# Copyright (c) 2008-2009, Sebastian Staudt
|
5
|
+
|
6
|
+
require 'exceptions/steam_condenser_exception'
|
7
|
+
|
8
|
+
# The SteamPlayer class represents a player connected to a server
|
9
|
+
class SteamPlayer
|
10
|
+
|
11
|
+
attr_reader :connect_time, :id, :name, :loss, :ping, :real_id, :score, :state,
|
12
|
+
:steam_id
|
13
|
+
|
14
|
+
# Creates a new SteamPlayer object based on the given information
|
15
|
+
def initialize(id, name, score, connect_time)
|
16
|
+
@connect_time = connect_time
|
17
|
+
@id = id
|
18
|
+
@name = name
|
19
|
+
@score = score
|
20
|
+
@extended = false
|
21
|
+
end
|
22
|
+
|
23
|
+
# Extends this player object with additional information acquired using RCON
|
24
|
+
# status
|
25
|
+
def add_info(real_id, name, steam_id, *player_data)
|
26
|
+
@extended = true
|
27
|
+
|
28
|
+
raise SteamCondenserException.new('Information to add belongs to a different player.') unless name == @name
|
29
|
+
|
30
|
+
@real_id = real_id
|
31
|
+
@steam_id = steam_id
|
32
|
+
if steam_id == 'BOT'
|
33
|
+
@state = player_data[0]
|
34
|
+
else
|
35
|
+
@addr = player_data[4]
|
36
|
+
@loss = player_data[2]
|
37
|
+
@ping = player_data[1]
|
38
|
+
@state = player_data[3]
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
# Returns a String representation of this player
|
43
|
+
def to_s
|
44
|
+
if @extended
|
45
|
+
"\##{@real_id} \"#{@name}\", SteamID: #{@steam_id}, Score: #{@score}, Time: #{@connect_time}"
|
46
|
+
else
|
47
|
+
"\##{@id} \"#{@name}\", Score: #{@score}, Time: #{@connect_time}"
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
data/test/query_tests.rb
ADDED
@@ -0,0 +1,71 @@
|
|
1
|
+
# This code is free software; you can redistribute it and/or modify it under the
|
2
|
+
# terms of the new BSD License.
|
3
|
+
#
|
4
|
+
# Copyright (c) 2008-2009, Sebastian Staudt
|
5
|
+
#
|
6
|
+
# $Id$
|
7
|
+
|
8
|
+
$:.push File.join(File.dirname(__FILE__), "../lib")
|
9
|
+
|
10
|
+
require "exceptions/timeout_exception"
|
11
|
+
require "ipaddr"
|
12
|
+
require "steam/servers/goldsrc_server"
|
13
|
+
require "steam/servers/master_server"
|
14
|
+
require "steam/servers/source_server"
|
15
|
+
require "test/unit"
|
16
|
+
|
17
|
+
class QueryTests < Test::Unit::TestCase
|
18
|
+
|
19
|
+
# This test tries to initialize an invalid GoldSrc server
|
20
|
+
def test_invalid_goldsrc_server
|
21
|
+
assert_raise TimeoutException do
|
22
|
+
invalid_server = GoldSrcServer.new IPAddr.new("1.0.0.0")
|
23
|
+
invalid_server.get_ping
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
# This test tries to initialize an invalid Source server
|
28
|
+
def test_invalid_source_server
|
29
|
+
assert_raise TimeoutException do
|
30
|
+
invalid_server = SourceServer.new IPAddr.new("1.0.0.0")
|
31
|
+
invalid_server.get_ping
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
# This test gets a random GoldSrc server from the master server and does a
|
36
|
+
# full query on it
|
37
|
+
def test_random_goldsrc_server
|
38
|
+
assert_nothing_raised do
|
39
|
+
master_server = MasterServer.new(*MasterServer::GOLDSRC_MASTER_SERVER)
|
40
|
+
servers = master_server.get_servers MasterServer::REGION_ALL, "\\type\\d\\empty\\1\\full\\1\\gamedir\\valve"
|
41
|
+
|
42
|
+
assert !servers.empty?, "Got no servers from master server."
|
43
|
+
|
44
|
+
server = GoldSrcServer.new(*servers[rand(servers.length)])
|
45
|
+
server.init
|
46
|
+
server.update_player_info
|
47
|
+
server.update_rules_info
|
48
|
+
|
49
|
+
print server.to_s
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
# This test gets a random Source server from the master server and does a
|
54
|
+
# full query on it
|
55
|
+
def test_random_source_server
|
56
|
+
assert_nothing_raised do
|
57
|
+
master_server = MasterServer.new(*MasterServer::SOURCE_MASTER_SERVER)
|
58
|
+
servers = master_server.get_servers MasterServer::REGION_ALL, "\\type\\d\\empty\\1\\full\\1\\gamedir\\tf"
|
59
|
+
|
60
|
+
assert !servers.empty?, "Got no servers from master server."
|
61
|
+
|
62
|
+
server = SourceServer.new(*servers[rand(servers.length)])
|
63
|
+
server.init
|
64
|
+
server.update_player_info
|
65
|
+
server.update_rules_info
|
66
|
+
|
67
|
+
print server.to_s
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
end
|
data/test/rcon_tests.rb
ADDED
@@ -0,0 +1,79 @@
|
|
1
|
+
# This code is free software; you can redistribute it and/or modify it under the
|
2
|
+
# terms of the new BSD License.
|
3
|
+
#
|
4
|
+
# Copyright (c) 2008-2009, Sebastian Staudt
|
5
|
+
#
|
6
|
+
# $Id$
|
7
|
+
|
8
|
+
$:.push File.join(File.dirname(__FILE__), "../lib")
|
9
|
+
|
10
|
+
require "ipaddr"
|
11
|
+
require "steam/servers/goldsrc_server"
|
12
|
+
require "steam/servers/source_server"
|
13
|
+
require "test/unit"
|
14
|
+
|
15
|
+
class RCONTests < Test::Unit::TestCase
|
16
|
+
|
17
|
+
# This test tries to run the "status" command over RCON on a GoldSrc server
|
18
|
+
def test_long_rcon_goldsrc_server
|
19
|
+
assert_nothing_raised do
|
20
|
+
server = GoldSrcServer.new IPAddr.new("127.0.0.1")
|
21
|
+
server.rcon_auth "test"
|
22
|
+
rcon_reply = server.rcon_exec "cvarlist"
|
23
|
+
print "#{rcon_reply}\n"
|
24
|
+
|
25
|
+
assert(
|
26
|
+
rcon_reply.include?("CvarList ? for syntax"),
|
27
|
+
"Did not receive complete cvarlist.")
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
# This test tries to run the "status" command over RCON on a Source server
|
32
|
+
def test_long_rcon_source_server
|
33
|
+
assert_nothing_raised do
|
34
|
+
server = SourceServer.new IPAddr.new("127.0.0.1")
|
35
|
+
if server.rcon_auth "test"
|
36
|
+
rcon_reply = server.rcon_exec "cvarlist"
|
37
|
+
print "#{rcon_reply}\n"
|
38
|
+
end
|
39
|
+
|
40
|
+
assert(
|
41
|
+
rcon_reply.include?("total convars/concommands"),
|
42
|
+
"Did not receive complete cvarlist.")
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
# This test tries to run the "status" command over RCON on a GoldSrc server
|
47
|
+
def test_short_rcon_goldsrc_server
|
48
|
+
assert_nothing_raised do
|
49
|
+
server = GoldSrcServer.new IPAddr.new("127.0.0.1")
|
50
|
+
server.rcon_auth "test"
|
51
|
+
rcon_reply = server.rcon_exec "version"
|
52
|
+
print "#{rcon_reply}\n"
|
53
|
+
|
54
|
+
assert(
|
55
|
+
rcon_reply.include?("Protocol version") &&
|
56
|
+
rcon_reply.include?("Exe version") &&
|
57
|
+
rcon_reply.include?("Exe build"),
|
58
|
+
"Did not receive correct version response.");
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
# This test tries to run the "status" command over RCON on a Source server
|
63
|
+
def test_short_rcon_source_server
|
64
|
+
assert_nothing_raised do
|
65
|
+
server = SourceServer.new IPAddr.new("127.0.0.1")
|
66
|
+
if server.rcon_auth "test"
|
67
|
+
rcon_reply = server.rcon_exec "version"
|
68
|
+
print "#{rcon_reply}\n"
|
69
|
+
end
|
70
|
+
|
71
|
+
assert(
|
72
|
+
rcon_reply.include?("Protocol version") &&
|
73
|
+
rcon_reply.include?("Exe version") &&
|
74
|
+
rcon_reply.include?("Exe build"),
|
75
|
+
"Did not receive correct version response.");
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# This code is free software; you can redistribute it and/or modify it under the
|
2
|
+
# terms of the new BSD License.
|
3
|
+
#
|
4
|
+
# Copyright (c) 2008, Sebastian Staudt
|
5
|
+
#
|
6
|
+
# $Id$
|
7
|
+
|
8
|
+
$:.push File.join(File.dirname(__FILE__), "../lib")
|
9
|
+
|
10
|
+
require "steam/community/steam_id"
|
11
|
+
require "test/unit"
|
12
|
+
|
13
|
+
class SteamCommunityTests < Test::Unit::TestCase
|
14
|
+
|
15
|
+
# This test tries to aquire information from a online Steam ID by using the
|
16
|
+
# custom URL. This test only passes if the parsing of the XML document works
|
17
|
+
def test_steam_id_by_custom_url
|
18
|
+
assert_nothing_raised do
|
19
|
+
steam_id = SteamId.new "Koraktor"
|
20
|
+
p steam_id
|
21
|
+
p steam_id.get_game_stats "TF2"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
# This test tries to aquire information from a online Steam ID by using the
|
26
|
+
# 64bit numeric SteamID. This test only passes if the parsing of the XML
|
27
|
+
# document works
|
28
|
+
def test_steam_id_by_steamid_64
|
29
|
+
assert_nothing_raised do
|
30
|
+
steam_id = SteamId.new 76561197961384956
|
31
|
+
p steam_id
|
32
|
+
p steam_id.get_game_stats "TF2"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
metadata
ADDED
@@ -0,0 +1,132 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: steam-condenser
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.8.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Sebastian Staudt
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2009-06-13 00:00:00 +02:00
|
13
|
+
default_executable:
|
14
|
+
dependencies: []
|
15
|
+
|
16
|
+
description: A multi-language library for querying Source, GoldSrc servers and Steam master servers
|
17
|
+
email: koraktor@gmail.com
|
18
|
+
executables: []
|
19
|
+
|
20
|
+
extensions: []
|
21
|
+
|
22
|
+
extra_rdoc_files:
|
23
|
+
- LICENSE
|
24
|
+
- README.md
|
25
|
+
files:
|
26
|
+
- LICENSE
|
27
|
+
- README.md
|
28
|
+
- Rakefile
|
29
|
+
- lib/abstract_class.rb
|
30
|
+
- lib/byte_buffer.rb
|
31
|
+
- lib/datagram_channel.rb
|
32
|
+
- lib/exceptions/buffer_underflow_exception.rb
|
33
|
+
- lib/exceptions/packet_format_exception.rb
|
34
|
+
- lib/exceptions/rcon_no_auth_exception.rb
|
35
|
+
- lib/exceptions/steam_condenser_exception.rb
|
36
|
+
- lib/exceptions/timeout_exception.rb
|
37
|
+
- lib/socket_channel.rb
|
38
|
+
- lib/steam-condenser.rb
|
39
|
+
- lib/steam/community/dods/dods_class.rb
|
40
|
+
- lib/steam/community/dods/dods_stats.rb
|
41
|
+
- lib/steam/community/dods/dods_weapon.rb
|
42
|
+
- lib/steam/community/game_achievement.rb
|
43
|
+
- lib/steam/community/game_class.rb
|
44
|
+
- lib/steam/community/game_stats.rb
|
45
|
+
- lib/steam/community/game_weapon.rb
|
46
|
+
- lib/steam/community/l4d/l4d_explosive.rb
|
47
|
+
- lib/steam/community/l4d/l4d_map.rb
|
48
|
+
- lib/steam/community/l4d/l4d_stats.rb
|
49
|
+
- lib/steam/community/l4d/l4d_weapon.rb
|
50
|
+
- lib/steam/community/steam_group.rb
|
51
|
+
- lib/steam/community/steam_id.rb
|
52
|
+
- lib/steam/community/tf2/tf2_class.rb
|
53
|
+
- lib/steam/community/tf2/tf2_class_factory.rb
|
54
|
+
- lib/steam/community/tf2/tf2_engineer.rb
|
55
|
+
- lib/steam/community/tf2/tf2_medic.rb
|
56
|
+
- lib/steam/community/tf2/tf2_sniper.rb
|
57
|
+
- lib/steam/community/tf2/tf2_spy.rb
|
58
|
+
- lib/steam/community/tf2/tf2_stats.rb
|
59
|
+
- lib/steam/packets/a2a_ack_packet.rb
|
60
|
+
- lib/steam/packets/a2a_ping_packet.rb
|
61
|
+
- lib/steam/packets/a2m_get_servers_batch2_packet.rb
|
62
|
+
- lib/steam/packets/a2s_info_packet.rb
|
63
|
+
- lib/steam/packets/a2s_player_packet.rb
|
64
|
+
- lib/steam/packets/a2s_rules_packet.rb
|
65
|
+
- lib/steam/packets/a2s_serverquery_getchallenge_packet.rb
|
66
|
+
- lib/steam/packets/m2a_server_batch_packet.rb
|
67
|
+
- lib/steam/packets/rcon/rcon_auth_request.rb
|
68
|
+
- lib/steam/packets/rcon/rcon_auth_response.rb
|
69
|
+
- lib/steam/packets/rcon/rcon_exec_request.rb
|
70
|
+
- lib/steam/packets/rcon/rcon_exec_response.rb
|
71
|
+
- lib/steam/packets/rcon/rcon_goldsrc_request.rb
|
72
|
+
- lib/steam/packets/rcon/rcon_goldsrc_response.rb
|
73
|
+
- lib/steam/packets/rcon/rcon_packet.rb
|
74
|
+
- lib/steam/packets/rcon/rcon_packet_factory.rb
|
75
|
+
- lib/steam/packets/request_with_challenge.rb
|
76
|
+
- lib/steam/packets/s2a_info2_packet.rb
|
77
|
+
- lib/steam/packets/s2a_info_base_packet.rb
|
78
|
+
- lib/steam/packets/s2a_info_detailed_packet.rb
|
79
|
+
- lib/steam/packets/s2a_player_packet.rb
|
80
|
+
- lib/steam/packets/s2a_rules_packet.rb
|
81
|
+
- lib/steam/packets/s2c_challenge_packet.rb
|
82
|
+
- lib/steam/packets/steam_packet.rb
|
83
|
+
- lib/steam/packets/steam_packet_factory.rb
|
84
|
+
- lib/steam/servers/game_server.rb
|
85
|
+
- lib/steam/servers/goldsrc_server.rb
|
86
|
+
- lib/steam/servers/master_server.rb
|
87
|
+
- lib/steam/servers/source_server.rb
|
88
|
+
- lib/steam/sockets/goldsrc_socket.rb
|
89
|
+
- lib/steam/sockets/master_server_socket.rb
|
90
|
+
- lib/steam/sockets/rcon_socket.rb
|
91
|
+
- lib/steam/sockets/source_socket.rb
|
92
|
+
- lib/steam/sockets/steam_socket.rb
|
93
|
+
- lib/steam/steam_player.rb
|
94
|
+
- test/query_tests.rb
|
95
|
+
- test/rcon_tests.rb
|
96
|
+
- test/steam_community_tests.rb
|
97
|
+
has_rdoc: true
|
98
|
+
homepage: http://github.com/koraktor/steam-condenser
|
99
|
+
licenses: []
|
100
|
+
|
101
|
+
post_install_message:
|
102
|
+
rdoc_options:
|
103
|
+
- --all
|
104
|
+
- --inline-source
|
105
|
+
- --line-numbers
|
106
|
+
- --charset=utf-8
|
107
|
+
- --webcvs=http://github.com/koraktor/steam-condenser/source/blob/master/ruby/%s
|
108
|
+
require_paths:
|
109
|
+
- lib
|
110
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
111
|
+
requirements:
|
112
|
+
- - ">="
|
113
|
+
- !ruby/object:Gem::Version
|
114
|
+
version: "0"
|
115
|
+
version:
|
116
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
117
|
+
requirements:
|
118
|
+
- - ">="
|
119
|
+
- !ruby/object:Gem::Version
|
120
|
+
version: "0"
|
121
|
+
version:
|
122
|
+
requirements: []
|
123
|
+
|
124
|
+
rubyforge_project: steam-condenser
|
125
|
+
rubygems_version: 1.3.5
|
126
|
+
signing_key:
|
127
|
+
specification_version: 3
|
128
|
+
summary: Steam Condenser - A Steam query library
|
129
|
+
test_files:
|
130
|
+
- test/query_tests.rb
|
131
|
+
- test/rcon_tests.rb
|
132
|
+
- test/steam_community_tests.rb
|