steam-condenser 1.0.1 → 1.0.2
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/Rakefile +2 -0
- data/lib/steam-condenser/version.rb +1 -1
- data/lib/steam/community/game_achievement.rb +16 -4
- data/lib/steam/packets/s2a_info2_packet.rb +13 -10
- data/lib/steam/packets/s2a_rules_packet.rb +1 -1
- data/lib/steam/servers/game_server.rb +33 -37
- data/lib/steam/servers/source_server.rb +4 -4
- metadata +5 -5
data/Rakefile
CHANGED
@@ -16,12 +16,22 @@ require 'steam/community/web_api'
|
|
16
16
|
# @author Sebastian Staudt
|
17
17
|
class GameAchievement
|
18
18
|
|
19
|
+
# Returns the symbolic API name of this achievement
|
20
|
+
#
|
21
|
+
# @return [String] The API name of this achievement
|
22
|
+
attr_reader :api_name
|
23
|
+
|
19
24
|
# Return the unique Steam Application ID of the game this achievement
|
20
25
|
# belongs to
|
21
26
|
#
|
22
27
|
# @return [Fixnum] The Steam Application ID of this achievement's game
|
23
28
|
attr_reader :app_id
|
24
29
|
|
30
|
+
# Returns the description of this achievement
|
31
|
+
#
|
32
|
+
# @return [String] The description of this achievement
|
33
|
+
attr_reader :description
|
34
|
+
|
25
35
|
# Returns the name of this achievement
|
26
36
|
#
|
27
37
|
# @return [String] The name of this achievement
|
@@ -70,10 +80,12 @@ class GameAchievement
|
|
70
80
|
# @param [REXML::Element] achievement_data The achievement data extracted
|
71
81
|
# from XML
|
72
82
|
def initialize(steam_id64, app_id, achievement_data)
|
73
|
-
@
|
74
|
-
@
|
75
|
-
@
|
76
|
-
@
|
83
|
+
@api_name = achievement_data.elements['apiname'].text
|
84
|
+
@app_id = app_id
|
85
|
+
@description = achievement_data.elements['description'].text
|
86
|
+
@name = achievement_data.elements['name'].text
|
87
|
+
@steam_id64 = steam_id64
|
88
|
+
@unlocked = (achievement_data.attributes['closed'].to_i == 1)
|
77
89
|
|
78
90
|
if @unlocked && !achievement_data.elements['unlockTimestamp'].nil?
|
79
91
|
@timestamp = Time.at(achievement_data.elements['unlockTimestamp'].text.to_i)
|
@@ -38,20 +38,23 @@ class S2A_INFO2_Packet
|
|
38
38
|
@password_needed = @content_data.byte == 1
|
39
39
|
@secure = @content_data.byte == 1
|
40
40
|
@game_version = @content_data.cstring
|
41
|
-
extra_data_flag = @content_data.byte
|
42
41
|
|
43
|
-
|
42
|
+
if @content_data.remaining > 0
|
43
|
+
extra_data_flag = @content_data.byte
|
44
44
|
|
45
|
-
|
46
|
-
@server_id = @content_data.long | (@content_data.long << 32)
|
47
|
-
end
|
45
|
+
@server_port = @content_data.short unless extra_data_flag & 0x80 == 0
|
48
46
|
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
end
|
47
|
+
unless extra_data_flag & 0x10 == 0
|
48
|
+
@server_id = @content_data.long | (@content_data.long << 32)
|
49
|
+
end
|
53
50
|
|
54
|
-
|
51
|
+
unless extra_data_flag & 0x40 == 0
|
52
|
+
@tv_port = @content_data.short
|
53
|
+
@tv_name = @content_data.cstring
|
54
|
+
end
|
55
|
+
|
56
|
+
@server_tags = @content_data.cstring unless extra_data_flag & 0x20 == 0
|
57
|
+
end
|
55
58
|
|
56
59
|
generate_info_hash
|
57
60
|
end
|
@@ -201,45 +201,41 @@ module GameServer
|
|
201
201
|
# @raise [SteamCondenserError] if either the request type or the response
|
202
202
|
# packet is not known
|
203
203
|
def handle_response_for_request(request_type, repeat_on_failure = true)
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
expected_response = S2A_RULES_Packet
|
218
|
-
else
|
219
|
-
raise SteamCondenserError, 'Called with wrong request type.'
|
220
|
-
end
|
221
|
-
|
222
|
-
send_request request_packet
|
223
|
-
response_packet = reply
|
224
|
-
|
225
|
-
if response_packet.kind_of? S2A_INFO_BasePacket
|
226
|
-
@info_hash = response_packet.info_hash
|
227
|
-
elsif response_packet.kind_of? S2A_PLAYER_Packet
|
228
|
-
@player_hash = response_packet.player_hash
|
229
|
-
elsif response_packet.kind_of? S2A_RULES_Packet
|
230
|
-
@rules_hash = response_packet.rules_hash
|
231
|
-
elsif response_packet.kind_of? S2C_CHALLENGE_Packet
|
232
|
-
@challenge_number = response_packet.challenge_number
|
204
|
+
case request_type
|
205
|
+
when :challenge then
|
206
|
+
request_packet = A2S_SERVERQUERY_GETCHALLENGE_Packet.new
|
207
|
+
expected_response = S2C_CHALLENGE_Packet
|
208
|
+
when :info then
|
209
|
+
request_packet = A2S_INFO_Packet.new
|
210
|
+
expected_response = S2A_INFO_BasePacket
|
211
|
+
when :players then
|
212
|
+
request_packet = A2S_PLAYER_Packet.new(@challenge_number)
|
213
|
+
expected_response = S2A_PLAYER_Packet
|
214
|
+
when :rules then
|
215
|
+
request_packet = A2S_RULES_Packet.new(@challenge_number)
|
216
|
+
expected_response = S2A_RULES_Packet
|
233
217
|
else
|
234
|
-
raise SteamCondenserError,
|
235
|
-
|
218
|
+
raise SteamCondenserError, 'Called with wrong request type.'
|
219
|
+
end
|
236
220
|
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
221
|
+
send_request request_packet
|
222
|
+
response_packet = reply
|
223
|
+
|
224
|
+
if response_packet.kind_of? S2A_INFO_BasePacket
|
225
|
+
@info_hash = response_packet.info_hash
|
226
|
+
elsif response_packet.kind_of? S2A_PLAYER_Packet
|
227
|
+
@player_hash = response_packet.player_hash
|
228
|
+
elsif response_packet.kind_of? S2A_RULES_Packet
|
229
|
+
@rules_hash = response_packet.rules_hash
|
230
|
+
elsif response_packet.kind_of? S2C_CHALLENGE_Packet
|
231
|
+
@challenge_number = response_packet.challenge_number
|
232
|
+
else
|
233
|
+
raise SteamCondenserError, "Response of type #{response_packet.class} cannot be handled by this method."
|
234
|
+
end
|
235
|
+
|
236
|
+
unless response_packet.kind_of? expected_response
|
237
|
+
puts "Expected #{expected_response}, got #{response_packet.class}." if $DEBUG
|
238
|
+
handle_response_for_request(request_type, false) if repeat_on_failure
|
243
239
|
end
|
244
240
|
end
|
245
241
|
|
@@ -31,7 +31,7 @@ class SourceServer
|
|
31
31
|
#
|
32
32
|
# @return [MasterServer] The Source master server
|
33
33
|
def self.master
|
34
|
-
MasterServer.new *MasterServer::
|
34
|
+
MasterServer.new *MasterServer::SOURCE_MASTER_SERVER
|
35
35
|
end
|
36
36
|
|
37
37
|
# Creates a new instance of a server object representing a Source server,
|
@@ -84,7 +84,7 @@ class SourceServer
|
|
84
84
|
@rcon_socket.send RCONExecRequest.new(@rcon_request_id, command)
|
85
85
|
@rcon_socket.send RCONTerminator.new(@rcon_request_id)
|
86
86
|
|
87
|
-
response =
|
87
|
+
response = []
|
88
88
|
begin
|
89
89
|
response_packet = @rcon_socket.reply
|
90
90
|
if response_packet.is_a? RCONAuthResponse
|
@@ -92,9 +92,9 @@ class SourceServer
|
|
92
92
|
raise RCONNoAuthError
|
93
93
|
end
|
94
94
|
response << response_packet.response
|
95
|
-
end while response.
|
95
|
+
end while response.size < 3 || response_packet.response.size > 0
|
96
96
|
|
97
|
-
response.strip
|
97
|
+
response.join('').strip
|
98
98
|
end
|
99
99
|
|
100
100
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: steam-condenser
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 19
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 1
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 1.0.
|
9
|
+
- 2
|
10
|
+
version: 1.0.2
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Sebastian Staudt
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-
|
18
|
+
date: 2011-10-24 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
version_requirements: &id001 !ruby/object:Gem::Requirement
|
@@ -228,7 +228,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
228
228
|
requirements: []
|
229
229
|
|
230
230
|
rubyforge_project:
|
231
|
-
rubygems_version: 1.8.
|
231
|
+
rubygems_version: 1.8.11
|
232
232
|
signing_key:
|
233
233
|
specification_version: 3
|
234
234
|
summary: Steam Condenser - A Steam query library
|