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 CHANGED
@@ -1,3 +1,5 @@
1
+ # encoding: utf-8
2
+ #
1
3
  # This code is free software; you can redistribute it and/or modify it under
2
4
  # the terms of the new BSD License.
3
5
  #
@@ -6,6 +6,6 @@
6
6
  module SteamCondenser
7
7
 
8
8
  # The current version of Steam Condenser
9
- VERSION = '1.0.1'
9
+ VERSION = '1.0.2'
10
10
 
11
11
  end
@@ -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
- @app_id = app_id
74
- @name = achievement_data.elements['name'].text
75
- @steam_id64 = steam_id64
76
- @unlocked = (achievement_data.attributes['closed'].to_i == 1)
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
- @server_port = @content_data.short unless extra_data_flag & 0x80 == 0
42
+ if @content_data.remaining > 0
43
+ extra_data_flag = @content_data.byte
44
44
 
45
- unless extra_data_flag & 0x10 == 0
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
- unless extra_data_flag & 0x40 == 0
50
- @tv_port = @content_data.short
51
- @tv_name = @content_data.cstring
52
- end
47
+ unless extra_data_flag & 0x10 == 0
48
+ @server_id = @content_data.long | (@content_data.long << 32)
49
+ end
53
50
 
54
- @server_tags = @content_data.cstring unless extra_data_flag & 0x20 == 0
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
@@ -39,7 +39,7 @@ class S2A_RULES_Packet
39
39
  rule = @content_data.cstring
40
40
  value = @content_data.cstring
41
41
 
42
- break if rule.empty? || value.empty?
42
+ break if rule.empty?
43
43
 
44
44
  @rules_hash[rule] = value
45
45
  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
- begin
205
- case request_type
206
- when :challenge then
207
- request_packet = A2S_SERVERQUERY_GETCHALLENGE_Packet.new
208
- expected_response = S2C_CHALLENGE_Packet
209
- when :info then
210
- request_packet = A2S_INFO_Packet.new
211
- expected_response = S2A_INFO_BasePacket
212
- when :players then
213
- request_packet = A2S_PLAYER_Packet.new(@challenge_number)
214
- expected_response = S2A_PLAYER_Packet
215
- when :rules then
216
- request_packet = A2S_RULES_Packet.new(@challenge_number)
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, "Response of type #{response_packet.class} cannot be handled by this method."
235
- end
218
+ raise SteamCondenserError, 'Called with wrong request type.'
219
+ end
236
220
 
237
- unless response_packet.kind_of? expected_response
238
- puts "Expected #{expected_response}, got #{response_packet.class}." if $DEBUG
239
- handle_response_for_request(request_type, false) if repeat_on_failure
240
- end
241
- rescue SteamCondenser::TimeoutError
242
- puts "Expected #{expected_response}, but timed out." if $DEBUG
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::GOLDSRC_MASTER_SERVER
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.length == 0 || response_packet.response.size > 0
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: 21
4
+ hash: 19
5
5
  prerelease:
6
6
  segments:
7
7
  - 1
8
8
  - 0
9
- - 1
10
- version: 1.0.1
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-08-23 00:00:00 Z
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.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