Skip to content

Commit 9ad04cd

Browse files
committed
Added HintStatus message part + bumped to v6.5.0
1 parent 85e5c9f commit 9ad04cd

File tree

8 files changed

+126
-16
lines changed

8 files changed

+126
-16
lines changed

Archipelago.MultiClient.Net.Tests/MessageLogHelperFixture.cs

+51-7
Original file line numberDiff line numberDiff line change
@@ -46,13 +46,14 @@ public void Should_convert_print_json_packet_into_string()
4646
new JsonMessagePart { Type = JsonMessagePartType.LocationName, Text = "Text7" },
4747
new JsonMessagePart { Type = JsonMessagePartType.PlayerId, Text = "8" },
4848
new JsonMessagePart { Type = JsonMessagePartType.PlayerName, Text = "Text9" },
49-
new JsonMessagePart { Type = JsonMessagePartType.EntranceName, Text = "Text10" }
50-
}
49+
new JsonMessagePart { Type = JsonMessagePartType.EntranceName, Text = "Text10" },
50+
new JsonMessagePart { Type = JsonMessagePartType.HintStatus, Text = "Text11", HintStatus = HintStatus.Avoid }
51+
}
5152
};
5253

5354
socket.PacketReceived += Raise.Event<ArchipelagoSocketHelperDelagates.PacketReceivedHandler>(packet);
5455

55-
Assert.That(toStringResult, Is.EqualTo("Text1Text2Text3Text4Text5Text6Text7Text8Text9Text10"));
56+
Assert.That(toStringResult, Is.EqualTo("Text1Text2Text3Text4Text5Text6Text7Text8Text9Text10Text11"));
5657
}
5758

5859
[Test]
@@ -86,13 +87,14 @@ public void Should_get_parsed_data_for_print_json_packet()
8687
new JsonMessagePart { Type = JsonMessagePartType.LocationName, Text = "Text7" },
8788
new JsonMessagePart { Type = JsonMessagePartType.PlayerId, Text = "8" },
8889
new JsonMessagePart { Type = JsonMessagePartType.PlayerName, Text = "Text9" },
89-
new JsonMessagePart { Type = JsonMessagePartType.EntranceName, Text = "Text10" }
90-
}
90+
new JsonMessagePart { Type = JsonMessagePartType.EntranceName, Text = "Text10" },
91+
new JsonMessagePart { Type = JsonMessagePartType.HintStatus, Text = "Text11", HintStatus = HintStatus.Avoid }
92+
}
9193
};
9294

9395
socket.PacketReceived += Raise.Event<ArchipelagoSocketHelperDelagates.PacketReceivedHandler>(packet);
9496

95-
Assert.That(parts.Length, Is.EqualTo(10));
97+
Assert.That(parts.Length, Is.EqualTo(11));
9698
Assert.That(parts[0].Text, Is.EqualTo("Text1"));
9799
Assert.That(parts[0].Color, Is.EqualTo(Color.White));
98100
Assert.That(parts[0].IsBackgroundColor, Is.EqualTo(false));
@@ -142,7 +144,12 @@ public void Should_get_parsed_data_for_print_json_packet()
142144
Assert.That(parts[9].Color, Is.EqualTo(Color.Blue));
143145
Assert.That(parts[9].IsBackgroundColor, Is.EqualTo(false));
144146
Assert.That(parts[9].Type, Is.EqualTo(MessagePartType.Entrance));
145-
}
147+
148+
Assert.That(parts[10].Text, Is.EqualTo("Text11"));
149+
Assert.That(parts[10].Color, Is.EqualTo(Color.Salmon));
150+
Assert.That(parts[10].IsBackgroundColor, Is.EqualTo(false));
151+
Assert.That(parts[10].Type, Is.EqualTo(MessagePartType.HintStatus));
152+
}
146153

147154
[Test]
148155
public void Should_mark_local_player_as_magenta()
@@ -1032,6 +1039,43 @@ public void ItemSendLogMessage_for_group_receiver_should_be_related_to_active_pl
10321039
Assert.That(logMessage.IsRelatedToActivePlayer, Is.True);
10331040
}
10341041

