Beispiel #1
0
        public void IPC_TearDown()
        {
            IPCManager.Instance.Destroy();

            Driver.Dispose();
            RemoteDriver.Dispose();
        }
Beispiel #2
0
        public void AcceptInJobWorks()
        {
            var serverDriver = new LocalNetworkDriver(new NetworkDataStreamParameter {
                size = 64
            });

            serverDriver.Bind(IPCManager.Instance.CreateEndPoint());
            serverDriver.Listen();
            var clientDriver = new LocalNetworkDriver(new NetworkDataStreamParameter {
                size = 64
            });

            /*var clientToServer =*/ clientDriver.Connect(serverDriver.LocalEndPoint());
            clientDriver.ScheduleUpdate().Complete();

            var serverToClient = new NativeArray <NetworkConnection>(1, Allocator.TempJob);
            var acceptJob      = new AcceptJob {
                driver = serverDriver, connections = serverToClient
            };

            Assert.IsFalse(serverToClient[0].IsCreated);
            acceptJob.Schedule(serverDriver.ScheduleUpdate()).Complete();
            Assert.IsTrue(serverToClient[0].IsCreated);

            serverToClient.Dispose();
            clientDriver.Dispose();
            serverDriver.Dispose();
        }
        public void DisconnectFromARemoteEndPoint()
        {
            using (var host = new LocalDriverHelper(default(NetworkEndPoint)))
            {
                host.Host();
                var driver = new LocalNetworkDriver(new NetworkBitStreamParameter {
                    size = 64
                });

                // Need to be connected in order to be able to send a disconnect packet.
                NetworkConnection connectionId = driver.Connect(host.Address);
                Assert.True(connectionId != default(NetworkConnection));

                var local = driver.LocalEndPoint();
                host.Assert_GotConnectionRequest(local, true);

                // Pump so we get the accept message back.
                driver.Update();
                driver.Disconnect(connectionId);

                host.Assert_GotDisconnectionRequest(local);

                driver.Dispose();
            }
        }
        public void SendDataToRemoteEndPoint()
        {
            using (var host = new LocalDriverHelper(default(NetworkEndPoint)))
                using (var stream = new DataStreamWriter(64, Allocator.Persistent))
                {
                    host.Host();
                    var driver = new LocalNetworkDriver(new NetworkDataStreamParameter {
                        size = 64
                    });

                    // Need to be connected in order to be able to send a disconnect packet.
                    NetworkConnection connectionId = driver.Connect(host.Address);
                    Assert.True(connectionId != default(NetworkConnection));
                    driver.ScheduleUpdate().Complete();
                    var local = driver.LocalEndPoint();
                    host.Assert_GotConnectionRequest(local, true);

                    NetworkConnection con;
                    DataStreamReader  slice;
                    // Pump so we get the accept message back.
                    driver.ScheduleUpdate().Complete();
                    Assert.AreEqual(NetworkEvent.Type.Connect, driver.PopEvent(out con, out slice));

                    stream.Clear();
                    var data = Encoding.ASCII.GetBytes("data to send");
                    stream.Write(data);
                    driver.Send(NetworkPipeline.Null, connectionId, stream);
                    driver.ScheduleUpdate().Complete();

                    host.Assert_GotDataRequest(local, data);

                    driver.Dispose();
                }
        }
        public void DisconnectFromARemoteEndPoint()
        {
            using (var host = new LocalDriverHelper(default(NetworkEndPoint)))
            {
                host.Host();
                var driver = new LocalNetworkDriver(new NetworkDataStreamParameter {
                    size = 64
                });

                // Need to be connected in order to be able to send a disconnect packet.
                NetworkConnection connectionId = driver.Connect(host.Address);
                Assert.True(connectionId != default(NetworkConnection));
                driver.ScheduleUpdate().Complete();

                var local = driver.LocalEndPoint();
                host.Assert_GotConnectionRequest(local, true);

                NetworkConnection con;
                DataStreamReader  slice;
                // Pump so we get the accept message back.
                driver.ScheduleUpdate().Complete();
                Assert.AreEqual(NetworkEvent.Type.Connect, driver.PopEvent(out con, out slice));
                driver.Disconnect(connectionId);
                driver.ScheduleUpdate().Complete();

                host.Assert_GotDisconnectionRequest(local);

                driver.Dispose();
            }
        }
