gamespy_query 0.2.0pre3 → 0.2.0pre4

Sign up to get free protection for your applications and to get access to all the features.
@@ -106,12 +106,19 @@ STR
106
106
  def encode_string(str)
107
107
  #Tools.debug {"Getting string #{str}"}
108
108
  #System::Text::Encoding.UTF8.GetString(System::Array.of(System::Byte).new(str.bytes.to_a)).to_s # # begin; System::Text::Encoding.USASCII.GetString(reply[0]).to_s; rescue nil, Exception => e; Tools.log_exception(e); reply[0].map {|e| e.chr}.join; end
109
+ # TODO: Temporary disabled due to issues with the encoded strings
110
+ =begin
109
111
  begin
110
- str.bytes.to_a.pack('C*').force_encoding(STR_UTF8)
112
+ # str.force_encoding(STR_UTF8)
113
+ (str + ' ').encode(STR_UTF8, STR_UTF8, invalid: :replace, undef: :replace)[0..-3]
111
114
  rescue nil, Exception => e
115
+ # Fallback - convert to UTF and replace any invalid or undefined
112
116
  Tools.log_exception e
113
- str.encode("UTF-8", invalid: :replace, undef: :replace)
117
+ str.encode(STR_UTF8, invalid: :replace, undef: :replace)
114
118
  end
119
+ =end
120
+ # Fallback - convert to UTF and replace any invalid or undefined
121
+ str.encode(STR_UTF8, invalid: :replace, undef: :replace)
115
122
  end
116
123
  end
117
124
 
@@ -75,7 +75,7 @@ module GamespyQuery
75
75
  end
76
76
 
77
77
  # Parse player_data
78
- data[:players] = parse_player_data(encode_string player_data)
78
+ data[:players] = parse_player_data(player_data)
79
79
 
80
80
  data
81
81
  end
@@ -165,7 +165,7 @@ module GamespyQuery
165
165
  # Parse the data - \x00 is printed after a non-nil entry, otherwise \x00 means nil (e.g empty team)
166
166
  until str.empty?
167
167
  entry = str[RX_X0_SPEC]
168
- player_data[player_data.keys[i]] << encode_string(entry.sub(STR_X0, STR_EMPTY))
168
+ player_data[player_data.keys[i]] << entry.sub(STR_X0, STR_EMPTY)
169
169
  str.sub!(entry, STR_EMPTY)
170
170
  end
171
171
 
@@ -178,11 +178,11 @@ module GamespyQuery
178
178
  next # ignore
179
179
  else
180
180
  if overwrite
181
- new_player_data[-1] = info # Overwrite latest entry
181
+ new_player_data[-1] = encode_string(info) # Overwrite latest entry
182
182
  overwrite = false # done the overwrite
183
183
  else
184
184
  #break if new_player_data.size == num_players
185
- new_player_data << info # insert entry
185
+ new_player_data << encode_string(info) # insert entry
186
186
  end
187
187
  end
188
188
  end
@@ -247,7 +247,6 @@ module GamespyQuery
247
247
 
248
248
  # Fetch all packets from socket
249
249
  def fetch
250
- Tools.debug {"FUCK ME"}
251
250
  pings = []
252
251
  r = self.data
253
252
  begin
@@ -1,4 +1,4 @@
1
1
  module GamespyQuery
2
2
  # Version of the library
3
- VERSION = "0.2.0pre3"
3
+ VERSION = "0.2.0pre4"
4
4
  end
@@ -1,13 +1,13 @@
1
1
  require 'teststrap'
2
2
 
3
3
  context "Parser" do
