Files
2024-10-22 17:29:04 +03:00

62 lines
2.1 KiB
C#

extern alias Client;
using System.Net;
using Client::Barotrauma;
using Client::Barotrauma.Networking;
using Xunit.Abstractions;
using Option = Barotrauma.Option;
using TaskPool = Barotrauma.TaskPool;
namespace TestProject
{
/// <summary>
/// We don't join a server with fully initialized client since it's not needed,
/// and we only want to test if the server crashes or not.
/// </summary>
public class HeadlessNetworkClient
{
internal readonly ClientPeer ClientPeer;
public bool IsConnected { get; private set; }
private readonly ITestOutputHelper testOutputHelper;
public HeadlessNetworkClient(IPAddress address, int port, string password, ITestOutputHelper testOutputHelper)
{
var callbacks = new ClientPeer.Callbacks(
OnMessageReceived,
Disconnect,
InitializationComplete);
ClientPeer = new LidgrenClientPeer(new LidgrenEndpoint(address, port), callbacks, Option.None);
ClientPeer.Start();
TaskPool.Update(); // Start() adds a task to the TaskPool, so we need to update it to continue
IsConnected = false;
this.testOutputHelper = testOutputHelper;
ClientPeer.AutomaticallyAttemptedPassword = password;
}
private void InitializationComplete()
{
IsConnected = true;
testOutputHelper.WriteLine("Headless client successfully connected to server");
}
private void Disconnect(PeerDisconnectPacket packet)
{
testOutputHelper.WriteLine($"Headless client was disconnected with reason: {packet.DisconnectReason} ({packet.AdditionalInformation})");
IsConnected = false;
}
private void OnMessageReceived(IReadMessage msg)
{
ClientPacketHeader header = (ClientPacketHeader)msg.ReadByte();
testOutputHelper.WriteLine($"Headless client received message: {header}");
}
public void Update()
{
ClientPeer.Update((float)Timing.Step);
TaskPool.Update();
Timing.TotalTime += Timing.Step;
}
}
}