Пример #1
0
        /// <summary>
        /// Sets up listener on the given end point.
        /// </summary>
        /// <param name="endPoint"></param>
        public void Listen(IPEndPoint endPoint)
        {
            this.LocalEndPoint = endPoint;

            _acceptor = new TcpConnectionAcceptor <Connection>(this.LocalEndPoint);
            _acceptor.ConnectionAccepted += this.OnConnectionAccepted;
            _acceptor.Listen();
        }
Пример #2
0
        public void Listen()
        {
            var acceptor = new TcpConnectionAcceptor <TestConnection>();

            acceptor.Listen();
            Assert.Equal("0.0.0.0:" + acceptor.LocalEndPoint.Port, acceptor.Address);
            acceptor.Stop();

            acceptor = new TcpConnectionAcceptor <TestConnection>(19489);
            acceptor.Listen();
            Assert.Equal("0.0.0.0:19489", acceptor.Address);
            acceptor.Stop();

            acceptor = new TcpConnectionAcceptor <TestConnection>("127.0.0.1", 27385);
            acceptor.Listen();
            Assert.Equal("127.0.0.1:27385", acceptor.Address);
            acceptor.Stop();

            acceptor = new TcpConnectionAcceptor <TestConnection>(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 39571));
            acceptor.Listen();
            Assert.Equal("127.0.0.1:39571", acceptor.Address);
            acceptor.Stop();
        }
Пример #3
0
        public void AcceptingConnections()
        {
            var connections = new List <TestConnection>();
            var exceptions  = new List <Exception>();

            var acceptor = new TcpConnectionAcceptor <TestConnection>();

            acceptor.ConnectionAccepted += (conn => connections.Add(conn));
            acceptor.AcceptionException += (ex => exceptions.Add(ex));
            acceptor.Listen();

            var socket1 = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            var socket2 = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

            socket1.Connect("127.0.0.1", acceptor.LocalEndPoint.Port);
            socket2.Connect("127.0.0.1", acceptor.LocalEndPoint.Port);

            // Wait a moment for the events to fire.
            Wait(50);

            Assert.Equal(true, socket1.Connected);
            Assert.Equal(true, socket2.Connected);

            if (exceptions.Count != 0)
            {
                throw exceptions[0];
            }

            Assert.Equal(2, connections.Count);

            foreach (var conn in connections)
            {
                conn.Close();
            }

            acceptor.Stop();
        }
Пример #4
0
        public void DataExchange()
        {
            var connections = new List <TestConnection>();
            var exceptions  = new List <Exception>();

            var acceptor = new TcpConnectionAcceptor <TestConnection>();

            acceptor.ConnectionAccepted += (conn => connections.Add(conn));
            acceptor.AcceptionException += (ex => exceptions.Add(ex));
            acceptor.Listen();

            var socket1 = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            var socket2 = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

            socket1.Connect("127.0.0.1", acceptor.LocalEndPoint.Port);
            socket2.Connect("127.0.0.1", acceptor.LocalEndPoint.Port);

            Wait(50);

            var message1 = new byte[] { 1, 3, 5, 7 };
            var message2 = new byte[] { 8, 52, 45, 6 };
            var message3 = Encoding.UTF8.GetBytes("~foobar~");

            // Test receiving messages
            var framer = new LengthPrefixFramer(50);

            socket1.Send(framer.Frame(message1));
            socket1.Send(framer.Frame(message2));
            socket2.Send(framer.Frame(message3));

            Wait(50);

            Assert.Equal(2, connections[0].Messages.Count);
            Assert.Equal(1, connections[1].Messages.Count);

            Assert.Equal(message1, connections[0].Messages[0]);
            Assert.Equal(message2, connections[0].Messages[1]);
            Assert.Equal(message3, connections[1].Messages[0]);

            // Test receiving invalid message
            Exception receiveException = null;

            connections[0].ReceiveException += ((conn, ex) => receiveException = ex);
            socket1.Send(new byte[] { 0xFF, 0, 0, 0 });

            Wait(50);

            Assert.NotEqual(null, receiveException);
            Assert.IsType <InvalidMessageSizeException>(receiveException);

            // Test sending message
            var message4 = new byte[] { 9, 8, 7, 6 };

            connections[1].Send(message4);

            var buffer = new byte[10];
            var len    = socket2.Receive(buffer);

            Console.WriteLine(BitConverter.ToString(buffer));

            Assert.Equal(8, len);
            Assert.Equal(new byte[] { 8, 0, 0, 0, 9, 8, 7, 6, 0, 0 }, buffer);

            // Close everything
            foreach (var conn in connections)
            {
                conn.Close();
            }

            acceptor.Stop();
        }