public void Commands_TickTest() { TestTransport.Reset(); var random = new Random(9904); var serverTransport = new TestTransport("127.0.0.1", 1); var clientTransport = new TestTransport("127.0.0.1", 2); var snapshotConsumer = new NullSnapshotConsumer(); var server = new NetworkServer(serverTransport); var client = new NetworkClient(clientTransport); client.Connect("127.0.0.1:1"); server.InitializeMap((ref NetworkWriter data) => { data.WriteString("name", "TestMap"); }); server.Update(this); var sentCommands = new Dictionary <int, MyCommand>(); m_ReceivedCommands.Clear(); var RUNS = 1000; var serverTick = 0; var clientTick = 10; while (serverTick < RUNS) { server.Update(this); server.HandleClientCommands(serverTick, this); ++serverTick; server.SendData(); client.Update(this, snapshotConsumer); if (clientTick < RUNS) { client.QueueCommand(clientTick, (ref NetworkWriter writer) => { var sent = new MyCommand(); sent.intValue = random.Next(-1000, 1000); sent.boolValue = random.Next(0, 1) == 1; sent.floatValue = (float)random.NextDouble(); sentCommands.Add(clientTick, sent); sent.Serialize(ref writer); }); } ++clientTick; client.SendData(); } foreach (var sent in sentCommands) { sent.Value.AssertReplicatedCorrectly(m_ReceivedCommands[sent.Key], false); } }
public ThinClientGameWorld(GameWorld world, NetworkClient networkClient, NetworkStatisticsClient networkStatistics) { m_NetworkClient = networkClient; m_NetworkStatistics = networkStatistics; m_NullSnapshotConsumer = new NullSnapshotConsumer(); m_GameWorld = world; }
public void Events_ServerToClient_SendReliable() { TestTransport.Reset(); var serverTransport = new TestTransport("127.0.0.1", 1); var clientTransport = new TestTransport("127.0.0.1", 2); var snapshotConsumer = new NullSnapshotConsumer(); var serverCallbacks = new ServerCallbacks(this); var clientCallbacks = new ClientCallbacks(this); var server = new NetworkServer(serverTransport); var client = new NetworkClient(clientTransport); server.Update(serverCallbacks); client.Connect("127.0.0.1:1"); server.InitializeMap((ref NetworkWriter data) => { data.WriteString("name", "TestMap"); }); server.Update(serverCallbacks); server.SendData(); client.Update(clientCallbacks, snapshotConsumer); var RUNS = 1000; eventSent = 0; eventReceived = 0; lastEventSent = null; for (int i = 0; i < RUNS; ++i) { server.Update(serverCallbacks); if (eventSent == eventReceived && i < RUNS - 32) { server.QueueEvent(1, (ushort)EventType.MyEvent, true, (ref NetworkWriter writer) => { lastEventSent = new MyEvent(); lastEventSent.Serialize(ref writer); }); ++eventSent; } server.SendData(); if (i % 3 == 0) { clientTransport.DropPackages(); } client.Update(clientCallbacks, snapshotConsumer); Assert.IsTrue(eventReceived <= eventSent); client.SendData(); } Assert.AreEqual(eventSent, eventReceived); }
public void Events_ServerToClient_BroadcastUnreliable() { TestTransport.Reset(); var snapshotConsumer = new NullSnapshotConsumer(); var serverTransport = new TestTransport("127.0.0.1", 1); var server = new NetworkServer(serverTransport); var serverCallbacks = new ServerCallbacks(this); var clientCallbacks = new ClientCallbacks(this); const int NUM_CLIENTS = 3; var clientTransports = new TestTransport[NUM_CLIENTS]; var clients = new NetworkClient[NUM_CLIENTS]; for (int i = 0; i < NUM_CLIENTS; ++i) { clientTransports[i] = new TestTransport("127.0.0.1", i + 2); clients[i] = new NetworkClient(clientTransports[i]); clients[i].Connect("127.0.0.1:1"); } server.InitializeMap((ref NetworkWriter data) => { data.WriteString("name", "TestMap"); }); server.Update(serverCallbacks); var RUNS = 1000; eventSent = 0; eventReceived = 0; lastEventSent = null; for (int i = 0; i < RUNS; ++i) { server.Update(serverCallbacks); if (eventSent == eventReceived * NUM_CLIENTS && i < RUNS - 2) { server.QueueEventBroadcast((ushort)EventType.MyEvent, false, (ref NetworkWriter writer) => { lastEventSent = new MyEvent(); lastEventSent.Serialize(ref writer); }); ++eventSent; } server.SendData(); foreach (var client in clients) { client.Update(clientCallbacks, snapshotConsumer); client.SendData(); } } Assert.AreEqual(eventSent, eventReceived / NUM_CLIENTS); }