diff --git a/Tests/Program.cs b/Tests/Program.cs index 8744024..1dbc72e 100644 --- a/Tests/Program.cs +++ b/Tests/Program.cs @@ -65,6 +65,23 @@ try $"Welcome reports security level {level} and server version {serverVersion}"); } + { + // Server-Browser der Mod: Info endet mit Programmversion + Sicherheitsstufe (nach Profil und Spielernamen) + byte[] info = await TestClient.QueryInfo(); + string infoVersion = ""; + int infoLevel = -1; + if (info != null) + { + using var ir = new BinaryReader(new MemoryStream(info)); + ir.ReadString(); ir.ReadString(); ir.ReadInt32(); ir.ReadInt32(); ir.ReadString(); + ir.ReadBoolean(); ir.ReadString(); ir.ReadInt32(); + int names = ir.ReadInt32(); + for (int i = 0; i < names; i++) ir.ReadString(); + infoVersion = ir.ReadString(); + infoLevel = ir.ReadInt32(); + } + Check(infoLevel == GameServer.SecurityLevel && infoVersion == Updater.CurrentVersion, $"Info query reports server {infoVersion}, security level {infoLevel}"); + } Console.WriteLine("== Ping"); alice.Send(MsgType.Ping, BitConverter.GetBytes(12.5f)); var pong = await alice.WaitFor(MsgType.Pong); @@ -864,6 +881,17 @@ sealed class TestClient public string RejectReason; public Dictionary Files = new(); + /// Server-Browser-Abfrage (MsgType.Info) wie in der Mod. + public static async Task QueryInfo() + { + var c = new TestClient { tcp = new TcpClient() }; + await c.tcp.ConnectAsync("127.0.0.1", Port); + c.stream = c.tcp.GetStream(); + _ = Task.Run(c.ReadLoop); + c.Send(MsgType.Info, Array.Empty()); + return await c.WaitFor(MsgType.InfoReply); + } + public static async Task Join(string name, ulong steamId, byte[] ticket, bool expectReject = false) { var c = new TestClient { tcp = new TcpClient() };