Initial commit: Client Doc docs Server Tools
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
using System.Net;
|
||||
using System.Net.Sockets;
|
||||
using System.Threading.Tasks;
|
||||
using Xunit;
|
||||
using XWorld.Framework.Protocol;
|
||||
using XWorld.Server.Gateway;
|
||||
|
||||
namespace XWorld.Server.Gateway.Tests
|
||||
{
|
||||
public class GameServerHostDiscoveryTests
|
||||
{
|
||||
[Fact]
|
||||
public async Task HostWithoutToken_NoResponder()
|
||||
{
|
||||
var host = new GameServerHost();
|
||||
await host.StartAsync(TestGames.Root, tickIntervalMs: 50);
|
||||
try { Assert.Equal(0, host.DevDiscoveryPort); }
|
||||
finally { await host.StopAsync(); }
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task HostWithToken_AnswersDiscovery_AdvertisesWsAndCdn()
|
||||
{
|
||||
var host = new GameServerHost();
|
||||
await host.StartAsync(TestGames.Root, tickIntervalMs: 50,
|
||||
devDiscoveryToken: "secret",
|
||||
advertiseResourceBaseUrl: "http://192.168.1.50:15081/minigame/",
|
||||
devDiscoveryPort: 0);
|
||||
try
|
||||
{
|
||||
Assert.NotEqual(0, host.DevDiscoveryPort);
|
||||
|
||||
using var client = new UdpClient(AddressFamily.InterNetwork);
|
||||
byte[] q = DevDiscoveryCodec.EncodeQuery(new DevDiscoveryQuery
|
||||
{
|
||||
ProtoVersion = DevDiscovery.ProtoVersion,
|
||||
Nonce = 3,
|
||||
Token = "secret",
|
||||
});
|
||||
await client.SendAsync(q, q.Length, new IPEndPoint(IPAddress.Loopback, host.DevDiscoveryPort));
|
||||
|
||||
var recv = client.ReceiveAsync();
|
||||
var done = await Task.WhenAny(recv, Task.Delay(2000));
|
||||
Assert.Same(recv, done);
|
||||
UdpReceiveResult result = await recv;
|
||||
Assert.True(DevDiscoveryCodec.TryDecodeReply(result.Buffer, out var reply));
|
||||
Assert.Equal(host.WsBaseUrl + "/ws", reply.GatewayUrl);
|
||||
Assert.Equal("http://192.168.1.50:15081/minigame/", reply.ResourceBaseUrl);
|
||||
}
|
||||
finally { await host.StopAsync(); }
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user