public MainForm(string name) { InitializeComponent(); btnStop.Enabled = false; _connectedPeers = new List <Peer>(); peerBindingSource.DataSource = _connectedPeers; _ownGroups = new List <Group>(); ownGroupBindingSource.DataSource = _ownGroups; _peerGroups = new List <Group>(); peerGroupBindingSource.DataSource = _peerGroups; _headersByPeerGuid = new Dictionary <Guid, List <Header> >(); _zyre = new Zyre(_name, true, NodeLogger); if (!string.IsNullOrEmpty(name)) { _zyre.SetName(name); } _name = _zyre.Name(); _uuid = _zyre.Uuid(); _zyre.EnterEvent += ZyreEnterEvent; _zyre.StopEvent += ZyreStopEvent; _zyre.ExitEvent += ZyreExitEvent; _zyre.EvasiveEvent += ZyreEvasiveEvent; _zyre.JoinEvent += ZyreJoinEvent; _zyre.LeaveEvent += ZyreLeaveEvent; _zyre.WhisperEvent += ZyreWhisperEvent; _zyre.ShoutEvent += ZyreShoutEvent; }
public void SimpleStartStopOneNode() { var node1Writer = new ConsoleLogger("node1"); using (var node1 = new Zyre("node1", false, node1Writer.ConsoleWrite)) { node1.Start(); node1.Should().NotBeNull(); node1.Name().Should().Be("node1"); node1.SetHeader("X-HELLO", "World"); var uuid1 = node1.Uuid(); uuid1.Should().NotBeEmpty(); Thread.Sleep(100); node1Writer.ConsoleWrite("After starting node1, Dump():"); node1.Dump(); Thread.Sleep(100); Console.WriteLine("Stopping node1"); node1.Stop(); Thread.Sleep(100); node1.Dump(); } }
public void ZyreTests() { // Create two nodes using (var node1 = new Zyre("node1")) using (var node2 = new Zyre("node2")) { int major, minor, patch; node1.Version(out major, out minor, out patch); major.Should().Be(Zyre.ZyreVersionMajor); node1.Should().NotBeNull(); node1.Name().Should().Be("node1"); node2.Should().NotBeNull(); node2.Name().Should().Be("node2"); node1.SetHeader("X-HELLO", "World"); } }
public void FullTestLikeZeroMqZyre() { var node1Writer = new ConsoleLogger("node1"); var node2Writer = new ConsoleLogger("node2"); // Create two nodes using (var node1 = new Zyre("node1", false, node1Writer.ConsoleWrite)) using (var node2 = new Zyre("node2", false, node2Writer.ConsoleWrite)) { int major, minor, patch; node1.Version(out major, out minor, out patch); major.Should().Be(Zyre.ZyreVersionMajor); node1.Should().NotBeNull(); node1.Name().Should().Be("node1"); node1.SetHeader("X-HELLO", "World"); // Start both nodes node1.Start(); var uuid1 = node1.Uuid(); uuid1.Should().NotBeEmpty(); node1Writer.ConsoleWrite("After starting node1, Dump():"); node1.Dump(); node2.Should().NotBeNull(); node2.Name().Should().Be("node2"); node2.Start(); var uuid2 = node2.Uuid(); uuid1.Should().NotBe(uuid2); Console.WriteLine("After starting node2, Dump():"); node2.Dump(); // Give time for them to interconnect. Our default is beacons every second Thread.Sleep(1100); Console.WriteLine("After Thread.Sleep(1100):"); Console.WriteLine("node1 Joining Global"); node1.Join("GLOBAL"); Console.WriteLine("node2 Joining Global"); node2.Join("GLOBAL"); node1.Dump(); node2.Dump(); var node1Peers = node1.Peers(); node1Peers.Count.Should().Be(1); Console.WriteLine("node1 Joining node1 group of one"); node1.Join("node1 group of one"); Console.WriteLine("node2 Joining node1 group of one"); node2.Join("node2 group of one"); // Give them time to join their groups Thread.Sleep(100); Console.WriteLine("After 2nd Thread.Sleep(100):"); node1.Dump(); node2.Dump(); var peerGroups = node1.PeerGroups(); peerGroups.Count.Should().Be(2); var node2Peers = node2.Peers(); node2Peers.Count.Should().Be(1); var value = node2.PeerHeaderValue(uuid1, "X-HELLO"); value.Should().Be("World"); // One node shouts to GLOBAL Console.WriteLine("node1 Shouting to Global"); node1.Shouts("GLOBAL", "Hello, World"); // Second node should receive ENTER, JOIN, JOIN and SHOUT var msg = node2.Receive(); msg.Should().NotBeNull(); var command = msg.Pop().ConvertToString(); command.Should().Be("ENTER"); msg.FrameCount.Should().Be(4); var peerIdBytes = msg.Pop().Buffer; var peerId = new Guid(peerIdBytes); peerId.Should().Be(uuid1); var name = msg.Pop().ConvertToString(); name.Should().Be("node1"); var headersBuffer = msg.Pop().Buffer; var headers = Serialization.BinaryDeserialize <Dictionary <string, string> >(headersBuffer); var address = msg.Pop().ConvertToString(); headers.Count.Should().Be(1); headers["X-HELLO"].Should().Be("World"); address.Should().NotBeNullOrEmpty(); msg = node2.Receive(); msg.Should().NotBeNull(); command = msg.Pop().ConvertToString(); command.Should().Be("JOIN"); msg.FrameCount.Should().Be(3); msg = node2.Receive(); msg.Should().NotBeNull(); command = msg.Pop().ConvertToString(); command.Should().Be("JOIN"); msg.FrameCount.Should().Be(3); msg = node2.Receive(); msg.Should().NotBeNull(); command = msg.Pop().ConvertToString(); command.Should().Be("SHOUT"); Console.WriteLine("Stopping node2"); node2.Stop(); msg = node2.Receive(); msg.Should().NotBeNull(); command = msg.Pop().ConvertToString(); command.Should().Be("STOP"); Console.WriteLine("Stopping node1"); node1.Stop(); Thread.Sleep(100); Console.WriteLine("After Stopping both:"); node1.Dump(); node2.Dump(); Console.WriteLine("OK"); } }
public void FullTestLikeZeroMqZyre() { var node1Writer = new ConsoleLogger("node1"); var node2Writer = new ConsoleLogger("node2"); // Create two nodes using (var node1 = new Zyre("node1", false, node1Writer.ConsoleWrite)) using (var node2 = new Zyre("node2", false, node2Writer.ConsoleWrite)) { int major, minor, patch; node1.Version(out major, out minor, out patch); major.Should().Be(Zyre.ZyreVersionMajor); node1.Should().NotBeNull(); node1.Name().Should().Be("node1"); node1.SetHeader("X-HELLO", "World"); // Start both nodes node1.Start(); var uuid1 = node1.Uuid(); uuid1.Should().NotBeEmpty(); node1Writer.ConsoleWrite("After starting node1, Dump():"); node1.Dump(); node2.Should().NotBeNull(); node2.Name().Should().Be("node2"); node2.Start(); var uuid2 = node2.Uuid(); uuid1.Should().NotBe(uuid2); Console.WriteLine("After starting node2, Dump():"); node2.Dump(); // Give time for them to interconnect. Our default is beacons every second Thread.Sleep(1100); Console.WriteLine("After Thread.Sleep(1100):"); Console.WriteLine("node1 Joining Global"); node1.Join("GLOBAL"); Console.WriteLine("node2 Joining Global"); node2.Join("GLOBAL"); node1.Dump(); node2.Dump(); var node1Peers = node1.Peers(); node1Peers.Count.Should().Be(1); Console.WriteLine("node1 Joining node1 group of one"); node1.Join("node1 group of one"); Console.WriteLine("node2 Joining node1 group of one"); node2.Join("node2 group of one"); // Give them time to join their groups Thread.Sleep(100); Console.WriteLine("After 2nd Thread.Sleep(100):"); node1.Dump(); node2.Dump(); var peerGroups = node1.PeerGroups(); peerGroups.Count.Should().Be(2); var node2Peers = node2.Peers(); node2Peers.Count.Should().Be(1); var value = node2.PeerHeaderValue(uuid1, "X-HELLO"); value.Should().Be("World"); // One node shouts to GLOBAL Console.WriteLine("node1 Shouting to Global"); node1.Shouts("GLOBAL", "Hello, World"); // Second node should receive ENTER, JOIN, JOIN and SHOUT var msg = node2.Receive(); msg.Should().NotBeNull(); var command = msg.Pop().ConvertToString(); command.Should().Be("ENTER"); msg.FrameCount.Should().Be(4); var peerIdBytes = msg.Pop().Buffer; var peerId = new Guid(peerIdBytes); peerId.Should().Be(uuid1); var name = msg.Pop().ConvertToString(); name.Should().Be("node1"); var headersBuffer = msg.Pop().Buffer; var headers = Serialization.BinaryDeserialize<Dictionary<string, string>>(headersBuffer); var address = msg.Pop().ConvertToString(); headers.Count.Should().Be(1); headers["X-HELLO"].Should().Be("World"); address.Should().NotBeNullOrEmpty(); msg = node2.Receive(); msg.Should().NotBeNull(); command = msg.Pop().ConvertToString(); command.Should().Be("JOIN"); msg.FrameCount.Should().Be(3); msg = node2.Receive(); msg.Should().NotBeNull(); command = msg.Pop().ConvertToString(); command.Should().Be("JOIN"); msg.FrameCount.Should().Be(3); msg = node2.Receive(); msg.Should().NotBeNull(); command = msg.Pop().ConvertToString(); command.Should().Be("SHOUT"); Console.WriteLine("Stopping node2"); node2.Stop(); msg = node2.Receive(); msg.Should().NotBeNull(); command = msg.Pop().ConvertToString(); command.Should().Be("STOP"); Console.WriteLine("Stopping node1"); node1.Stop(); Thread.Sleep(100); Console.WriteLine("After Stopping both:"); node1.Dump(); node2.Dump(); Console.WriteLine("OK"); } }