4
- DEFAULT_DATA = [
4
+ default_data = [
5
5
  "\x00\x04\x05\x06\asplitnum\x00\x00\x00gamever\x001.59.79548\x00hostname\x00-=WASP=- Warfare CO (Prime)\x00mapname\x00takistan\x00gametype\x00CTI\x00numplayers\x0046\x00numteams\x000\x00maxplayers\x0054\x00gamemode\x00openplaying\x00timelimit\x0015\x00password\x000\x00param1\x000\x00param2\x000\x00currentVersion\x00159\x00requiredVersion\x00159\x00mod\x00Arma 2;Arma 2: Operation Arrowhead;Arma 2: British Armed Forces (Lite);Arma 2: Private Military Company (Lite)\x00equalModRequired\x000\x00gameState\x007\x00dedicated\x001\x00platform\x00linux\x00language\x0065545\x00difficulty\x002\x00mission\x00[54] Warfare BE V2.069 - Takistan\x00gamename\x00arma2oapc\x00sv_battleye\x001\x00verifySignatures\x001\x00signatures\x00bi;WarFXPE;GLT_ADDONS;warFXsunlight;TGW_Zeroing;trsm_oa;soa110;SMK;jsrsfa;v2ECL;CBA_v0-7-3;ZEU_test;TRSM;TracersWAR;bi2;VopSound;cba_b158;acex_sm;WarFXLighting;gdtmod_plants2;TGW_Thermal;cba_b151;ASR;...\x00modhash\x00PMC v. 1.01;BAF v. 1.02;da39a3ee5e6b4b0d3255bfef95601890afd80709;\x00hash\x00f8c806b971abb935747da3900cab55599c0bc60c\x00\x00\x01player_\x00\x00Skilllos\x00Cool Hand\x00Viktor Reznov\x00Alchemist(HUN)\x00General Heinkel [GER]\x00Max\x00\xD0\x94\xD1\x80\xD0\xBE\xD0\xBD\xD0\xB3\xD0\xBE\x00letchik\x00Angerbode\x00TiDus\x00DrHat\x00Kermit\x00[UaS] snicka\x00Wedel\x00Dnalir [NOR]\x00Davor\x00Cateye(GER)\x00Bamse\x00Jorj\x00POMbI4\x00Daredevil\x00DrSMOKE\x00Vollpfosten\x00Maddin\x00-=[LRRP]=-Sentinel(NL)\x00Husky\x00Scumhawk\x00Bone-CH\x00Jarzah\x00I./KG40_Razor\x00Cpl.Bouiss\x00nAh\x00Tremor\x00Diamm\x00TUROCK_(FR-VODKA)\x00j.moss\x00FOKS\x00Phoenix\x00AfterShave\x00Coupe\x00Mitradis\x00Daniel\x00Flanker\x00Sig\x00_DPVf_hinkel\x00Random Sequence\x00\x00team_\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Ru\x00SO\x00\x00\x00\x00\x00\x00\x00\x00TF\x00\x00\x00\x00UTGPrivates\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00score_\x00\x00",
6
6
  "\x00\x04\x05\x06\asplitnum\x00\x81\x01score_\x00\x00371\x00314\x00335\x0038\x00224\x0036\x0096\x0083\x0042\x00237\x0037\x00137\x00212\x0082\x0041\x0042\x0035\x0073\x0094\x0028\x00127\x0045\x00107\x0030\x00-2\x0083\x002\x0026\x0023\x0034\x0010\x0056\x0016\x006\x0036\x001\x000\x001\x000\x003\x000\x002\x001\x000\x0020\x000\x00\x00deaths_\x00\x0024\x0017\x0018\x0015\x0028\x0025\x0027\x0029\x007\x0010\x008\x0011\x008\x0011\x0016\x0015\x0016\x006\x0010\x0023\x0038\x003\x0017\x003\x002\x007\x002\x001\x004\x0014\x002\x004\x002\x000\x0019\x005\x001\x004\x004\x000\x003\x002\x000\x000\x008\x000\x00\x00\x00\x02\x00"
7
7
  ]
8
- setup { GamespyQuery::Parser.new(DEFAULT_DATA) }
8
+ setup { GamespyQuery::Parser.new(default_data) }
9
9
 
10
- asserts("Packets assigned") { topic.packets }.same_elements DEFAULT_DATA
10
+ asserts("Packets assigned") { topic.packets }.same_elements default_data
11
11
 
12
12
  context "Parsed Output" do
13
13
  setup { topic.parse }
@@ -1,7 +1,7 @@
1
1
  require 'teststrap'
2
2
 
3
3
  context "Socket" do
4
- DEFAULT_DATA = [
4
+ default_data = [
5
5
  "\x00\x04\x05\x06\asplitnum\x00\x00\x00gamever\x001.59.79548\x00hostname\x00-=WASP=- Warfare CO (Prime)\x00mapname\x00takistan\x00gametype\x00CTI\x00numplayers\x0046\x00numteams\x000\x00maxplayers\x0054\x00gamemode\x00openplaying\x00timelimit\x0015\x00password\x000\x00param1\x000\x00param2\x000\x00currentVersion\x00159\x00requiredVersion\x00159\x00mod\x00Arma 2;Arma 2: Operation Arrowhead;Arma 2: British Armed Forces (Lite);Arma 2: Private Military Company (Lite)\x00equalModRequired\x000\x00gameState\x007\x00dedicated\x001\x00platform\x00linux\x00language\x0065545\x00difficulty\x002\x00mission\x00[54] Warfare BE V2.069 - Takistan\x00gamename\x00arma2oapc\x00sv_battleye\x001\x00verifySignatures\x001\x00signatures\x00bi;WarFXPE;GLT_ADDONS;warFXsunlight;TGW_Zeroing;trsm_oa;soa110;SMK;jsrsfa;v2ECL;CBA_v0-7-3;ZEU_test;TRSM;TracersWAR;bi2;VopSound;cba_b158;acex_sm;WarFXLighting;gdtmod_plants2;TGW_Thermal;cba_b151;ASR;...\x00modhash\x00PMC v. 1.01;BAF v. 1.02;da39a3ee5e6b4b0d3255bfef95601890afd80709;\x00hash\x00f8c806b971abb935747da3900cab55599c0bc60c\x00\x00\x01player_\x00\x00Skilllos\x00Cool Hand\x00Viktor Reznov\x00Alchemist(HUN)\x00General Heinkel [GER]\x00Max\x00\xD0\x94\xD1\x80\xD0\xBE\xD0\xBD\xD0\xB3\xD0\xBE\x00letchik\x00Angerbode\x00TiDus\x00DrHat\x00Kermit\x00[UaS] snicka\x00Wedel\x00Dnalir [NOR]\x00Davor\x00Cateye(GER)\x00Bamse\x00Jorj\x00POMbI4\x00Daredevil\x00DrSMOKE\x00Vollpfosten\x00Maddin\x00-=[LRRP]=-Sentinel(NL)\x00Husky\x00Scumhawk\x00Bone-CH\x00Jarzah\x00I./KG40_Razor\x00Cpl.Bouiss\x00nAh\x00Tremor\x00Diamm\x00TUROCK_(FR-VODKA)\x00j.moss\x00FOKS\x00Phoenix\x00AfterShave\x00Coupe\x00Mitradis\x00Daniel\x00Flanker\x00Sig\x00_DPVf_hinkel\x00Random Sequence\x00\x00team_\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Ru\x00SO\x00\x00\x00\x00\x00\x00\x00\x00TF\x00\x00\x00\x00UTGPrivates\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00score_\x00\x00",
6
6
  "\x00\x04\x05\x06\asplitnum\x00\x81\x01score_\x00\x00371\x00314\x00335\x0038\x00224\x0036\x0096\x0083\x0042\x00237\x0037\x00137\x00212\x0082\x0041\x0042\x0035\x0073\x0094\x0028\x00127\x0045\x00107\x0030\x00-2\x0083\x002\x0026\x0023\x0034\x0010\x0056\x0016\x006\x0036\x001\x000\x001\x000\x003\x000\x002\x001\x000\x0020\x000\x00\x00deaths_\x00\x0024\x0017\x0018\x0015\x0028\x0025\x0027\x0029\x007\x0010\x008\x0011\x008\x0011\x0016\x0015\x0016\x006\x0010\x0023\x0038\x003\x0017\x003\x002\x007\x002\x001\x004\x0014\x002\x004\x002\x000\x0019\x005\x001\x004\x004\x000\x003\x002\x000\x000\x008\x000\x00\x00\x00\x02\x00"
7
7
  ]
@@ -10,15 +10,15 @@ context "Socket" do
10
10
 
11
11
  denies("Confirm valid") { topic.valid? }
12
12
 
13
- asserts("handle_write") { topic.state = 0; topic.handle_write }.nil
14
- asserts("handle_read") { topic.state = 1; topic.handle_read }.nil
15
- asserts("handle_write") { topic.state = 2; topic.handle_write }.nil
16
- asserts("handle_read") { topic.state = 3; topic.handle_read }.nil
17
- asserts("handle_read") { topic.state = 4; topic.handle_read }.nil
13
+ #asserts("handle_write") { topic.state = 0; topic.handle_write }.nil
14
+ #asserts("handle_read") { topic.state = 1; topic.handle_read }.nil
15
+ #asserts("handle_write") { topic.state = 2; topic.handle_write }.nil
16
+ #asserts("handle_read") { topic.state = 3; topic.handle_read }.nil
17
+ #asserts("handle_read") { topic.state = 4; topic.handle_read }.nil
18
18
  asserts("Set state 5, confirm valid") { topic.state = 5; topic.valid? }
19
19
 
20
- denies("handle_write") { topic.state = 1; topic.handle_write }
21
- denies("handle_read") { topic.state = 0; topic.handle_read }
20
+ #denies("handle_write") { topic.state = 1; topic.handle_write }
21
+ #denies("handle_read") { topic.state = 0; topic.handle_read }
22
22
 
23
23
 
24
24
  # TODO
@@ -34,7 +34,7 @@ context "Socket" do
34
34
  asserts("sync") { topic.sync }
35
35
 
36
36
  context "Sync custom" do
37
- setup { topic.sync(DEFAULT_DATA) }
37
+ setup { topic.sync(default_data) }
38
38
  asserts("Is a hash") { topic }.is_a?(Hash)
39
39
 
40
40
  context "Players" do
@@ -46,8 +46,8 @@ context "Socket" do
46
46
 
47
47
  asserts("name") { topic[:name] }.equals "-=[LRRP]=-Sentinel(NL)"
48
48
  asserts("team") { topic[:team] }.equals ""
49
- asserts("score") { topic[:score] }.equals -2
50
- asserts("deaths") { topic[:deaths] }.equals 2
49
+ asserts("score") { topic[:score] }.equals "-2"
50
+ asserts("deaths") { topic[:deaths] }.equals "2"
51
51
  end
52
52
 
53
53
  context "Player 10" do
@@ -55,8 +55,8 @@ context "Socket" do
55
55
 
56
56
  asserts("name") { topic[:name] }.equals "Coupe"
57
57
  asserts("team") { topic[:team] }.equals ""
58
- asserts("score") { topic[:score] }.equals 3
59
- asserts("deaths") { topic[:deaths] }.equals 0
58
+ asserts("score") { topic[:score] }.equals "3"
59
+ asserts("deaths") { topic[:deaths] }.equals "0"
60
60
  end
61
61
 
62
62
  end
@@ -66,8 +66,10 @@ context "Socket" do
66
66
  end
67
67
 
68
68
  # TODO
69
+ =begin
69
70
  context "MultiSocket" do
70
71
  setup { GamespyQuery::MultiSocket }
71
72
 
72
73
  end
74
+ =end
73
75
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gamespy_query
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0pre3
4
+ version: 0.2.0pre4
5
5
  prerelease: 5
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2012-03-10 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: cri
16
- requirement: &10524320 !ruby/object:Gem::Requirement
16
+ requirement: &19620600 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *10524320
24
+ version_requirements: *19620600
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: riot
27
- requirement: &10523880 !ruby/object:Gem::Requirement
27
+ requirement: &19619540 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *10523880
35
+ version_requirements: *19619540
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: yard
38
- requirement: &10523420 !ruby/object:Gem::Requirement
38
+ requirement: &19618960 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,7 +43,7 @@ dependencies:
43
43
  version: '0'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *10523420
46
+ version_requirements: *19618960
47
47
  description: ''
48
48
  email:
49
49
  - sb@dev-heaven.net