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.
- data/lib/gamespy_query/base.rb +9 -2
- data/lib/gamespy_query/parser.rb +4 -4
- data/lib/gamespy_query/socket.rb +0 -1
- data/lib/gamespy_query/version.rb +1 -1
- data/test/units/parser_test.rb +3 -3
- data/test/units/socket_test.rb +15 -13
- metadata +7 -7
data/lib/gamespy_query/base.rb
CHANGED
@@ -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.
|
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(
|
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
|
|
data/lib/gamespy_query/parser.rb
CHANGED
@@ -75,7 +75,7 @@ module GamespyQuery
|
|
75
75
|
end
|
76
76
|
|
77
77
|
# Parse player_data
|
78
|
-
data[:players] = parse_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]] <<
|
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
|
data/lib/gamespy_query/socket.rb
CHANGED
data/test/units/parser_test.rb
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
require 'teststrap'
|
2
2
|
|
3
3
|
context "Parser" do
|
4
|
-
|
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(
|
8
|
+
setup { GamespyQuery::Parser.new(default_data) }
|
9
9
|
|
10
|
-
asserts("Packets assigned") { topic.packets }.same_elements
|
10
|
+
asserts("Packets assigned") { topic.packets }.same_elements default_data
|
11
11
|
|
12
12
|
context "Parsed Output" do
|
13
13
|
setup { topic.parse }
|
data/test/units/socket_test.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'teststrap'
|
2
2
|
|
3
3
|
context "Socket" do
|
4
|
-
|
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(
|
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.
|
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: &
|
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: *
|
24
|
+
version_requirements: *19620600
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: riot
|
27
|
-
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: *
|
35
|
+
version_requirements: *19619540
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: yard
|
38
|
-
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: *
|
46
|
+
version_requirements: *19618960
|
47
47
|
description: ''
|
48
48
|
email:
|
49
49
|
- sb@dev-heaven.net
|