steam-condenser 0.8.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|