gamespy_query 0.2.0pre3 → 0.2.0pre4

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.
@@ -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