fix: improve minigame reconnect flow

This commit is contained in:
ud18010
2026-07-29 19:30:50 +08:00
parent 6a5e534d00
commit 42c3874d82
21 changed files with 979 additions and 52 deletions
@@ -18,10 +18,11 @@ namespace XWorld.Framework.Tests
[Fact]
public void MatchRequest_RoundTrips()
{
var m = new MatchRequestMsg { GameId = "rock_paper_scissors", Version = 3 };
var m = new MatchRequestMsg { GameId = "rock_paper_scissors", Version = 3, RequestId = 42 };
var d = MatchRequestMsg.Decode(m.Encode());
Assert.Equal(m.GameId, d.GameId);
Assert.Equal(m.Version, d.Version);
Assert.Equal(m.RequestId, d.RequestId);
}
[Fact]
@@ -29,9 +30,11 @@ namespace XWorld.Framework.Tests
{
var m = new MatchFoundMsg
{
GameId = "rps",
RoomId = "room-42",
Version = 3,
SelfPlayerId = 1001,
RequestId = 99,
Players =
{
new PlayerInfo
@@ -55,9 +58,11 @@ namespace XWorld.Framework.Tests
},
};
var d = MatchFoundMsg.Decode(m.Encode());
Assert.Equal("rps", d.GameId);
Assert.Equal("room-42", d.RoomId);
Assert.Equal(3, d.Version);
Assert.Equal(1001, d.SelfPlayerId);
Assert.Equal(99, d.RequestId);
Assert.Equal(2, d.Players.Count);
Assert.Equal(1001, d.Players[0].PlayerId);
Assert.Equal("Alice", d.Players[0].Name);
@@ -101,10 +106,30 @@ namespace XWorld.Framework.Tests
[Fact]
public void Error_RoundTrips()
{
var m = new ErrorMsg { Code = 404, Message = "version mismatch" };
var m = new ErrorMsg { Code = 404, Message = "version mismatch", RequestId = 7 };
var d = ErrorMsg.Decode(m.Encode());
Assert.Equal(404, d.Code);
Assert.Equal("version mismatch", d.Message);
Assert.Equal(7, d.RequestId);
}
[Fact]
public void MatchControl_RoundTrips()
{
var m = new MatchControlMsg { RequestId = 123 };
var d = MatchControlMsg.Decode(m.Encode());
Assert.Equal(123, d.RequestId);
Assert.Equal(0, MatchControlMsg.Decode(System.Array.Empty<byte>()).RequestId);
}
[Fact]
public void MatchAssigned_RoundTrips()
{
var m = new MatchAssignedMsg { GameId = "rps", Version = 2, RequestId = 88 };
var d = MatchAssignedMsg.Decode(m.Encode());
Assert.Equal("rps", d.GameId);
Assert.Equal(2, d.Version);
Assert.Equal(88, d.RequestId);
}
[Fact]
@@ -141,6 +166,7 @@ namespace XWorld.Framework.Tests
Assert.Equal((ushort)7, (ushort)FrameworkOpcode.Error);
Assert.Equal((ushort)16, (ushort)FrameworkOpcode.WorldChatSend);
Assert.Equal((ushort)17, (ushort)FrameworkOpcode.WorldChatMessage);
Assert.Equal((ushort)18, (ushort)FrameworkOpcode.MatchCancel);
}
[Fact]
@@ -209,6 +235,7 @@ namespace XWorld.Framework.Tests
MatchFoundMsg d = MatchFoundMsg.Decode(w.ToArray());
Assert.Equal("legacy-room", d.RoomId);
Assert.Equal(0, d.RequestId);
Assert.Equal(2, d.Players.Count);
Assert.Equal(1001, d.Players[0].PlayerId);
Assert.Equal("LegacyAlice", d.Players[0].Name);