steam-condenser 0.11.3 → 0.11.4

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