1042+
[Test]
1043+
public void Should_not_crash_on_parsing_unknown_message_type()
1044+
{
1045+
var socket = Substitute.For<IArchipelagoSocketHelper>();
1046+
var itemInfoResolver = Substitute.For<IItemInfoResolver>();
1047+
var players = Substitute.For<IPlayerHelper>();
1048+
var connectionInfo = Substitute.For<IConnectionInfoProvider>();
1049+
1050+
var sut = new MessageLogHelper(socket, itemInfoResolver, players, connectionInfo);
1051+
1052+
ChatLogMessage logMessage = null;
1053+
1054+
sut.OnMessageReceived += (message) =>
1055+
logMessage = message as ChatLogMessage;
1056+
1057+
1058+
var packet = new ChatPrintJsonPacket
1059+
{
1060+
Data = new[] {
1061+
new JsonMessagePart { Type = null, Text = "Some unknown typed text" }, // add invallid type..
1062+
},
1063+
Team = 0,
1064+
Slot = 2,
1065+
Message = "I dont know",
1066+
MessageType = JsonMessageType.Chat
1067+
};
1068+
1069+
Assert.DoesNotThrow(() =>
1070+
{
1071+
socket.PacketReceived += Raise.Event<ArchipelagoSocketHelperDelagates.PacketReceivedHandler>(packet);
1072+
1073+
});
1074+
1075+
Assert.That(logMessage, Is.Not.Null);
1076+
Assert.That(logMessage.ToString(), Is.EqualTo("Some unknown typed text"));
1077+
}
1078+
10351079
#if NET471 || NET472
10361080
static Dictionary<int, ReadOnlyCollection<PlayerInfo>> GetPlayerCollection(IList<PlayerInfo> playerInfos) =>
10371081
new Dictionary<int, ReadOnlyCollection<PlayerInfo>>(

Archipelago.MultiClient.Net.Tests/MessageParsingFixture.cs

+17
Original file line numberDiff line numberDiff line change
@@ -73,5 +73,22 @@ public void Should_handle_multiple_packets_in_same_message()
7373
Assert.That(packets.OfType<RetrievedPacket>().Count(), Is.EqualTo(1));
7474
Assert.That(packets.OfType<LocationInfoPacket>().Count(), Is.EqualTo(1));
7575
}
76+
77+
[Test, Ignore("The lib currently not future compatible as it does not handle new types it does not know")]
78+
public void Should_not_throw_on_unknown_message_part_type()
79+
{
80+
const string message =
81+
@"[{""cmd"":""PrintJSON"",""data"":[{""text"":""[Hint]: ""},{""text"":""(some new type of element)"",""new_value"":1337,""type"":""other_type""}],""type"":""Hint"",""receiving"":1,""item"":{""item"":1337116,""location"":1337109,""player"":2,""flags"":1,""class"":""NetworkItem""},""found"":false}]";
82+
83+
List<ArchipelagoPacketBase> packets = null;
84+
Assert.DoesNotThrow(() =>
85+
{
86+
packets = JsonConvert.DeserializeObject<List<ArchipelagoPacketBase>>(message, Converter);
87+
});
88+
89+
Assert.That(packets, Is.Not.Null);
90+
Assert.That(packets.Count, Is.EqualTo(1));
91+
Assert.That(packets.OfType<HintPrintJsonPacket>().Count(), Is.EqualTo(1));
92+
}
7693
}
7794
}

Archipelago.MultiClient.Net/Archipelago.MultiClient.Net.csproj

+4-4
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,16 @@
33
<TargetFrameworks>net35;net40;net45;netstandard2.0;net6.0</TargetFrameworks>
44
<AssemblyTitle>Archipelago.MultiClient.Net</AssemblyTitle>
55
<Product>Archipelago.MultiClient.Net</Product>
6-
<Copyright>Copyright © 2024</Copyright>
6+
<Copyright>Copyright © 2025</Copyright>
77
<OutputPath>bin\$(Configuration)\</OutputPath>
88
<Description>A client library for use with .NET based prog-langs for interfacing with Archipelago hosts.</Description>
99
<PackageProjectUrl>https://github.com/ArchipelagoMW/Archipelago.MultiClient.Net</PackageProjectUrl>
1010
<PackageReadmeFile>README.md</PackageReadmeFile>
1111
<RepositoryUrl>https://github.com/ArchipelagoMW/Archipelago.MultiClient.Net</RepositoryUrl>
1212
<RepositoryType>git</RepositoryType>
13-
<AssemblyVersion>6.4.0.0</AssemblyVersion>
14-
<FileVersion>6.4.0.0</FileVersion>
15-
<Version>6.4.0</Version>
13+
<AssemblyVersion>6.5.0.0</AssemblyVersion>
14+
<FileVersion>6.5.0.0</FileVersion>
15+
<Version>6.5.0</Version>
1616
<PackageLicenseExpression>MIT</PackageLicenseExpression>
1717
<PackageRequireLicenseAcceptance>False</PackageRequireLicenseAcceptance>
1818
<PackageIcon>blue-icon.png</PackageIcon>