Beispiel #6
0
        public void SendInJobWorks()
        {
            var serverDriver = new LocalNetworkDriver(new NetworkDataStreamParameter {
                size = 64
            });

            serverDriver.Bind(IPCManager.Instance.CreateEndPoint());
            serverDriver.Listen();
            var clientDriver = new LocalNetworkDriver(new NetworkDataStreamParameter {
                size = 64
            });
            var clientToServer = clientDriver.Connect(serverDriver.LocalEndPoint());

            WaitForConnected(clientDriver, serverDriver, clientToServer);
            var sendJob = new SendJob {
                driver = clientDriver, connection = clientToServer
            };

            clientDriver.ScheduleUpdate(sendJob.Schedule()).Complete();
            var serverToClient = serverDriver.Accept();

            serverDriver.ScheduleUpdate().Complete();
            DataStreamReader strmReader;

            Assert.AreEqual(NetworkEvent.Type.Data, serverToClient.PopEvent(serverDriver, out strmReader));
            var ctx = default(DataStreamReader.Context);

            Assert.AreEqual(42, strmReader.ReadInt(ref ctx));
            clientDriver.Dispose();
            serverDriver.Dispose();
        }
        public void SendDataToRemoteEndPoint()
        {
            using (var host = new LocalDriverHelper(default(NetworkEndPoint)))
                using (var stream = new BitStream(64, Allocator.Persistent))
                {
                    host.Host();
                    var driver = new LocalNetworkDriver(new NetworkBitStreamParameter {
                        size = 64
                    });

                    // Need to be connected in order to be able to send a disconnect packet.
                    NetworkConnection connectionId = driver.Connect(host.Address);
                    Assert.True(connectionId != default(NetworkConnection));

                    var local = driver.LocalEndPoint();
                    host.Assert_GotConnectionRequest(local, true);

                    // Pump so we get the accept message back.
                    driver.Update();

                    stream.Reset();
                    var data = Encoding.ASCII.GetBytes("data to send");
                    stream.Write(data);
                    driver.Send(connectionId, stream);

                    host.Assert_GotDataRequest(local, data);

                    driver.Dispose();
                }
        }
        public void InitializeAndDestroyDriver()
        {
            var driver = new LocalNetworkDriver(new NetworkBitStreamParameter {
                size = 64
            });

            driver.Dispose();
        }
Beispiel #9
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 BindDriverToAEndPoint()
        {
            var driver = new LocalNetworkDriver(new NetworkBitStreamParameter {
                size = 64
            });

            driver.Bind(IPCManager.Instance.CreateEndPoint("host"));
            driver.Dispose();
        }
Beispiel #11
0
        public void ScheduleUpdateWorks()
        {
            var driver = new LocalNetworkDriver(new NetworkDataStreamParameter {
                size = 64
            });
            var updateHandle = driver.ScheduleUpdate();

            updateHandle.Complete();
            driver.Dispose();
        }
Beispiel #12
0
        public void ScheduleUpdateWithMissingDependencyThrowsException()
        {
            var driver = new LocalNetworkDriver(new NetworkDataStreamParameter {
                size = 64
            });
            var updateHandle = driver.ScheduleUpdate();

            Assert.Throws <InvalidOperationException>(() => { driver.ScheduleUpdate().Complete(); });
            updateHandle.Complete();
            driver.Dispose();
        }
        public void ListenOnDriver()
        {
            var driver = new LocalNetworkDriver(new NetworkBitStreamParameter {
                size = 64
            });

            // Make sure we Bind before we Listen.
            driver.Bind(IPCManager.Instance.CreateEndPoint("host"));
            driver.Listen();

            Assert.True(driver.Listening);
            driver.Dispose();
        }
        public void ConnectToARemoteEndPoint()
        {
            using (var host = new LocalDriverHelper(default(NetworkEndPoint)))
            {
                host.Host();
                var driver = new LocalNetworkDriver(new NetworkBitStreamParameter {
                    size = 64
                });

                NetworkConnection connectionId = driver.Connect(host.Address);
                Assert.True(connectionId != default(NetworkConnection));

                var local = driver.LocalEndPoint();
                host.Assert_GotConnectionRequest(local);

                driver.Dispose();
            }
        }
        public void AcceptNewConnectionsOnDriver()
        {
            var driver = new LocalNetworkDriver(new NetworkBitStreamParameter {
                size = 64
            });

            // Make sure we Bind before we Listen.
            driver.Bind(IPCManager.Instance.CreateEndPoint("host"));
            driver.Listen();

            Assert.True(driver.Listening);

            NetworkConnection connection;

            while ((connection = driver.Accept()) != default(NetworkConnection))
            {
                //Assert.True(connectionId != NetworkParameterConstants.InvalidConnectionId);
            }
            driver.Dispose();
        }
