Esempio n. 1
0
        public async Task TestPushPullSocket()
        {
            var directory = "tcp://localhost:7979";

            var cancellationTokenSource = new CancellationTokenSource();
            var token = cancellationTokenSource.Token;

            var peer1Endpoint = "tcp://localhost:8181";
            var peer2Endpoint = "tcp://localhost:8080";

            Assert.AreEqual(0, TestsNetMQContext.Get());

            var peerDirectory = new NetMQPeerDirectory(directory, token);

            var peer1 = new NetMQPeer(peer1Endpoint, directory, token);
            var peer2 = new NetMQPeer(peer2Endpoint, directory, token);

            peer1.Start();
            peer2.Start();

            await Task.Delay(500);

            Assert.AreEqual(4, TestsNetMQContext.Get());

            cancellationTokenSource.Cancel();
        }
Esempio n. 2
0
        public void Start()
        {
            Task.Run(() =>
            {
                using (var receiver = new PullSocket(Endpoint))
                {
                    while (true)
                    {
                        var command = receiver.ReceiveFrameBytes();

                        var msg = JsonConvert.DeserializeObject <Message>(Encoding.UTF32.GetString(command));

                        switch (msg.Subject)
                        {
                        case NetMQPeerDirectory.Ack:
                            TestsNetMQContext.Increment();
                            break;

                        case NetMQPeerDirectory.Command:
                            TestsNetMQContext.Increment();
                            break;

                        case NetMQPeerDirectory.Event:
                            TestsNetMQContext.Increment();
                            break;
                        }
                    }
                }
            }, _token);


            Task.Run(async() =>
            {
                using (var sender = new PushSocket($"{DirectoryEndpoint}"))
                {
                    var message = new Message()
                    {
                        Endpoint = Endpoint,
                        Subject  = NetMQPeerDirectory.RegisterCommand
                    };

                    var msg = Encoding.UTF32.GetBytes(JsonConvert.SerializeObject(message));

                    sender.SendFrame(msg);

                    await Task.Delay(100);
                }
            });
        }
Esempio n. 3
0
        public NetMQPeerDirectory(string inboundSocker, CancellationToken token)
        {
            Task.Run(() =>
            {
                using (var receiver = new PullSocket(inboundSocker))
                {
                    while (true)
                    {
                        var command = receiver.ReceiveFrameBytes();

                        var msg = JsonConvert.DeserializeObject <Message>(Encoding.UTF32.GetString(command));

                        if (msg.Subject == RegisterCommand)
                        {
                            TestsNetMQContext.Increment();

                            var peer = msg.Endpoint;

                            lock (_locker)
                            {
                                _peers.Add(peer);

                                using (var sender = new PushSocket(peer))
                                {
                                    var message = new Message()
                                    {
                                        Subject = NetMQPeerDirectory.Ack
                                    };

                                    var ack = Encoding.UTF32.GetBytes(JsonConvert.SerializeObject(message));

                                    sender.SendFrame(ack);
                                }
                            }
                        }
                    }
                }
            }, token);
        }
Esempio n. 4
0
 public void SetUp()
 {
     TestsNetMQContext.Reset();
 }