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.
Files changed (72) hide show
  1. data/LICENSE +25 -0
  2. data/README.md +30 -0
  3. data/Rakefile +42 -0
  4. data/lib/abstract_class.rb +40 -0
  5. data/lib/byte_buffer.rb +126 -0
  6. data/lib/datagram_channel.rb +70 -0
  7. data/lib/exceptions/buffer_underflow_exception.rb +10 -0
  8. data/lib/exceptions/packet_format_exception.rb +12 -0
  9. data/lib/exceptions/rcon_no_auth_exception.rb +14 -0
  10. data/lib/exceptions/steam_condenser_exception.rb +8 -0
  11. data/lib/exceptions/timeout_exception.rb +10 -0
  12. data/lib/socket_channel.rb +54 -0
  13. data/lib/steam-condenser.rb +3 -0
  14. data/lib/steam/community/dods/dods_class.rb +32 -0
  15. data/lib/steam/community/dods/dods_stats.rb +47 -0
  16. data/lib/steam/community/dods/dods_weapon.rb +54 -0
  17. data/lib/steam/community/game_achievement.rb +26 -0
  18. data/lib/steam/community/game_class.rb +15 -0
  19. data/lib/steam/community/game_stats.rb +92 -0
  20. data/lib/steam/community/game_weapon.rb +29 -0
  21. data/lib/steam/community/l4d/l4d_explosive.rb +23 -0
  22. data/lib/steam/community/l4d/l4d_map.rb +34 -0
  23. data/lib/steam/community/l4d/l4d_stats.rb +166 -0
  24. data/lib/steam/community/l4d/l4d_weapon.rb +23 -0
  25. data/lib/steam/community/steam_group.rb +16 -0
  26. data/lib/steam/community/steam_id.rb +212 -0
  27. data/lib/steam/community/tf2/tf2_class.rb +31 -0
  28. data/lib/steam/community/tf2/tf2_class_factory.rb +38 -0
  29. data/lib/steam/community/tf2/tf2_engineer.rb +25 -0
  30. data/lib/steam/community/tf2/tf2_medic.rb +22 -0
  31. data/lib/steam/community/tf2/tf2_sniper.rb +20 -0
  32. data/lib/steam/community/tf2/tf2_spy.rb +23 -0
  33. data/lib/steam/community/tf2/tf2_stats.rb +39 -0
  34. data/lib/steam/packets/a2a_ack_packet.rb +21 -0
  35. data/lib/steam/packets/a2a_ping_packet.rb +18 -0
  36. data/lib/steam/packets/a2m_get_servers_batch2_packet.rb +25 -0
  37. data/lib/steam/packets/a2s_info_packet.rb +18 -0
  38. data/lib/steam/packets/a2s_player_packet.rb +22 -0
  39. data/lib/steam/packets/a2s_rules_packet.rb +21 -0
  40. data/lib/steam/packets/a2s_serverquery_getchallenge_packet.rb +18 -0
  41. data/lib/steam/packets/m2a_server_batch_packet.rb +37 -0
  42. data/lib/steam/packets/rcon/rcon_auth_request.rb +16 -0
  43. data/lib/steam/packets/rcon/rcon_auth_response.rb +16 -0
  44. data/lib/steam/packets/rcon/rcon_exec_request.rb +16 -0
  45. data/lib/steam/packets/rcon/rcon_exec_response.rb +20 -0
  46. data/lib/steam/packets/rcon/rcon_goldsrc_request.rb +20 -0
  47. data/lib/steam/packets/rcon/rcon_goldsrc_response.rb +20 -0
  48. data/lib/steam/packets/rcon/rcon_packet.rb +36 -0
  49. data/lib/steam/packets/rcon/rcon_packet_factory.rb +37 -0
  50. data/lib/steam/packets/request_with_challenge.rb +16 -0
  51. data/lib/steam/packets/s2a_info2_packet.rb +48 -0
  52. data/lib/steam/packets/s2a_info_base_packet.rb +29 -0
  53. data/lib/steam/packets/s2a_info_detailed_packet.rb +50 -0
  54. data/lib/steam/packets/s2a_player_packet.rb +32 -0
  55. data/lib/steam/packets/s2a_rules_packet.rb +33 -0
  56. data/lib/steam/packets/s2c_challenge_packet.rb +23 -0
  57. data/lib/steam/packets/steam_packet.rb +48 -0
  58. data/lib/steam/packets/steam_packet_factory.rb +90 -0
  59. data/lib/steam/servers/game_server.rb +222 -0
  60. data/lib/steam/servers/goldsrc_server.rb +36 -0
  61. data/lib/steam/servers/master_server.rb +60 -0
  62. data/lib/steam/servers/source_server.rb +65 -0
  63. data/lib/steam/sockets/goldsrc_socket.rb +108 -0
  64. data/lib/steam/sockets/master_server_socket.rb +20 -0
  65. data/lib/steam/sockets/rcon_socket.rb +50 -0
  66. data/lib/steam/sockets/source_socket.rb +72 -0
  67. data/lib/steam/sockets/steam_socket.rb +63 -0
  68. data/lib/steam/steam_player.rb +51 -0
  69. data/test/query_tests.rb +71 -0
  70. data/test/rcon_tests.rb +79 -0
  71. data/test/steam_community_tests.rb +36 -0
  72. 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
@@ -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
@@ -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