steam-condenser 1.0.1 → 1.0.2

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