public void Disconnect(string protocol) { using (var server1 = new DealerSocket()) using (var server2 = new DealerSocket()) using (var client = new DealerSocket()) { string address2; if (protocol == "tcp") { var port1 = server1.BindRandomPort("tcp://localhost"); var port2 = server2.BindRandomPort("tcp://localhost"); client.Connect("tcp://localhost:" + port1); client.Connect("tcp://localhost:" + port2); address2 = "tcp://localhost:" + port2; } else { server1.Bind("inproc://localhost1"); server2.Bind("inproc://localhost2"); client.Connect("inproc://localhost1"); client.Connect("inproc://localhost2"); address2 = "inproc://localhost2"; } Thread.Sleep(100); // we should be connected to both server client.SendFrame("1"); client.SendFrame("2"); // make sure client is connected to both servers server1.SkipFrame(); server2.SkipFrame(); // disconnect from server2, server 1 should receive all messages client.Disconnect(address2); Thread.Sleep(100); client.SendFrame("1"); client.SendFrame("2"); server1.SkipFrame(); server1.SkipFrame(); } }
public void Unbind(string protocol) { using (var server = new DealerSocket()) { string address1, address2; // just making sure can bind on both addresses using (var client1 = new DealerSocket()) using (var client2 = new DealerSocket()) { if (protocol == "tcp") { var port1 = server.BindRandomPort("tcp://localhost"); var port2 = server.BindRandomPort("tcp://localhost"); address1 = "tcp://localhost:" + port1; address2 = "tcp://localhost:" + port2; client1.Connect(address1); client2.Connect(address2); } else { Debug.Assert(protocol == "inproc"); address1 = "inproc://localhost1"; address2 = "inproc://localhost2"; server.Bind(address1); server.Bind(address2); client1.Connect(address1); client2.Connect(address2); } Thread.Sleep(100); // we should be connected to both server client1.SendFrame("1"); client2.SendFrame("2"); // the server receive from both server.SkipFrame(); server.SkipFrame(); } // unbind second address server.Unbind(address2); Thread.Sleep(100); using (var client1 = new DealerSocket()) using (var client2 = new DealerSocket()) { client1.Options.DelayAttachOnConnect = true; client1.Connect(address1); client2.Options.DelayAttachOnConnect = true; if (protocol == "tcp") { client2.Connect(address2); client1.SendFrame("1"); server.SkipFrame(); Assert.IsFalse(client2.TrySendFrame(TimeSpan.FromSeconds(2), "2")); } else { Assert.Throws <EndpointNotFoundException>(() => { client2.Connect(address2); }); } } } }