public void SendReceiveInParallelJobWorks() { var serverDriver = new LocalNetworkDriver(new NetworkDataStreamParameter { size = 64 }); serverDriver.Bind(IPCManager.Instance.CreateEndPoint()); serverDriver.Listen(); var clientDriver0 = new LocalNetworkDriver(new NetworkDataStreamParameter { size = 64 }); var clientDriver1 = new LocalNetworkDriver(new NetworkDataStreamParameter { size = 64 }); var serverToClient = new NativeArray <NetworkConnection>(2, Allocator.TempJob); var strmWriter = new DataStreamWriter(4, Allocator.Temp); strmWriter.Write(42); var clientToServer0 = clientDriver0.Connect(serverDriver.LocalEndPoint()); var clientToServer1 = clientDriver1.Connect(serverDriver.LocalEndPoint()); WaitForConnected(clientDriver0, serverDriver, clientToServer0); serverToClient[0] = serverDriver.Accept(); Assert.IsTrue(serverToClient[0].IsCreated); WaitForConnected(clientDriver1, serverDriver, clientToServer1); serverToClient[1] = serverDriver.Accept(); Assert.IsTrue(serverToClient[1].IsCreated); clientToServer0.Send(clientDriver0, strmWriter); clientToServer1.Send(clientDriver1, strmWriter); strmWriter.Dispose(); clientDriver0.ScheduleUpdate().Complete(); clientDriver1.ScheduleUpdate().Complete(); var sendRecvJob = new SendReceiveParallelJob { driver = serverDriver.ToConcurrent(), connections = serverToClient }; var jobHandle = serverDriver.ScheduleUpdate(); jobHandle = sendRecvJob.Schedule(serverToClient.Length, 1, jobHandle); serverDriver.ScheduleUpdate(jobHandle).Complete(); DataStreamReader strmReader; clientDriver0.ScheduleUpdate().Complete(); Assert.AreEqual(NetworkEvent.Type.Data, clientToServer0.PopEvent(clientDriver0, out strmReader)); var ctx = default(DataStreamReader.Context); Assert.AreEqual(43, strmReader.ReadInt(ref ctx)); clientDriver1.ScheduleUpdate().Complete(); Assert.AreEqual(NetworkEvent.Type.Data, clientToServer1.PopEvent(clientDriver1, out strmReader)); ctx = default(DataStreamReader.Context); Assert.AreEqual(43, strmReader.ReadInt(ref ctx)); serverToClient.Dispose(); clientDriver0.Dispose(); clientDriver1.Dispose(); serverDriver.Dispose(); }
public void SendReceiveInParallelJobWorks() { NativeArray <NetworkConnection> serverToClient; using (var serverDriver = new LocalNetworkDriver(new NetworkDataStreamParameter { size = 64 })) using (var clientDriver0 = new LocalNetworkDriver(new NetworkDataStreamParameter { size = 64 })) using (var clientDriver1 = new LocalNetworkDriver(new NetworkDataStreamParameter { size = 64 })) using (serverToClient = new NativeArray <NetworkConnection>(2, Allocator.Persistent)) { serverDriver.Bind(IPCManager.Instance.CreateEndPoint()); serverDriver.Listen(); var strmWriter = new DataStreamWriter(4, Allocator.Temp); strmWriter.Write(42); var clientToServer0 = clientDriver0.Connect(serverDriver.LocalEndPoint()); var clientToServer1 = clientDriver1.Connect(serverDriver.LocalEndPoint()); WaitForConnected(clientDriver0, serverDriver, clientToServer0); serverToClient[0] = serverDriver.Accept(); Assert.IsTrue(serverToClient[0].IsCreated); WaitForConnected(clientDriver1, serverDriver, clientToServer1); serverToClient[1] = serverDriver.Accept(); Assert.IsTrue(serverToClient[1].IsCreated); clientToServer0.Send(clientDriver0, strmWriter); clientToServer1.Send(clientDriver1, strmWriter); clientDriver0.ScheduleUpdate().Complete(); clientDriver1.ScheduleUpdate().Complete(); var sendRecvJob = new SendReceiveParallelJob { driver = serverDriver.ToConcurrent(), connections = serverToClient }; var jobHandle = serverDriver.ScheduleUpdate(); jobHandle = sendRecvJob.Schedule(serverToClient.Length, 1, jobHandle); serverDriver.ScheduleUpdate(jobHandle).Complete(); AssertDataReceived(serverDriver, serverToClient, clientDriver0, clientToServer0, 43, true); AssertDataReceived(serverDriver, serverToClient, clientDriver1, clientToServer1, 43, true); } }