steam-condenser 0.11.3 → 0.11.4

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 (61) hide show
  1. data/Rakefile +0 -1
  2. data/lib/datagram_channel.rb +1 -2
  3. data/lib/steam-condenser/version.rb +1 -1
  4. data/lib/steam/community/css/css_stats.rb +42 -40
  5. data/lib/steam/community/defense_grid/defense_grid_stats.rb +4 -2
  6. data/lib/steam/community/dods/dods_class.rb +4 -2
  7. data/lib/steam/community/dods/dods_stats.rb +3 -1
  8. data/lib/steam/community/dods/dods_weapon.rb +4 -2
  9. data/lib/steam/community/game_class.rb +2 -6
  10. data/lib/steam/community/game_stats.rb +1 -3
  11. data/lib/steam/community/game_weapon.rb +1 -5
  12. data/lib/steam/community/l4d/abstract_l4d_stats.rb +3 -4
  13. data/lib/steam/community/l4d/abstract_l4d_weapon.rb +2 -3
  14. data/lib/steam/community/l4d/l4d2_stats.rb +3 -1
  15. data/lib/steam/community/l4d/l4d2_weapon.rb +4 -2
  16. data/lib/steam/community/l4d/l4d_explosive.rb +4 -2
  17. data/lib/steam/community/l4d/l4d_map.rb +1 -1
  18. data/lib/steam/community/l4d/l4d_stats.rb +4 -2
  19. data/lib/steam/community/l4d/l4d_weapon.rb +4 -2
  20. data/lib/steam/community/tf2/tf2_class.rb +3 -1
  21. data/lib/steam/community/tf2/tf2_class_factory.rb +1 -4
  22. data/lib/steam/community/tf2/tf2_engineer.rb +3 -1
  23. data/lib/steam/community/tf2/tf2_medic.rb +3 -1
  24. data/lib/steam/community/tf2/tf2_sniper.rb +3 -1
  25. data/lib/steam/community/tf2/tf2_spy.rb +3 -1
  26. data/lib/steam/community/tf2/tf2_stats.rb +4 -1
  27. data/lib/steam/packets/a2a_ack_packet.rb +6 -3
  28. data/lib/steam/packets/a2a_ping_packet.rb +3 -1
  29. data/lib/steam/packets/a2m_get_servers_batch2_packet.rb +4 -2
  30. data/lib/steam/packets/a2s_info_packet.rb +4 -2
  31. data/lib/steam/packets/a2s_player_packet.rb +3 -2
  32. data/lib/steam/packets/a2s_rules_packet.rb +3 -2
  33. data/lib/steam/packets/a2s_serverquery_getchallenge_packet.rb +4 -2
  34. data/lib/steam/packets/m2a_server_batch_packet.rb +4 -2
  35. data/lib/steam/packets/rcon/rcon_auth_request.rb +4 -2
  36. data/lib/steam/packets/rcon/rcon_auth_response.rb +4 -2
  37. data/lib/steam/packets/rcon/rcon_exec_request.rb +4 -2
  38. data/lib/steam/packets/rcon/rcon_exec_response.rb +6 -4
  39. data/lib/steam/packets/rcon/rcon_goldsrc_request.rb +3 -1
  40. data/lib/steam/packets/rcon/rcon_goldsrc_response.rb +4 -2
  41. data/lib/steam/packets/rcon/rcon_packet.rb +2 -3
  42. data/lib/steam/packets/rcon/rcon_packet_factory.rb +2 -3
  43. data/lib/steam/packets/s2a_info2_packet.rb +4 -2
  44. data/lib/steam/packets/s2a_info_base_packet.rb +2 -3
  45. data/lib/steam/packets/s2a_info_detailed_packet.rb +4 -2
  46. data/lib/steam/packets/s2a_player_packet.rb +4 -2
  47. data/lib/steam/packets/s2a_rules_packet.rb +3 -1
  48. data/lib/steam/packets/s2c_challenge_packet.rb +3 -1
  49. data/lib/steam/packets/steam_packet.rb +1 -1
  50. data/lib/steam/packets/steam_packet_factory.rb +2 -5
  51. data/lib/steam/servers/game_server.rb +2 -5
  52. data/lib/steam/servers/goldsrc_server.rb +3 -1
  53. data/lib/steam/servers/source_server.rb +3 -1
  54. data/lib/steam/sockets/goldsrc_socket.rb +4 -2
  55. data/lib/steam/sockets/master_server_socket.rb +3 -1
  56. data/lib/steam/sockets/rcon_socket.rb +3 -1
  57. data/lib/steam/sockets/source_socket.rb +5 -3
  58. data/lib/steam/sockets/steam_socket.rb +3 -6
  59. data/lib/stringio_additions.rb +1 -1
  60. metadata +4 -5
  61. data/lib/abstract_class.rb +0 -38
data/Rakefile CHANGED
@@ -6,7 +6,6 @@
6
6
  require 'rake/rdoctask'
7
7
  require 'rake/gempackagetask'
8
8
  require 'rubygems'
9
- require 'jeweler'
10
9
 
11
10
  src_files = Dir.glob(File.join("lib", "**", "*.rb"))
12
11
  test_files = Dir.glob(File.join("test", "**", "*.rb"))
@@ -24,8 +24,7 @@ class DatagramChannel
24
24
  if args[0].is_a? IPAddr
25
25
  ip_address = args[0].to_s
26
26
  elsif args[0].is_a? String
27
- sockaddr = (Socket.gethostbyname args[0])[3]
28
- ip_address = "#{sockaddr[0]}.#{sockaddr[1]}.#{sockaddr[2]}.#{sockaddr[3]}"
27
+ ip_address = IPSocket.getaddress args[0]
29
28
  else
30
29
  raise ArgumentError
31
30
  end
@@ -7,6 +7,6 @@ require 'yaml'
7
7
 
8
8
  module SteamCondenser
9
9
 
10
- VERSION = '0.11.3'
10
+ VERSION = '0.11.4'
11
11
 
12
12
  end
@@ -8,7 +8,9 @@ require 'steam/community/css/css_weapon'
8
8
 
9
9
  # The CSSStats class represents the game statistics for a single user in
10
10
  # Counter-Strike: Source
11
- class CSSStats < GameStats
11
+ class CSSStats
12
+
13
+ include GameStats
12
14
 
