Exemplo n.º 1
0
        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);
                        }
        }