Archipelago.MultiClient.Net/Enums/JsonMessagePartType.cs

+7-2
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,11 @@ public enum JsonMessagePartType
4848
/// <summary>
4949
/// Regular text that should be colored. Only type that will contain color data.
5050
/// </summary>
51-
Color
52-
}
51+
Color,
52+
53+
/// <summary>
54+
/// The HintStatus of the hint
55+
/// </summary>
56+
HintStatus,
57+
}
5358
}

Archipelago.MultiClient.Net/Helpers/MessageLogHelper.cs

+4-1
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,8 @@ static IEnumerable<PrintJsonPacket> SplitPacketsPerLine(PrintJsonPacket printJso
149149
Type = part.Type,
150150
Color = part.Color,
151151
Flags = part.Flags,
152-
Player = part.Player
152+
Player = part.Player,
153+
HintStatus = part.HintStatus
153154
});
154155

155156
if (i < (lines.Length -1))
@@ -303,6 +304,8 @@ MessagePart GetMessagePart(JsonMessagePart part)
303304
return new LocationMessagePart(players, itemInfoResolver, part);
304305
case JsonMessagePartType.EntranceName:
305306
return new EntranceMessagePart(part);
307+
case JsonMessagePartType.HintStatus:
308+
return new HintStatusMessagePart(part);
306309
default:
307310
return new MessagePart(MessagePartType.Text, part);
308311
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
using Archipelago.MultiClient.Net.Enums;
2+
using Archipelago.MultiClient.Net.Models;
3+
4+
namespace Archipelago.MultiClient.Net.MessageLog.Parts
5+
{
6+
/// <summary>
7+
/// Part of a LogMessage that contains information about the entrance
8+
/// </summary>
9+
/// <seealso cref="T:Archipelago.MultiClient.Net.MessageLog.Parts.MessagePart"/>
10+
public class HintStatusMessagePart : MessagePart
11+
{
12+
internal HintStatusMessagePart(JsonMessagePart messagePart) : base(MessagePartType.HintStatus, messagePart)
13+
{
14+
Text = messagePart.Text;
15+
16+
switch (messagePart.HintStatus)
17+
{
18+
case HintStatus.Found:
19+
Color = Color.Green;
20+
break;
21+
case HintStatus.Unspecified:
22+
Color = Color.White;
23+
break;
24+
case HintStatus.NoPriority:
25+
Color = Color.SlateBlue;
26+
break;
27+
case HintStatus.Avoid:
28+
Color = Color.Salmon;
29+
break;
30+
case HintStatus.Priority:
31+
Color = Color.Plum;
32+
break;
33+
}
34+
}
35+
}
36+
}

Archipelago.MultiClient.Net/MessageLog/Parts/MessagePartType.cs

+3-1
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ public enum MessagePartType
1414
/// <inheritdoc cref="T:Archipelago.MultiClient.Net.MessageLog.Parts.LocationMessagePart"/>
1515
Location,
1616
/// <inheritdoc cref="T:Archipelago.MultiClient.Net.MessageLog.Parts.EntranceMessagePart"/>
17-
Entrance
17+
Entrance,
18+
/// <inheritdoc cref="T:Archipelago.MultiClient.Net.MessageLog.Parts.HintStatusMessagePart"/>
19+
HintStatus
1820
}
1921
}

Archipelago.MultiClient.Net/Models/JsonMessagePart.cs

+4-1
Original file line numberDiff line numberDiff line change
@@ -23,5 +23,8 @@ public class JsonMessagePart
2323

2424
[JsonProperty("flags")]
2525
public ItemFlags? Flags { get; set; }
26-
}
26+
27+
[JsonProperty("hint_status")]
28+
public HintStatus? HintStatus { get; set; }
29+
}
2730
}

0 commit comments

Comments
 (0)