コード例 #1
0
        public async void Dispose()
        {
            var peer = new FeatherUdpPeer <BinaryMessage>();

            Assert.False(peer.IsDisposed);
            peer.Bind(12347);
            Assert.False(peer.IsDisposed);
            peer.Dispose();
            Assert.True(peer.IsDisposed);

            Assert.Throws <ObjectDisposedException>(() => {
                peer.SendTo(new IPEndPoint(IPAddress.Loopback, 12346), TestMessage1);
            });

            await Assert.ThrowsAsync <ObjectDisposedException>(async() => {
                await peer.SendToAsync(new IPEndPoint(IPAddress.Loopback, 12346), TestMessage1);
            });
        }
コード例 #2
0
        public void SendMessageSync()
        {
            var socket = new Socket(SocketType.Dgram, ProtocolType.Udp);

            socket.Bind(new IPEndPoint(IPAddress.Loopback, 12346));

            using (var peer = new FeatherUdpPeer <BinaryMessage>()) {
                peer.SendTo(new IPEndPoint(IPAddress.Loopback, 12346), TestMessage1);
                peer.SendTo(new IPEndPoint(IPAddress.Loopback, 12346), TestMessage2);
            }

            byte[] buf = new byte[100];
            Int32  len;

            len = socket.Receive(buf);
            Assert.Equal(TestPayload1.Length, len);
            Assert.Equal(TestPayload1, buf.Take(3));

            len = socket.Receive(buf);
            Assert.Equal(TestPayload2.Length, len);
            Assert.Equal(TestPayload2, buf.Take(3));
        }
コード例 #3
0
        public void ReceiveMessage()
        {
            var stage = 0;
            var block = new AutoResetEvent(false);

            using (var peer = new FeatherUdpPeer <BinaryMessage>()) {
                peer.OnMessageReceived += (endpoint, message) => {
                    if (stage == 0)
                    {
                        Assert.Equal(TestPayload1, message.Export().ToArray());
                        stage = 1;
                    }
                    else if (stage == 1)
                    {
                        Assert.Equal(TestPayload2, message.Export().ToArray());
                        stage = 2;
                        block.Set();
                    }
                    else
                    {
                        Assert.False(true);
                    }
                };
                peer.Bind(12348);

                using (var socket = new Socket(SocketType.Dgram, ProtocolType.Udp)) {
                    socket.SendTo(TestPayload1, new IPEndPoint(IPAddress.Loopback, 12348));
                    Thread.Sleep(10);
                    socket.SendTo(TestPayload2, new IPEndPoint(IPAddress.Loopback, 12348));
                }
            }

            block.WaitOne(1000);

            Assert.Equal(2, stage);
        }
コード例 #4
0
        static void Main(string[] args)
        {
            Console.WriteLine("What is your name?");
            var myName = Console.ReadLine();

            using (var peer = new FeatherUdpPeer <GenericMessage>()) {
                // Watch for messages to arrive
                peer.OnMessageReceived += (endpoint, message) => {
                    var name = message.ReadString();
                    var body = message.ReadString();
                    Console.WriteLine($"{name}> {body}");
                };

                // Bind socket to receive messages
                peer.Bind(12345);

                // Loop sending messages
                Console.WriteLine("Type message to send.");
                while (true)
                {
                    var body = Console.ReadLine();
                    if (body == string.Empty)
                    {
                        break;
                    }

                    // Create message
                    var message = new GenericMessage();
                    message.WriteString(myName);
                    message.WriteString(body);

                    // Broadcast message on the local network (similarly, we could send to a specific address on the internet instead)
                    peer.SendTo(new IPEndPoint(IPAddress.Broadcast, 12345), message);
                }
            }
        }