Beispiel #16
0
        public void ReceiveInJobWorks()
        {
            var serverDriver = new LocalNetworkDriver(new NetworkDataStreamParameter {
                size = 64
            });

            serverDriver.Bind(IPCManager.Instance.CreateEndPoint());
            serverDriver.Listen();
            var clientDriver = new LocalNetworkDriver(new NetworkDataStreamParameter {
                size = 64
            });
            var clientToServer = clientDriver.Connect(serverDriver.LocalEndPoint());

            WaitForConnected(clientDriver, serverDriver, clientToServer);
            var strmWriter = new DataStreamWriter(4, Allocator.Temp);

            strmWriter.Write(42);
            clientToServer.Send(clientDriver, strmWriter);
            strmWriter.Dispose();
            clientDriver.ScheduleUpdate().Complete();

            var serverToClient = new NativeArray <NetworkConnection>(1, Allocator.TempJob);
            var result         = new NativeArray <int>(1, Allocator.TempJob);
            var recvJob        = new ReceiveJob {
                driver = serverDriver, connections = serverToClient, result = result
            };

            Assert.AreNotEqual(42, result[0]);
            var acceptJob = new AcceptJob {
                driver = serverDriver, connections = serverToClient
            };

            recvJob.Schedule(serverDriver.ScheduleUpdate(acceptJob.Schedule())).Complete();
            Assert.AreEqual(42, result[0]);

            result.Dispose();
            serverToClient.Dispose();
            clientDriver.Dispose();
            serverDriver.Dispose();
        }
Beispiel #17
0
        public void DataStremReaderIsOnlyUsableUntilUpdate()
        {
            var serverDriver = new LocalNetworkDriver(new NetworkDataStreamParameter {
                size = 64
            });

            serverDriver.Bind(IPCManager.Instance.CreateEndPoint());
            serverDriver.Listen();
            var clientDriver = new LocalNetworkDriver(new NetworkDataStreamParameter {
                size = 64
            });
            var clientToServer = clientDriver.Connect(serverDriver.LocalEndPoint());

            WaitForConnected(clientDriver, serverDriver, clientToServer);
            var strmWriter = new DataStreamWriter(4, Allocator.Temp);

            strmWriter.Write(42);
            clientToServer.Send(clientDriver, strmWriter);
            strmWriter.Dispose();
            clientDriver.ScheduleUpdate().Complete();
            var serverToClient = serverDriver.Accept();

            serverDriver.ScheduleUpdate().Complete();
            DataStreamReader strmReader;

            Assert.AreEqual(NetworkEvent.Type.Data, serverToClient.PopEvent(serverDriver, out strmReader));
            var ctx = default(DataStreamReader.Context);

            Assert.AreEqual(42, strmReader.ReadInt(ref ctx));
            ctx = default(DataStreamReader.Context);
            Assert.AreEqual(42, strmReader.ReadInt(ref ctx));
            serverDriver.ScheduleUpdate().Complete();
            ctx = default(DataStreamReader.Context);
            Assert.Throws <InvalidOperationException>(() => { strmReader.ReadInt(ref ctx); });
            clientDriver.Dispose();
            serverDriver.Dispose();
        }
Beispiel #18
0
 public void Dispose()
 {
     m_Driver.Dispose();
 }
 public void Dispose()
 {
     m_LocalDriver.Dispose();
     m_LocalBitStream.Dispose();
 }
