Example #1
0
        public void StreamToStream()
        {
            using (var server = new StreamSocket())
                using (var client = new StreamSocket())
                {
                    var port = server.BindRandomPort("tcp://*");
                    client.Connect("tcp://127.0.0.1:" + port);

                    byte[] clientId = client.Options.Identity;

                    const string request = "GET /\r\n";

                    const string response = "HTTP/1.0 200 OK\r\n" +
                                            "Content-Type: text/plain\r\n" +
                                            "\r\n" +
                                            "Hello, World!";

                    client.SendMoreFrame(clientId).SendFrame(request);

                    byte[] serverId = server.ReceiveFrameBytes();

                    Console.WriteLine(serverId);
                    Assert.AreEqual(request, server.ReceiveFrameString());

                    server.SendMoreFrame(serverId).SendFrame(response);

                    CollectionAssert.AreEqual(clientId, client.ReceiveFrameBytes());
                    Assert.AreEqual(response, client.ReceiveFrameString());
                }
        }
Example #2
0
        public void NativeSocket()
        {
            using (var streamServer = new StreamSocket())
                using (var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp))
                {
                    int port = streamServer.BindRandomPort("tcp://*");

                    socket.Connect("127.0.0.1", port);

                    var buffer = new byte[] { 1 };
                    socket.Send(buffer);

                    byte[] identity = streamServer.ReceiveFrameBytes();
                    byte[] message  = streamServer.ReceiveFrameBytes();

                    Assert.AreEqual(buffer[0], message[0]);

                    var socketSignal = new ManualResetEvent(false);

                    using (var poller = new NetMQPoller())
                    {
                        poller.Add(socket, s =>
                        {
                            socket.Receive(buffer);

                            socketSignal.Set();

                            // removing the socket
                            poller.Remove(socket);
                        });

                        poller.RunAsync();

                        // no message is waiting for the socket so it should fail
                        Assert.IsFalse(socketSignal.WaitOne(100));

                        // sending a message back to the socket
                        streamServer.SendMoreFrame(identity).SendFrame("a");

                        Assert.IsTrue(socketSignal.WaitOne(100));

                        socketSignal.Reset();

                        // sending a message back to the socket
                        streamServer.SendMoreFrame(identity).SendFrame("a");

                        // we remove the native socket so it should fail
                        Assert.IsFalse(socketSignal.WaitOne(100));

                        poller.Stop();
                    }
                }
        }