13
15
  MAPS = [ 'cs_assault', 'cs_compound', 'cs_havana', 'cs_italy', 'cs_militia',
14
16
  'cs_office', 'de_aztec', 'de_cbble', 'de_chateau', 'de_dust',
@@ -31,45 +33,45 @@ class CSSStats < GameStats
31
33
  @last_match_stats = {}
32
34
  @total_stats = {}
33
35
 
34
- @last_match_stats[:cost_per_kill] = @xml_data.elements['stats/lastmatch/costkill'].text.to_f
35
- @last_match_stats[:ct_wins] = @xml_data.elements['stats/lastmatch/ct_wins'].text.to_i
36
- @last_match_stats[:damage] = @xml_data.elements['stats/lastmatch/dmg'].text.to_i
37
- @last_match_stats[:deaths] = @xml_data.elements['stats/lastmatch/deaths'].text.to_i
38
- @last_match_stats[:dominations] = @xml_data.elements['stats/lastmatch/dominations'].text.to_i
39
- @last_match_stats[:favorite_weapon] = @xml_data.elements['stats/lastmatch/favwpn'].text
40
- @last_match_stats[:kills] = @xml_data.elements['stats/lastmatch/kills'].text.to_i
41
- @last_match_stats[:max_players] = @xml_data.elements['stats/lastmatch/max_players'].text.to_i
42
- @last_match_stats[:money] = @xml_data.elements['stats/lastmatch/money'].text.to_i
43
- @last_match_stats[:revenges] = @xml_data.elements['stats/lastmatch/revenges'].text.to_i
44
- @last_match_stats[:stars] = @xml_data.elements['stats/lastmatch/stars'].text.to_i
45
- @last_match_stats[:t_wins] = @xml_data.elements['stats/lastmatch/t_wins'].text.to_i
46
- @last_match_stats[:wins] = @xml_data.elements['stats/lastmatch/wins'].text.to_i
47
- @total_stats[:blind_kills] = @xml_data.elements['stats/lifetime/blindkills'].text.to_i
48
- @total_stats[:bombs_defused] = @xml_data.elements['stats/lifetime/bombsdefused'].text.to_i
49
- @total_stats[:bombs_planted] = @xml_data.elements['stats/lifetime/bombsplanted'].text.to_i
50
- @total_stats[:damage] = @xml_data.elements['stats/lifetime/dmg'].text.to_i
51
- @total_stats[:deaths] = @xml_data.elements['stats/summary/deaths'].text.to_i
52
- @total_stats[:domination_overkills] = @xml_data.elements['stats/lifetime/dominationoverkills'].text.to_i
53
- @total_stats[:dominations] = @xml_data.elements['stats/lifetime/dominations'].text.to_i
54
- @total_stats[:earned_money] = @xml_data.elements['stats/lifetime/money'].text.to_i
55
- @total_stats[:enemy_weapon_kills] = @xml_data.elements['stats/lifetime/enemywpnkills'].text.to_i
56
- @total_stats[:headshots] = @xml_data.elements['stats/lifetime/headshots'].text.to_i
57
- @total_stats[:hits] = @xml_data.elements['stats/summary/shotshit'].text.to_i
58
- @total_stats[:hostages_rescued] = @xml_data.elements['stats/lifetime/hostagesrescued'].text.to_i
59
- @total_stats[:kills] = @xml_data.elements['stats/summary/kills'].text.to_i
60
- @total_stats[:knife_kills] = @xml_data.elements['stats/lifetime/knifekills'].text.to_i
61
- @total_stats[:logos_sprayed] = @xml_data.elements['stats/lifetime/decals'].text.to_i
62
- @total_stats[:nightvision_damage] = @xml_data.elements['stats/lifetime/nvgdmg'].text.to_i
63
- @total_stats[:pistol_rounds_won] = @xml_data.elements['stats/lifetime/pistolrounds'].text.to_i
64
- @total_stats[:revenges] = @xml_data.elements['stats/lifetime/revenges'].text.to_i
65
- @total_stats[:rounds_played] = @xml_data.elements['stats/summary/rounds'].text.to_i
66
- @total_stats[:rounds_won] = @xml_data.elements['stats/summary/wins'].text.to_i
67
- @total_stats[:seconds_played] = @xml_data.elements['stats/summary/timeplayed'].text.to_i
68
- @total_stats[:shots] = @xml_data.elements['stats/summary/shots'].text.to_i
69
- @total_stats[:stars] = @xml_data.elements['stats/summary/stars'].text.to_i
70
- @total_stats[:weapons_donated] = @xml_data.elements['stats/lifetime/wpndonated'].text.to_i
71
- @total_stats[:windows_broken] = @xml_data.elements['stats/lifetime/winbroken'].text.to_i
72
- @total_stats[:zoomed_sniper_kills] = @xml_data.elements['stats/lifetime/zsniperkills'].text.to_i
36
+ @last_match_stats[:cost_per_kill] = @xml_data.elements['stats/lastmatch/costkill'].text.to_f
37
+ @last_match_stats[:ct_wins] = @xml_data.elements['stats/lastmatch/ct_wins'].text.to_i
38
+ @last_match_stats[:damage] = @xml_data.elements['stats/lastmatch/dmg'].text.to_i
39
+ @last_match_stats[:deaths] = @xml_data.elements['stats/lastmatch/deaths'].text.to_i
40
+ @last_match_stats[:dominations] = @xml_data.elements['stats/lastmatch/dominations'].text.to_i
41
+ @last_match_stats[:favorite_weapon_id] = @xml_data.elements['stats/lastmatch/favwpnid'].text.to_i
42
+ @last_match_stats[:kills] = @xml_data.elements['stats/lastmatch/kills'].text.to_i
43
+ @last_match_stats[:max_players] = @xml_data.elements['stats/lastmatch/max_players'].text.to_i
44
+ @last_match_stats[:money] = @xml_data.elements['stats/lastmatch/money'].text.to_i
45
+ @last_match_stats[:revenges] = @xml_data.elements['stats/lastmatch/revenges'].text.to_i
46
+ @last_match_stats[:stars] = @xml_data.elements['stats/lastmatch/stars'].text.to_i
47
+ @last_match_stats[:t_wins] = @xml_data.elements['stats/lastmatch/t_wins'].text.to_i
48
+ @last_match_stats[:wins] = @xml_data.elements['stats/lastmatch/wins'].text.to_i
49
+ @total_stats[:blind_kills] = @xml_data.elements['stats/lifetime/blindkills'].text.to_i
50
+ @total_stats[:bombs_defused] = @xml_data.elements['stats/lifetime/bombsdefused'].text.to_i
51
+ @total_stats[:bombs_planted] = @xml_data.elements['stats/lifetime/bombsplanted'].text.to_i
52
+ @total_stats[:damage] = @xml_data.elements['stats/lifetime/dmg'].text.to_i
53
+ @total_stats[:deaths] = @xml_data.elements['stats/summary/deaths'].text.to_i
54
+ @total_stats[:domination_overkills] = @xml_data.elements['stats/lifetime/dominationoverkills'].text.to_i
55
+ @total_stats[:dominations] = @xml_data.elements['stats/lifetime/dominations'].text.to_i
56
+ @total_stats[:earned_money] = @xml_data.elements['stats/lifetime/money'].text.to_i
57
+ @total_stats[:enemy_weapon_kills] = @xml_data.elements['stats/lifetime/enemywpnkills'].text.to_i
58
+ @total_stats[:headshots] = @xml_data.elements['stats/lifetime/headshots'].text.to_i
59
+ @total_stats[:hits] = @xml_data.elements['stats/summary/shotshit'].text.to_i
60
+ @total_stats[:hostages_rescued] = @xml_data.elements['stats/lifetime/hostagesrescued'].text.to_i
61
+ @total_stats[:kills] = @xml_data.elements['stats/summary/kills'].text.to_i
62
+ @total_stats[:knife_kills] = @xml_data.elements['stats/lifetime/knifekills'].text.to_i
63
+ @total_stats[:logos_sprayed] = @xml_data.elements['stats/lifetime/decals'].text.to_i
64
+ @total_stats[:nightvision_damage] = @xml_data.elements['stats/lifetime/nvgdmg'].text.to_i
65
+ @total_stats[:pistol_rounds_won] = @xml_data.elements['stats/lifetime/pistolrounds'].text.to_i
66
+ @total_stats[:revenges] = @xml_data.elements['stats/lifetime/revenges'].text.to_i
67
+ @total_stats[:rounds_played] = @xml_data.elements['stats/summary/rounds'].text.to_i
68
+ @total_stats[:rounds_won] = @xml_data.elements['stats/summary/wins'].text.to_i
69
+ @total_stats[:seconds_played] = @xml_data.elements['stats/summary/timeplayed'].text.to_i
70
+ @total_stats[:shots] = @xml_data.elements['stats/summary/shots'].text.to_i
71
+ @total_stats[:stars] = @xml_data.elements['stats/summary/stars'].text.to_i
72
+ @total_stats[:weapons_donated] = @xml_data.elements['stats/lifetime/wpndonated'].text.to_i
73
+ @total_stats[:windows_broken] = @xml_data.elements['stats/lifetime/winbroken'].text.to_i
74
+ @total_stats[:zoomed_sniper_kills] = @xml_data.elements['stats/lifetime/zsniperkills'].text.to_i
73
75
 
74
76
  @last_match_stats[:kdratio] = @last_match_stats[:kills].to_f / @last_match_stats[:deaths]
75
77
  @total_stats[:accuracy] = @total_stats[:hits].to_f / @total_stats[:shots]
@@ -1,13 +1,15 @@
1
1
  # This code is free software; you can redistribute it and/or modify it under the
2
2
  # terms of the new BSD License.
3
3
  #
4
- # Copyright (c) 2009, Sebastian Staudt
4
+ # Copyright (c) 2009-2010, Sebastian Staudt
5
5
 
6
6
  require 'steam/community/game_stats'
7
7
 
8
8
  # The DefenseGridStats class represents the game statistics for a single user in
9
9
  # Defense Grid: The Awakening
10
- class DefenseGridStats < GameStats
10
+ class DefenseGridStats
11
+
12
+ include GameStats
11
13
 
12
14
  attr_reader :bronze_medals, :damage_done, :damage_campaign, :damage_challenge,
13
15
  :encountered, :gold_medals, :heat_damage, :interest, :killed,
@@ -1,12 +1,14 @@
1
1
  # This code is free software; you can redistribute it and/or modify it under the
2
2
  # terms of the new BSD License.
3
3
  #
4
- # Copyright (c) 2009, Sebastian Staudt
4
+ # Copyright (c) 2009-2010, Sebastian Staudt
5
5
 
6
6
  require 'steam/community/game_class'
7
7
 
8
8
  # Represents the stats for a DoD:S class for a specific user
9
- class DoDSClass < GameClass
9
+ class DoDSClass
10
+
11
+ include GameClass
10
12
 
11
13
  attr_reader :blocks, :bombs_defused, :bombs_planted, :captures, :deaths,
12
14
  :dominations, :key, :kills, :name, :rounds_lost, :rounds_won,
@@ -6,7 +6,9 @@
6
6
  require 'steam/community/dods/dods_weapon'
7
7
  require 'steam/community/game_stats'
8
8
 
9
- class DoDSStats < GameStats
9
+ class DoDSStats
10
+
11
+ include GameStats
10
12
 
11
13
  # Creates a DoDSStats object by calling the super constructor with the game
12
14
  # name "DoD:S"
@@ -1,12 +1,14 @@
1
1
  # This code is free software; you can redistribute it and/or modify it under the
2
2
  # terms of the new BSD License.
3
3
  #
4
- # Copyright (c) 2009, Sebastian Staudt
4
+ # Copyright (c) 2009-2010, Sebastian Staudt
5
5
 
6
6
  require 'steam/community/game_weapon'
7
7
 
8
8
  # Represents the stats for a Day of Defeat: Source weapon for a specific user
9
- class DoDSWeapon < GameWeapon
9
+ class DoDSWeapon
10
+
11
+ include GameWeapon
10
12
 
11
13
  attr_reader :headshots, :name, :hits
12
14
 
@@ -1,14 +1,10 @@
1
1
  # This code is free software; you can redistribute it and/or modify it under the
2
2
  # terms of the new BSD License.
3
3
  #
4
- # Copyright (c) 2009, Sebastian Staudt
5
-
6
- require 'abstract_class'
4
+ # Copyright (c) 2009-2010, Sebastian Staudt
7
5
 
8
6
  # Super class for classes representing player classes
9
- class GameClass
10
-
11
- include AbstractClass
7
+ module GameClass
12
8
 
13
9
  attr_reader :name, :play_time
14
10
 
@@ -10,9 +10,7 @@ require 'steam/community/game_achievement'
10
10
 
11
11
  # The GameStats class represents the game statistics for a single user and a
12
12
  # specific game
13
- class GameStats
14
-
15
- protected :initialize
13
+ module GameStats
16
14
 
17
15
  attr_reader :app_id, :custom_url, :game_friendly_name, :game_name,
18
16
  :hours_played, :privacy_state, :steam_id64
@@ -3,12 +3,8 @@
3
3
  #
4
4
  # Copyright (c) 2009-2010, Sebastian Staudt
5
5
 
6
- require 'abstract_class'
7
-
8
6
  # Super class for classes representing game weapons
9
- class GameWeapon
10
-
11
- include AbstractClass
7
+ module GameWeapon
12
8
 
13
9
  attr_reader :kills, :id, :shots
14
10
 
@@ -1,17 +1,16 @@
1
1
  # This code is free software; you can redistribute it and/or modify it under the
2
2
  # terms of the new BSD License.
3
3
  #
4
- # Copyright (c) 2009, Sebastian Staudt
4
+ # Copyright (c) 2009-2010, Sebastian Staudt
5
5
 
6
- require 'abstract_class'
7
6
  require 'steam/community/game_stats'
8
7
 
9
8
  # AbstractL4DStats is an abstract base class for statistics for Left4Dead and
10
9
  # Left4Dead 2. As both games have more or less the same statistics available in
11
10
  # the Steam Community the code for both is pretty much the same.
12
- class AbstractL4DStats < GameStats
11
+ module AbstractL4DStats
13
12
 
14
- include AbstractClass
13
+ include GameStats
15
14
 
16
15
  SPECIAL_INFECTED = %w(boomer hunter smoker tank)
17
16
 
@@ -3,12 +3,11 @@
3
3
  #
4
4
  # Copyright (c) 2009-2010, Sebastian Staudt
5
5
 
6
- require 'abstract_class'
7
6
  require 'steam/community/game_weapon'
8
7
 
9
- class AbstractL4DWeapon < GameWeapon
8
+ module AbstractL4DWeapon
10
9
 
11
- include AbstractClass
10
+ include GameWeapon
12
11
 
13
12
  attr_reader :accuracy, :headshots_percentage, :kill_percentage
14
13
 
@@ -7,7 +7,9 @@ require 'steam/community/l4d/abstract_l4d_stats'
7
7
  require 'steam/community/l4d/l4d2_map'
8
8
  require 'steam/community/l4d/l4d2_weapon'
9
9
 
10
- class L4D2Stats < AbstractL4DStats
10
+ class L4D2Stats
11
+
12
+ include AbstractL4DStats
11
13
 
12
14
  SPECIAL_INFECTED = SPECIAL_INFECTED + %w{charger jockey spitter}
13
15
 
@@ -1,11 +1,13 @@
1
1
  # This code is free software; you can redistribute it and/or modify it under the
2
2
  # terms of the new BSD License.
3
3
  #
4
- # Copyright (c) 2009, Sebastian Staudt
4
+ # Copyright (c) 2009-2010, Sebastian Staudt
5
5
 
6
6
  require 'steam/community/l4d/abstract_l4d_weapon'
7
7
 
8
- class L4D2Weapon < AbstractL4DWeapon
8
+ class L4D2Weapon
9
+
10
+ include AbstractL4DWeapon
9
11
 
10
12
  attr_reader :damage, :weapon_group
11
13
 
@@ -1,11 +1,13 @@
1
1
  # This code is free software; you can redistribute it and/or modify it under the
2
2
  # terms of the new BSD License.
3
3
  #
4
- # Copyright (c) 2009, Sebastian Staudt
4
+ # Copyright (c) 2009-2010, Sebastian Staudt
5
5
 
6
6
  require 'steam/community/game_weapon'
7
7
 
8
- class L4DExplosive < GameWeapon
8
+ class L4DExplosive
9
+
10
+ include GameWeapon
9
11
 
10
12
  # Creates a new instance of L4DExplosive based on the assigned XML data
11
13
  def initialize(weapon_data)
@@ -1,7 +1,7 @@
1
1
  # This code is free software; you can redistribute it and/or modify it under the
2
2
  # terms of the new BSD License.
3
3
  #
4
- # Copyright (c) 2009, Sebastian Staudt
4
+ # Copyright (c) 2009-2010, Sebastian Staudt
5
5
 
6
6
  # L4DMap holds statistical information about maps played by a player in
7
7
  # Survival mode of Left4Dead.
@@ -1,14 +1,16 @@
1
1
  # This code is free software; you can redistribute it and/or modify it under the
2
2
  # terms of the new BSD License.
3
3
  #
4
- # Copyright (c) 2009, Sebastian Staudt
4
+ # Copyright (c) 2009-2010, Sebastian Staudt
5
5
 
6
6
  require 'steam/community/l4d/abstract_l4d_stats'
7
7
  require 'steam/community/l4d/l4d_explosive'
8
8
  require 'steam/community/l4d/l4d_map'
9
9
  require 'steam/community/l4d/l4d_weapon'
10
10
 
11
- class L4DStats < AbstractL4DStats
11
+ class L4DStats
12
+
13
+ include AbstractL4DStats
12
14
 
13
15
  # Creates a L4DStats object by calling the super constructor with the game
14
16
  # name "l4d".
@@ -1,11 +1,13 @@
1
1
  # This code is free software; you can redistribute it and/or modify it under the
2
2
  # terms of the new BSD License.
3
3
  #
4
- # Copyright (c) 2009, Sebastian Staudt
4
+ # Copyright (c) 2009-2010, Sebastian Staudt
5
5
 
6
6
  require 'steam/community/l4d/abstract_l4d_weapon'
7
7
 
8
- class L4DWeapon < AbstractL4DWeapon
8
+ class L4DWeapon
9
+
10
+ include AbstractL4DWeapon
9
11
 
10
12
  attr_reader :accuracy, :headshots_percentage, :kill_percentage
11
13
 
@@ -6,7 +6,9 @@
6
6
  require 'steam/community/game_class'
7
7
 
8
8
  # Represents the stats for a Team Fortress 2 class for a specific user
9
- class TF2Class < GameClass
9
+ module TF2Class
10
+
11
+ include GameClass
10
12
 
11
13
  attr_reader :max_buildings_destroyed, :max_captures, :max_damage,
12
14
  :max_defenses, :max_dominations, :max_kill_assists, :max_kills,
@@ -3,7 +3,6 @@
3
3
  #
4
4
  # Copyright (c) 2008-2010, Sebastian Staudt
5
5
 
6
- require 'abstract_class'
7
6
  require 'steam/community/tf2/tf2_class'
8
7
  require 'steam/community/tf2/tf2_engineer'
9
8
  require 'steam/community/tf2/tf2_medic'
@@ -12,9 +11,7 @@ require 'steam/community/tf2/tf2_spy'
12
11
 
13
12
  # The TF2ClassFactory is used to created instances of TF2Class based on the XML
14
13
  # input data
15
- class TF2ClassFactory
16
-
17
- include AbstractClass
14
+ module TF2ClassFactory
18
15
 
19
16
  # Creates a new instance of TF2Class storing the statistics for a Team
20
17
  # Fortress 2 class with the assigned XML data
@@ -7,7 +7,9 @@ require 'steam/community/tf2/tf2_class'
7
7
 
8
8
  # Represents the stats for the Team Fortress 2 engineer class for a specific
9
9
  # user
10
- class TF2Engineer < TF2Class
10
+ class TF2Engineer
11
+
12
+ include TF2Class
11
13
 
12
14
  attr_reader :max_buildings_built, :max_teleports, :max_sentry_kills
13
15
 
@@ -6,7 +6,9 @@
6
6
  require 'steam/community/tf2/tf2_class'
7
7
 
8
8
  # Represents the stats for the Team Fortress 2 medic class for a specific user
9
- class TF2Medic < TF2Class
9
+ class TF2Medic
10
+
11
+ include TF2Class
10
12
 
11
13
  attr_reader :max_health_healed, :max_ubercharges
12
14
 
@@ -6,7 +6,9 @@
6
6
  require 'steam/community/tf2/tf2_class'
7
7
 
8
8
  # Represents the stats for the Team Fortress 2 sniper class for a specific user
9
- class TF2Sniper < TF2Class
9
+ class TF2Sniper
10
+
11
+ include TF2Class
10
12
 
11
13
  # Creates a new instance of TF2Sniper based on the assigned XML data
12
14
  def initialize(class_data)
@@ -6,7 +6,9 @@
6
6
  require 'steam/community/tf2/tf2_class'
7
7
 
8
8
  # Represents the stats for the Team Fortress 2 spy class for a specific user
9
- class TF2Spy < TF2Class
9
+ class TF2Spy
10
+
11
+ include TF2Class
10
12
 
11
13
  attr_reader :max_backstabs, :max_health_leeched
12
14
 
@@ -3,11 +3,14 @@
3
3
  #
4
4
  # Copyright (c) 2008-2010, Sebastian Staudt
5
5
 
6
+ require 'steam/community/game_stats'
6
7
  require 'steam/community/tf2/tf2_class_factory'
7
8
 
8
9
  # The TF2Stats class represents the game statistics for a single user in Team
9
10
  # Fortress 2
10
- class TF2Stats < GameStats
11
+ class TF2Stats
12
+
13
+ include GameStats
11
14
 
12
15
  attr_reader :accumulated_points
13
16
 
@@ -3,19 +3,22 @@
3
3
  #
4
4
  # Copyright (c) 2008-2010, Sebastian Staudt
5
5
 
6
+ require 'exceptions/packet_format_exception'
6
7
  require 'steam/packets/steam_packet'
7
8
 
8
9
  # The A2A_ACK_Packet class represents the response to a A2A_PING
9
10
  # request send to the server.
10
- class A2A_ACK_Packet < SteamPacket
11
+ class A2A_ACK_Packet
12
+
13
+ include SteamPacket
11
14
 
12
15
  # Creates a A2A_ACK response object based on the data received.
13
16
  def initialize(data)
14
17
  if data != "\0" && data != "00000000000000\0"
15
- raise Exception.new('Wrong formatted A2A_ACK packet.')
18
+ raise PacketFormatException.new('Wrong formatted A2A_ACK packet.')
16
19
  end
17
20
 
18
- super SteamPacket::A2A_ACK_HEADER, data
21
+ super A2A_ACK_HEADER, data
19
22
  end
20
23
 
21
24
  end
@@ -7,7 +7,9 @@ require 'steam/packets/steam_packet'
7
7
 
8
8
  # The A2A_PING_Packet class represents a A2A_PING request send to the
9
9
  # server.
10
- class A2A_PING_Packet < SteamPacket
10
+ class A2A_PING_Packet
11
+
12
+ include SteamPacket
11
13
 
12
14
  # Creates a new A2A_PING request object
13
15
  def initialize
@@ -6,11 +6,13 @@
6
6
  require 'steam/packets/steam_packet'
7
7
  require 'steam/servers/master_server'
8
8
 
9
- class A2M_GET_SERVERS_BATCH2_Packet < SteamPacket
9
+ class A2M_GET_SERVERS_BATCH2_Packet
10
+
11
+ include SteamPacket
10
12
 
11
13
  # Creates a master server request, filtering by the given paramters.
12
14
  def initialize(region_code = MasterServer::REGION_ALL, start_ip = '0.0.0.0:0', filter = '')
13
- super SteamPacket::A2M_GET_SERVERS_BATCH2_HEADER
15
+ super A2M_GET_SERVERS_BATCH2_HEADER
14
16
 
15
17
  @filter = filter
16
18
  @region_code = region_code
@@ -7,11 +7,13 @@ require 'steam/packets/steam_packet'
7
7
 
8
8
  # The A2S_INFO_Packet class represents a A2S_INFO request send to the
9
9
  # server.
10
- class A2S_INFO_Packet < SteamPacket
10
+ class A2S_INFO_Packet
11
+
12
+ include SteamPacket
11
13
 
12
14
  # Creates a new A2S_INFO request object
13
15
  def initialize
14
- super SteamPacket::A2S_INFO_HEADER, "Source Engine Query\0"
16
+ super A2S_INFO_HEADER, "Source Engine Query\0"
15
17
  end
16
18
 
17
19
  end
@@ -8,13 +8,14 @@ require 'steam/packets/steam_packet'
8
8
 
9
9
  # The A2S_PLAYER_Packet class represents a A2S_PLAYER request send to the
10
10
  # server.
11
- class A2S_PLAYER_Packet < SteamPacket
11
+ class A2S_PLAYER_Packet
12
12
 
13
13
  include RequestWithChallenge
14
+ include SteamPacket
14
15
 
15
16
  # Creates a new A2S_PLAYER request object including the challenge_number
16
17
  def initialize(challenge_number = -1)
17
- super SteamPacket::A2S_PLAYER_HEADER, challenge_number
18
+ super A2S_PLAYER_HEADER, challenge_number
18
19
  end
19
20
 
20
21
  end
@@ -7,13 +7,14 @@ require 'steam/packets/request_with_challenge'
7
7
  require 'steam/packets/steam_packet'
8
8
 
9
9
  # Creates a new A2A_RULES request object including the challenge_number
10
- class A2S_RULES_Packet < SteamPacket
10
+ class A2S_RULES_Packet
11
11
 
12
12
  include RequestWithChallenge
13
+ include SteamPacket
13
14
 
14
15
  # Creates a new A2S_RULES request object including the challenge_number
15
16
  def initialize(challenge_number = -1)
16
- super SteamPacket::A2S_RULES_HEADER, challenge_number
17
+ super A2S_RULES_HEADER, challenge_number
17
18
  end
18
19
 
19
20
  end
@@ -7,11 +7,13 @@ require 'steam/packets/steam_packet'
7
7
 
8
8
  # The A2S_SERVERQUERY_GETCHALLENGE_Packet class represents a
9
9
  # A2S_SERVERQUERY_GETCHALLENGE request send to the server.
10
- class A2S_SERVERQUERY_GETCHALLENGE_Packet < SteamPacket
10
+ class A2S_SERVERQUERY_GETCHALLENGE_Packet
11
+
12
+ include SteamPacket
11
13
 
12
14
  # Creates a new A2S_SERVERQUERY_GETCHALLENGE request object
13
15
  def initialize
14
- super SteamPacket::A2S_SERVERQUERY_GETCHALLENGE_HEADER
16
+ super A2S_SERVERQUERY_GETCHALLENGE_HEADER
15
17
  end
16
18
 
17
19
  end
@@ -5,12 +5,14 @@
5
5
 
6
6
  require 'steam/packets/steam_packet'
7
7
 
8
- class M2A_SERVER_BATCH_Packet < SteamPacket
8
+ class M2A_SERVER_BATCH_Packet
9
+
10
+ include SteamPacket
9
11
 
10
12
  attr_reader :servers
11
13
 
12
14
  def initialize(data)
13
- super SteamPacket::M2A_SERVER_BATCH_HEADER, data
15
+ super M2A_SERVER_BATCH_HEADER, data
14
16
 
15
17
  unless @content_data.byte == 0x0A
16
18
  raise PacketFormatException.new('Master query response is missing additional 0x0A byte.')
@@ -5,10 +5,12 @@
5
5
 
6
6
  require 'steam/packets/rcon/rcon_packet'
7
7
 
8
- class RCONAuthRequest < RCONPacket
8
+ class RCONAuthRequest
9
+
10
+ include RCONPacket
9
11
 
10
12
  def initialize(request_id, rcon_password)
11
- super request_id, RCONPacket::SERVERDATA_AUTH, rcon_password
13
+ super request_id, SERVERDATA_AUTH, rcon_password
12
14
  end
13
15
 
14
16
  end
@@ -5,10 +5,12 @@
5
5
 
6
6
  require 'steam/packets/rcon/rcon_packet'
7
7
 
8
- class RCONAuthResponse < RCONPacket
8
+ class RCONAuthResponse
9
+
10
+ include RCONPacket
9
11
 
10
12
  def initialize(request_id)
11
- super request_id, RCONPacket::SERVERDATA_AUTH_RESPONSE, ''
13
+ super request_id, SERVERDATA_AUTH_RESPONSE, ''
12
14
  end
13
15
 
14
16
  end
@@ -5,10 +5,12 @@
5
5
 
6
6
  require 'steam/packets/rcon/rcon_packet'
7
7
 
8
- class RCONExecRequest < RCONPacket
8
+ class RCONExecRequest
9
+
10
+ include RCONPacket
9
11
 
10
12
  def initialize(request_id, rcon_command)
11
- super request_id, RCONPacket::SERVERDATA_EXECCOMMAND, rcon_command
13
+ super request_id, SERVERDATA_EXECCOMMAND, rcon_command
12
14
  end
13
15
 
14
16
  end
@@ -1,14 +1,16 @@
1
1
  # This code is free software; you can redistribute it and/or modify it under the
2
2
  # terms of the new BSD License.
3
3
  #
4
- # Copyright (c) 2008-2009, Sebastian Staudt
4
+ # Copyright (c) 2008-2010, Sebastian Staudt
5
5
 
6
- require "steam/packets/rcon/rcon_packet"
6
+ require 'steam/packets/rcon/rcon_packet'
7
7
 
8
- class RCONExecResponse < RCONPacket
8
+ class RCONExecResponse
9
+
10
+ include RCONPacket
9
11
 
10
12
  def initialize(request_id, command_response)
11
- super request_id, RCONPacket::SERVERDATA_RESPONSE_VALUE, command_response
13
+ super request_id, SERVERDATA_RESPONSE_VALUE, command_response
12
14
  end
13
15
 
14
16
  def response
@@ -5,7 +5,9 @@
5
5
 
6
6
  require 'steam/packets/steam_packet'
7
7
 
8
- class RCONGoldSrcRequest < SteamPacket
8
+ class RCONGoldSrcRequest
9
+
10
+ include SteamPacket
9
11
 
10
12
  def initialize(request)
11
13
  super 0x00, request
@@ -5,10 +5,12 @@
5
5
 
6
6
  require 'steam/packets/steam_packet'
7
7
 
8
- class RCONGoldSrcResponse < SteamPacket
8
+ class RCONGoldSrcResponse
9
+
10
+ include SteamPacket
9
11
 
10
12
  def initialize(command_response)
11
- super SteamPacket::RCON_GOLDSRC_RESPONSE_HEADER, command_response
13
+ super RCON_GOLDSRC_RESPONSE_HEADER, command_response
12
14
  end
13
15
 
14
16
  def response
@@ -3,12 +3,11 @@
3
3
  #
4
4
  # Copyright (c) 2008-2010, Sebastian Staudt
5
5
 
6
- require 'abstract_class'
7
6
  require 'steam/packets/steam_packet'
8
7
 
9
- class RCONPacket < SteamPacket
8
+ module RCONPacket
10
9
 
11
- include AbstractClass
10
+ include SteamPacket
12
11
 
13
12
  SERVERDATA_AUTH = 3
14
13
  SERVERDATA_AUTH_RESPONSE = 2
@@ -3,16 +3,15 @@
3
3
  #
4
4
  # Copyright (c) 2008-2010, Sebastian Staudt
5
5
 
6
- require 'abstract_class'
7
6
  require 'stringio_additions'
8
7
  require 'exceptions/packet_format_exception'
9
8
  require 'steam/packets/steam_packet_factory'
10
9
  require 'steam/packets/rcon/rcon_auth_response'
11
10
  require 'steam/packets/rcon/rcon_exec_response'
12
11
 
13
- class RCONPacketFactory < SteamPacketFactory
12
+ module RCONPacketFactory
14
13
 
15
- include AbstractClass
14
+ include SteamPacketFactory
16
15
 
17
16
  def self.packet_from_data(raw_data)
18
17
  byte_buffer = StringIO.new raw_data
@@ -7,11 +7,13 @@ require 'steam/packets/s2a_info_base_packet'
7
7
 
8
8
  # The S2A_INFO2_Packet class represents the response to a A2A_INFO
9
9
  # request send to a Source server.
10
- class S2A_INFO2_Packet < S2A_INFO_BasePacket
10
+ class S2A_INFO2_Packet
11
+
12
+ include S2A_INFO_BasePacket
11
13
 
12
14
  # Creates a S2A_INFO2 response object based on the data received.
13
15
  def initialize(data)
14
- super SteamPacket::S2A_INFO2_HEADER, data
16
+ super S2A_INFO2_HEADER, data
15
17
 
16
18
  @protocol_version = @content_data.byte
17
19
  @server_name = @content_data.cstring
@@ -3,14 +3,13 @@
3
3
  #
4
4
  # Copyright (c) 2008-2010, Sebastian Staudt
5
5
 
6
- require 'abstract_class'
7
6
  require 'steam/packets/steam_packet'
8
7
 
9
8
  # The S2A_INFO_BasePacket class represents the response to a A2S_INFO
10
9
  # request send to the server.
11
- class S2A_INFO_BasePacket < SteamPacket
10
+ module S2A_INFO_BasePacket
12
11
 
13
- include AbstractClass
12
+ include SteamPacket
14
13
 
15
14
  attr_reader :info_hash
16
15
 
@@ -9,11 +9,13 @@ require "steam/packets/s2a_info_base_packet"
9
9
  # request send to a GoldSrc server.
10
10
  # This is deprecated by 10/24/2008 for GoldSrc servers. They use the same
11
11
  # format as Source servers (S2A_INFO2) now.
12
- class S2A_INFO_DETAILED_Packet < S2A_INFO_BasePacket
12
+ class S2A_INFO_DETAILED_Packet
13
+
14
+ include S2A_INFO_BasePacket
13
15
 
14
16
  # Creates a S2A_INFO_DETAILED response object based on the data received.
15
17
  def initialize(data)
16
- super SteamPacket::S2A_INFO_DETAILED_HEADER, data
18
+ super S2A_INFO_DETAILED_HEADER, data
17
19
 
18
20
  @game_ip = @content_data.cstring
19
21
  @server_name = @content_data.cstring
@@ -7,7 +7,9 @@ require 'steam/packets/steam_packet'
7
7
 
8
8
  # The S2A_PLAYER_Packet class represents the response to a A2S_PLAYER
9
9
  # request send to the server.
10
- class S2A_PLAYER_Packet < SteamPacket
10
+ class S2A_PLAYER_Packet
11
+
12
+ include SteamPacket
11
13
 
12
14
  attr_reader :player_hash
13
15
 
@@ -15,7 +17,7 @@ class S2A_PLAYER_Packet < SteamPacket
15
17
  def initialize(content_data)
16
18
  raise Exception.new('Wrong formatted S2A_PLAYER packet.') if content_data.nil?
17
19
 
18
- super SteamPacket::S2A_PLAYER_HEADER, content_data
20
+ super S2A_PLAYER_HEADER, content_data
19
21
 
20
22
  # Ignore player count
21
23
  @content_data.byte
@@ -7,7 +7,9 @@ require 'steam/packets/steam_packet'
7
7
 
8
8
  # The S2A_RULES_Packet class represents the response to a A2S_RULES
9
9
  # request send to the server.
10
- class S2A_RULES_Packet < SteamPacket
10
+ class S2A_RULES_Packet
11
+
12
+ include SteamPacket
11
13
 
12
14
  attr_reader :rules_hash
13
15
 
@@ -7,7 +7,9 @@ require 'steam/packets/steam_packet'
7
7
 
8
8
  # The S2C_CHALLENGE_Packet class represents the response
9
9
  # to a A2S_SERVERQUERY_GETCHALLENGE request send to the server.
10
- class S2C_CHALLENGE_Packet < SteamPacket
10
+ class S2C_CHALLENGE_Packet
11
+
12
+ include SteamPacket
11
13
 
12
14
  # Creates a AS2C_CHALLENGE response object based on the data received.
13
15
  def initialize(challenge_number)
@@ -6,7 +6,7 @@
6
6
  require 'stringio_additions'
7
7
 
8
8
  # This class represents a packet used by the Source query protocol
9
- class SteamPacket
9
+ module SteamPacket
10
10
 
11
11
  A2A_ACK_HEADER = 0x6A
12
12
  A2A_PING_HEADER = 0x69
@@ -5,7 +5,6 @@
5
5
 
6
6
  require 'zlib'
7
7
 
8
- require 'abstract_class'
9
8
  require 'exceptions/steam_condenser_exception'
10
9
  require 'steam/packets/s2a_info_detailed_packet'
11
10
  require 'steam/packets/a2s_info_packet'
@@ -22,13 +21,11 @@ require 'steam/packets/a2m_get_servers_batch2_packet'
22
21
  require 'steam/packets/m2a_server_batch_packet'
23
22
  require 'steam/packets/rcon/rcon_goldsrc_response'
24
23
 
25
- class SteamPacketFactory
26
-
27
- include AbstractClass
24
+ module SteamPacketFactory
28
25
 
29
26
  # Creates a new packet object based on the header byte of the given raw data
30
27
  def self.packet_from_data(raw_data)
31
- header = raw_data[0].to_i
28
+ header = raw_data[0].ord
32
29
  data = raw_data[1..-1]
33
30
 
34
31
  case header
@@ -3,7 +3,6 @@
3
3
  #
4
4
  # Copyright (c) 2008-2010, Sebastian Staudt
5
5
 
6
- require 'abstract_class'
7
6
  require 'exceptions/steam_condenser_exception'
8
7
  require 'steam/steam_player'
9
8
  require 'steam/packets/a2s_info_packet'
@@ -16,9 +15,7 @@ require 'steam/packets/s2a_player_packet'
16
15
  require 'steam/packets/s2a_rules_packet'
17
16
  require 'steam/packets/s2c_challenge_packet'
18
17
 
19
- class GameServer
20
-
21
- include AbstractClass
18
+ module GameServer
22
19
 
23
20
  REQUEST_CHALLENGE = 0
24
21
  REQUEST_INFO = 1
@@ -134,7 +131,7 @@ class GameServer
134
131
  players.pop if is_a? GoldSrcServer
135
132
 
136
133
  players.each do |player|
137
- player_data = split_player_status(player)
134
+ player_data = self.class.split_player_status(player)
138
135
  @player_hash[player_data[1]].add_info(*player_data) if @player_hash.key?(player_data[1])
139
136
  end
140
137
  end
@@ -6,7 +6,9 @@
6
6
  require 'steam/servers/game_server'
7
7
  require 'steam/sockets/goldsrc_socket'
8
8
 
9
- class GoldSrcServer < GameServer
9
+ class GoldSrcServer
10
+
11
+ include GameServer
10
12
 
11
13
  # Splits the player status obtained with +rcon status+
12
14
  def self.split_player_status(player_status)
@@ -11,7 +11,9 @@ require 'steam/servers/game_server'
11
11
  require 'steam/sockets/rcon_socket'
12
12
  require 'steam/sockets/source_socket'
13
13
 
14
- class SourceServer < GameServer
14
+ class SourceServer
15
+
16
+ include GameServer
15
17
 
16
18
  # Splits the player status obtained with +rcon status+
17
19
  def self.split_player_status(player_status)
@@ -10,7 +10,9 @@ require 'steam/sockets/steam_socket'
10
10
 
11
11
  # The SourceSocket class is a sub class of SteamSocket respecting the
12
12
  # specifications of the Source query protocol.
13
- class GoldSrcSocket < SteamSocket
13
+ class GoldSrcSocket
14
+
15
+ include SteamSocket
14
16
 
15
17
  def initialize(ipaddress, port_number = 27015, is_hltv = false)
16
18
  super ipaddress, port_number
@@ -29,7 +31,7 @@ class GoldSrcSocket < SteamSocket
29
31
  begin
30
32
  # Parsing of split packet headers
31
33
  request_id = @buffer.long
32
- packet_number_and_count = @buffer.byte.to_i
34
+ packet_number_and_count = @buffer.byte
33
35
  packet_count = packet_number_and_count & 0xF
34
36
  packet_number = (packet_number_and_count >> 4) + 1
35
37
 
@@ -5,7 +5,9 @@
5
5
 
6
6
  require 'steam/sockets/steam_socket'
7
7
 
8
- class MasterServerSocket < SteamSocket
8
+ class MasterServerSocket
9
+
10
+ include SteamSocket
9
11
 
10
12
  def reply
11
13
  receive_packet 1500
@@ -9,7 +9,9 @@ require 'steam/packets/rcon/rcon_packet'
9
9
  require 'steam/packets/rcon/rcon_packet_factory'
10
10
  require 'steam/sockets/steam_socket'
11
11
 
12
- class RCONSocket < SteamSocket
12
+ class RCONSocket
13
+
14
+ include SteamSocket
13
15
 
14
16
  def initialize(ip_address, port_number)
15
17
  super ip_address, port_number
@@ -8,7 +8,9 @@ require 'steam/sockets/steam_socket'
8
8
 
9
9
  # The SourceSocket class is a sub class of SteamSocket respecting the
10
10
  # specifications of the Source query protocol.
11
- class SourceSocket < SteamSocket
11
+ class SourceSocket
12
+
13
+ include SteamSocket
12
14
 
13
15
  # Reads a packet from the channel. The Source query protocol specifies a
14
16
  # maximum packet size of 1400 byte. Greater packets will be split over several
@@ -24,8 +26,8 @@ class SourceSocket < SteamSocket
24
26
  # Parsing of split packet headers
25
27
  request_id = @buffer.long
26
28
  is_compressed = ((request_id & 0x80000000) != 0)
27
- packet_count = @buffer.byte.to_i
28
- packet_number = @buffer.byte.to_i + 1
29
+ packet_count = @buffer.byte
30
+ packet_number = @buffer.byte + 1
29
31
 
30
32
  if is_compressed
31
33
  @buffer.long
@@ -3,7 +3,6 @@
3
3
  #
4
4
  # Copyright (c) 2008-2010, Sebastian Staudt
5
5
 
6
- require 'abstract_class'
7
6
  require 'datagram_channel'
8
7
  require 'ipaddr'
9
8
  require 'stringio_additions'
@@ -11,13 +10,11 @@ require 'exceptions/timeout_exception'
11
10
 
12
11
  # Defines common methods for sockets used to connect to game and master
13
12
  # servers.
14
- class SteamSocket
15
-
16
- include AbstractClass
13
+ module SteamSocket
17
14
 
18
15
  def initialize(*args)
19
16
  @channel = DatagramChannel.open
20
- @channel.connect *args
17
+ @channel.connect(*args)
21
18
  @channel.configure_blocking false
22
19
 
23
20
  @remote_socket = Socket.getaddrinfo args[0].to_s, args[1]
@@ -32,7 +29,7 @@ class SteamSocket
32
29
  raise TimeoutException if select([@channel.socket], nil, nil, 1).nil?
33
30
 
34
31
  if buffer_length == 0
35
- @buffer.truncate @buffer.size
32
+ @buffer.rewind
36
33
  else
37
34
  @buffer = StringIO.allocate buffer_length
38
35
  end
@@ -12,7 +12,7 @@ class StringIO
12
12
  end
13
13
 
14
14
  def byte
15
- read(1)[0]
15
+ read(1)[0].ord
16
16
  end
17
17
 
18
18
  def float
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: 53
4
+ hash: 59
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 11
9
- - 3
10
- version: 0.11.3
9
+ - 4
10
+ version: 0.11.4
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: 2010-10-08 00:00:00 +02:00
18
+ date: 2010-11-07 00:00:00 +01:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -45,7 +45,6 @@ files:
45
45
  - LICENSE
46
46
  - README.md
47
47
  - Rakefile
48
- - lib/abstract_class.rb
49
48
  - lib/datagram_channel.rb
50
49
  - lib/exceptions/packet_format_exception.rb
51
50
  - lib/exceptions/rcon_ban_exception.rb
@@ -1,38 +0,0 @@
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
- # This module is used to mimic the behavior of abstract classes known from other
7
- # object-oriented programming languages
8
- module AbstractClass
9
-
10
- # If this module is included in a class:
11
- # * protect the constructor of the class
12
- # * make sure every derived class has a constructor calling the super
13
- # constructor
14
- def self.included(klass)
15
- klass.module_eval do
16
-
17
- class << self
18
- protected :new
19
-
20
- # Each derived class gets a constructor calling the super constructor
21
- def inherited(klass)
22
- klass.module_eval do
23
-
24
- # The constructor for derived classes, simply calling the super
25
- # constructor
26
- def self.new(*args)
27
- super
28
- end
29
-
30
- end
31
- end
32
-
33
- end
34
-
35
- end
36
- end
37
-
38
- end