Beispiel #20
0
        public void SendReceiveWithPipelineInParallelJobWorks()
        {
            var timeoutParam = new NetworkConfigParameter
            {
                connectTimeoutMS    = NetworkParameterConstants.ConnectTimeoutMS,
                maxConnectAttempts  = NetworkParameterConstants.MaxConnectAttempts,
                disconnectTimeoutMS = 90 * 1000
            };
            var serverDriver = new LocalNetworkDriver(new NetworkDataStreamParameter {
                size = 64
            }, timeoutParam);
            var serverPipeline = serverDriver.CreatePipeline(typeof(UnreliableSequencedPipelineStage));

            serverDriver.Bind(IPCManager.Instance.CreateEndPoint());
            serverDriver.Listen();
            var clientDriver0 = new LocalNetworkDriver(new NetworkDataStreamParameter {
                size = 64
            }, timeoutParam);
            var clientDriver1 = new LocalNetworkDriver(new NetworkDataStreamParameter {
                size = 64
            }, timeoutParam);
            var client0Pipeline = clientDriver0.CreatePipeline(typeof(UnreliableSequencedPipelineStage));
            var client1Pipeline = clientDriver1.CreatePipeline(typeof(UnreliableSequencedPipelineStage));
            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, client0Pipeline, strmWriter);
            clientToServer1.Send(clientDriver1, client1Pipeline, strmWriter);
            clientDriver0.ScheduleUpdate().Complete();
            clientDriver1.ScheduleUpdate().Complete();

            var sendRecvJob = new SendReceiveWithPipelineParallelJob {
                driver = serverDriver.ToConcurrent(), connections = serverToClient, pipeline = serverPipeline
            };
            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 SendAndReceiveMessage()
        {
            using (var clientSendData = new BitStream(64, Allocator.Persistent))
            {
                BitSlice stream;
                var      serverEndpoint = IPCManager.Instance.CreateEndPoint("server");

                var serverDriver = new LocalNetworkDriver(new NetworkBitStreamParameter {
                    size = 64
                });
                serverDriver.Bind(serverEndpoint);

                serverDriver.Listen();

                var clientDriver = new LocalNetworkDriver(new NetworkBitStreamParameter {
                    size = 64
                });
                clientDriver.Bind(IPCManager.Instance.CreateEndPoint("client"));

                var clientToServerId = clientDriver.Connect(serverEndpoint);

                serverDriver.Update();

                NetworkConnection serverToClientId = serverDriver.Accept();
                Assert.That(serverToClientId != default(NetworkConnection));

                var eventId = serverDriver.PopEventForConnection(serverToClientId, out stream);
                Assert.That(eventId == NetworkEvent.Type.Connect);

                clientDriver.Update();

                eventId = clientDriver.PopEventForConnection(clientToServerId, out stream);
                Assert.That(eventId == NetworkEvent.Type.Connect);


                int    testInt       = 100;
                float  testFloat     = 555.5f;
                byte[] testByteArray = Encoding.ASCII.GetBytes("Some bytes blablabla 1111111111111111111");
                clientSendData.Write(testInt);
                clientSendData.Write(testFloat);
                clientSendData.Write(testByteArray.Length);
                clientSendData.Write(testByteArray);
                var sentBytes = clientDriver.Send(clientToServerId, clientSendData);

                // Header size is included in the sent bytes count (4 bytes overhead)
                Assert.AreEqual(clientSendData.GetBytesWritten() + 4, sentBytes);

                clientDriver.Update();
                serverDriver.Update();

                BitSlice serverReceiveBitSlice;
                eventId = serverDriver.PopEventForConnection(serverToClientId, out serverReceiveBitSlice);

                Assert.True(eventId == NetworkEvent.Type.Data);
                var receivedInt     = serverReceiveBitSlice.ReadInt();
                var receivedFloat   = serverReceiveBitSlice.ReadFloat();
                var byteArrayLength = serverReceiveBitSlice.ReadInt();
                var receivedBytes   = serverReceiveBitSlice.ReadBytesAsArray(byteArrayLength);

                Assert.True(testInt == receivedInt);
                Assert.That(Mathf.Approximately(testFloat, receivedFloat));
                Assert.AreEqual(testByteArray, receivedBytes);

                clientDriver.Dispose();
                serverDriver.Dispose();
            }
        }