Beispiel #1
0
        private static int Main(string[] args)
        {
            if (args.Length != 3)
            {
                Console.WriteLine("usage: remote_thr <connect-to> <message-size> <message-count>");
                return 1;
            }

            string connectTo = args[0];
            int messageSize = int.Parse(args[1]);
            int messageCount = int.Parse(args[2]);

            using (var push = new PushSocket())
            {
                push.Connect(connectTo);

                for (int i = 0; i != messageCount; i++)
                {
                    var msg = new Msg();
                    msg.InitPool(messageSize);
                    push.Send(ref msg, more: false);
                    msg.Close();
                }
            }

            return 0;
        }
Beispiel #2
0
        private static int Main(string[] args)
        {
            if (args.Length != 3)
            {
                Console.WriteLine("usage: remote_thr <connect-to> <message-size> <message-count>");
                return(1);
            }

            string connectTo    = args[0];
            int    messageSize  = int.Parse(args[1]);
            int    messageCount = int.Parse(args[2]);

            using (var push = new PushSocket())
            {
                push.Connect(connectTo);

                for (int i = 0; i != messageCount; i++)
                {
                    var msg = new Msg();
                    msg.InitPool(messageSize);
                    push.Send(ref msg, more: false);
                    msg.Close();
                }
            }

            return(0);
        }
Beispiel #3
0
        public Sender(IOptions <ConnectionSettings> settings, ILogger <Sender> logger)
        {
            _settings = settings.Value;
            _logger   = logger;

            Socket = new PushSocket();
        }
Beispiel #4
0
        public override void Publisher()
        {
            AsyncIO.ForceDotNet.Force();

            sender = new PushSocket();
            sender.Connect("tcp://" + IP + ":" + Port);
            Debug.Log("Connect ObjectSender to: " + "tcp://" + IP + ":" + Port);
            while (IsRunning)
            {
                Thread.Sleep(50);
                if (sendMessageQueue.Count > 3)
                {
                    sendMessageQueue.RemoveRange(0, sendMessageQueue.Count - 3);
                }
                if (sendMessageQueue.Count > 0)
                {
                    // Debug.Log("Send: " + sendMessageQueue[0]);

                    try
                    {
                        sender.SendFrame(sendMessageQueue[0], false); // true not wait
                        sendMessageQueue.RemoveAt(0);
                    }
                    catch { }
                }
            }

            // disconnectClose();
        }
Beispiel #5
0
 private static void Main()
 {
     Console.WriteLine("Creating socket..");
     using (var pushSocket = new PushSocket(">tcp://localhost:5556")
     {
         /* So apparently this is needed to prevent the socket from being immediately disposed
          * after the last instruction of the using block.
          * With this setting, the socket shall be disposed only after the message has been sent.
          * This is equivalent to say "wait forever", but someone may arguably want to set a finite
          * amount of time when in production.
          */
         Options = { Linger = TimeSpan.FromSeconds(-1) }
     })
     {
         Console.WriteLine("Creating message..");
         var message = new Message
         {
             Text      = "test message",
             TimeStamp = DateTime.Now,
             Type      = "test",
             ValueCode = 0
         };
         Console.WriteLine("Serializing message..");
         using (var memoryStream = new MemoryStream())
         {
             var binaryFormatter = new BinaryFormatter();
             binaryFormatter.Serialize(memoryStream, message);
             var serializedMessage = memoryStream.ToArray();
             Console.WriteLine("Sending message..");
             pushSocket.SendFrame(serializedMessage);
         }
     }
     Console.WriteLine("Performing cleanup..");
     NetMQConfig.Cleanup();
 }
Beispiel #6
0
        public static void Main(string[] args)
        {
            Console.WriteLine("====== VENTILATOR ======");


            Console.WriteLine("Press enter when all is set up");
            Console.ReadLine();

            using (var sender = new PushSocket("@tcp://*:80"))
            {
                Console.WriteLine("Sending tasks to workers");

                int step   = 10;
                int height = 200;  //400    hier kann height geändert werden
                int width  = 200;  //       hier kann width geändert werden
                for (int start = 0; start < height; start += 10)
                {
                    Thread.Sleep(100);
                    sender.SendFrame(start + "," + step + "," + width);
                    Console.WriteLine("asked for " + start + " to " + step);
                    step = step + 10;
                }

                Console.WriteLine("Press any key to quit");
                Console.ReadLine();
            }
        }
Beispiel #7
0
 public NetMQWorker(int id, string pushAddress, string pullAddress, NetMQContext context) : base(id)
 {
     _pullSocket = context.CreatePullSocket();
     _pushSocket = context.CreatePushSocket();
     _pushSocket.Connect(pushAddress);
     _pullSocket.Bind(pullAddress+id);
 }
Beispiel #8
0
        static void Main(string[] args)
        {
            bool started = false;

            while (true)
            {
                if (started)
                {
                    Console.WriteLine("Please Press Enter to Stop...");
                    Console.ReadLine();
                    using (var server = new PushSocket())
                    {
                        server.Connect("tcp://127.0.0.1:5489");
                        server.SendFrame("false");
                        started = false;
                    }
                }
                else
                {
                    Console.WriteLine("Please Press Enter to Start...");
                    Console.ReadLine();
                    using (var send = new PushSocket())
                    {
                        send.Connect("tcp://127.0.0.1:5488");
                        send.SendFrame("true");
                        started = true;
                    }
                }
            }
        }
Beispiel #9
0
 static void Main(string[] args)
 {
     /// Task Ventilator
     // Binds PUSH socket to tcp://localhost:5557
     // Sends batch of tasks to workers via that socket
     Console.WriteLine("====== VENTILATOR ======");
     using (var sender = new PushSocket("@tcp://*:5557"))
         using (var sink = new PushSocket(">tcp://localhost:5558"))
         {
             Console.WriteLine("Press enter when worker are ready");
             Console.ReadLine();
             //the first message it "0" and signals start of batch
             //see the Sink.csproj Program.cs file for where this is used
             Console.WriteLine("Sending start of batch to Sink");
             sink.SendFrame("0");
             Console.WriteLine("Sending tasks to workers");
             //initialise random number generator
             Random rand = new Random(0);
             //expected costs in Ms
             int totalMs = 0;
             //send 100 tasks (workload for tasks, is just some random sleep time that
             //the workers can perform, in real life each work would do more than sleep
             for (int taskNumber = 0; taskNumber < 100; taskNumber++)
             {
                 //Random workload from 1 to 100 msec
                 int workload = rand.Next(0, 100);
                 totalMs += workload;
                 Console.WriteLine("Workload : {0}", workload);
                 sender.SendFrame(workload.ToString());
             }
             Console.WriteLine("Total expected cost : {0} msec", totalMs);
             Console.WriteLine("Press Enter to quit");
             Console.ReadLine();
         }
 }
 public ZeroNotificationEnqueue(ZeroConfiguration configuration)
 {
     _poller = new NetMQPoller();
     _client = new PushSocket();
     _client.Connect(configuration.ZeroMqAddress);
     _poller.RunAsync();
 }
Beispiel #11
0
        static void Main(string[] args)
        {
            Console.WriteLine("====== WORKER ======");

            var sinkPort       = ConfigurationManager.AppSettings.Get("sinkPort") ?? "8088";
            var ventilatorPort = ConfigurationManager.AppSettings.Get("ventilatorPort") ?? "400";

            using (var receiver = new PullSocket($">tcp://localhost:{sinkPort}"))
                using (var sender = new PushSocket($">tcp://localhost:{ventilatorPort}"))
                {
                    while (true)
                    {
                        string workload = receiver.ReceiveFrameString();

                        // the protocoll is as follows: [0] -> lower, [1] -> upper,  [2] -> height
                        string[] workLoadArray = workload.Split(',');

                        var calculator = new MandelbrotCalculator();
                        var result     = calculator.Calculate(Convert.ToInt32(workLoadArray[2]), 400, Convert.ToInt32(workLoadArray[0]), Convert.ToInt32(workLoadArray[1]));

                        byte[]          data;
                        BinaryFormatter binaryFormatter = new BinaryFormatter();

                        using (var memoryStream = new MemoryStream())
                        {
                            binaryFormatter.Serialize(memoryStream, result);
                            data = memoryStream.ToArray();
                        }

                        Console.WriteLine("Sending");
                        sender.SendFrame(data);
                    }
                }
        }
Beispiel #12
0
        private bool _disposedValue = false; // Для определения избыточных вызовов

        #endregion Fields

        #region Constructors

        public FanBrocker(NetMQContext context, string ventAddress, string sinkAddress, int workersCnt)
        {
            _logger.Trace("Brocker created");
            _ventAddress = ventAddress;
            _sinkAddress = sinkAddress;

            _sinkSocket = context.CreatePullSocket();
            _sinkSocket.Options.ReceiveBuffer = 1;

            _sinkSocket.Bind(sinkAddress);

            _ventSocket = context.CreatePushSocket();
            _ventSocket.Options.SendBuffer = 1;
            _ventSocket.Bind(ventAddress);

            Task.Run(() =>
            {
                try
                {
                    while (true)
                    {
                        var ba = _sinkSocket.ReceiveFrameString();
                        _logger.Trace("Brocker received data {0}", ba);
                        var data = JsonConvert.DeserializeObject<ProcessedEventArgs>(ba);
                        OnFramesProcessed(data);
                    }
                }
                catch (Exception)
                {

                    _logger.Error("EXCEPTION");
                }

            });
        }
Beispiel #13
0
        static void Main(string[] args)
        {
            // Console.WriteLine("Connecting to hello world server…");
            // using (var requester = new RequestSocket())
            // {
            //     requester.Connect("tcp://localhost:5555");

            //     int requestNumber;
            //     for (requestNumber = 0; requestNumber != 100; requestNumber++)
            //     {
            //         Console.WriteLine("Sending Hello {0}...", requestNumber);
            //         requester.SendFrame("Hello");
            //         string str = requester.ReceiveFrameString();
            //         Console.WriteLine("Received World {0}", requestNumber);
            //     }
            // }
            using (var responder = new PushSocket())
            {
                responder.Bind("tcp://*:5555");

                while (true)
                {
                    //string str = responder.ReceiveFrameString();
                    string str = "hellllllo";
                    Console.WriteLine(str);
                    Thread.Sleep(50);  //  Do some 'work'
                    responder.SendFrame(str);
                }
            }
        }
Beispiel #14
0
        public void DesktopClient_WillAccept_SinglePartMessages()
        {
            Queue<Packet> packets = new Queue<Packet>();
            // Mock the the message handler processor
            var messageHandler = new Mock<IDesktopMessageHandler>();
            messageHandler.Setup(mh => mh.DisplayLogPacket(It.IsAny<LogPacket>())).Callback(
                (LogPacket packet) =>
                {
                    packets.Enqueue(packet);
                }).Verifiable();

            // Setup Client
            StartClientThread(messageHandler.Object);

            using (PushSocket server = new PushSocket("@tcp://*:" + _port))
            {
                var message = new NetMQMessage();

                message.Append(JsonConvert.SerializeObject(new LogPacket()));

                server.SendMultipartMessage(message);
            }

            // Give NetMQ time to send the message
            Thread.Sleep(500);

            Assert.IsTrue(packets.Count == 1);
        }
        public void DesktopClient_WillNotAccept_MoreThanOnePartMessages()
        {
            Queue <Packet> packets = new Queue <Packet>();
            // Mock the the message handler processor
            var messageHandler = new Mock <IDesktopMessageHandler>();

            messageHandler.Setup(mh => mh.DisplayLogPacket(It.IsAny <LogPacket>()))
            .Callback((LogPacket packet) =>
            {
                packets.Enqueue(packet);
            })
            .Verifiable();

            // Setup Client
            StartClientThread(messageHandler.Object);

            using (PushSocket server = new PushSocket("@tcp://*:" + _port))
            {
                var message = new NetMQMessage();

                message.Append(typeof(LogPacket).Name);
                message.Append(JsonConvert.SerializeObject(new LogPacket()));
                message.Append("hello!");

                server.SendMultipartMessage(message);
            }

            // Give NetMQ time to send the message
            Thread.Sleep(500);

            Assert.IsTrue(packets.Count == 0);
        }
Beispiel #16
0
        public void Start(string serverIpAddress, int serverPort)
        {
            string serverAddress = string.Format("tcp://{0}:{1}", serverIpAddress, serverPort);

            pushSocket = new PushSocket();
            pushSocket.Connect(serverAddress);
        }
Beispiel #17
0
        static void Main(string[] args)
        {
            string connectionString = args[0];

            using (var send = new PushSocket(">tcp://127.0.0.1:9999"))
                using (var receive = new ResponseSocket(connectionString))
                {
                    while (true)
                    {
                        // Block for request
                        var message = receive.ReceiveFrameString();
                        var msgId   = Guid.NewGuid().ToString();

                        // Acknowledge
                        receive.SendFrame("200, ACK");

                        // Do Work ...
                        Thread.Sleep(2000);

                        // Send response
                        send.SendFrame(string.Format("Handler {0} completed task {1}",
                                                     connectionString, msgId));

                        // Exit handler
                        break;
                    }
                }
        }
Beispiel #18
0
        public void Start()
        {
            if (!ServerSpecified)
            {
                return;
            }
            if (context == null)
            {
                context = NetMQContext.Create();

                subscriber = context.CreateSubscriberSocket();
                subscriber.Connect("tcp://127.0.0.1:5252");
                subscriber.Subscribe(String.Empty);

                sender = context.CreatePushSocket();
                sender.Connect("tcp://127.0.0.1:5253");

                // Start listening..
                Task.Run(() =>
                {
                    while (!tokenSource.IsCancellationRequested)
                    {
                        var message     = subscriber.ReceiveString();
                        var eventObject = Serialization.DeserializeEnvelope <ContractMarker>(message);
                        eventReceivedSubject.OnNext(eventObject);
                    }
                });
            }
        }
Beispiel #19
0
        public virtual NetMQSocket Rent()
        {
            if (_pool.TryDequeue(out var _sender))
            {
                Interlocked.Decrement(ref _count);

                Debug.Assert(_count >= 0);
                return(_sender);
            }

            try
            {
                switch (_options.Pattern)
                {
                case NetMQPattern.PushPull:
                    _sender = new PushSocket();
                    break;

                case NetMQPattern.PubSub:
                    _sender = new PublisherSocket();
                    break;

                default:
                    break;
                }
                _sender.Connect(HostAddress);
            }
            catch (Exception e)
            {
                _logger.LogError(e, "ZeroMQ channel model create failed!");
                throw;
            }

            return(_sender);
        }
        private void CreateRemoteNode()
        {
            if (NodeAddressNumber >= RemoteAddressesList.Count)
            {
                throw new Exception("Node number is not correct, ");
            }
            NodeAddress = RemoteAddressesList[this.NodeAddressNumber];

            if (NodeAddressNumber == 0)
            {
                MainNode = true;
            }

            WorkingRemoteServersCount = RemoteAddressesList.Count;
            RemoteAddressesList.RemoveAt(NodeAddressNumber);


            NodePort = NodeAddress.Split(new[] { ":" }, StringSplitOptions.None)[1];

            foreach (var remoteServer in RemoteAddressesList)
            {
                var remotePushSocket = new PushSocket();
                RemoteServerSockets[remoteServer] = remotePushSocket;
                remotePushSocket.Connect("tcp://" + remoteServer);
            }
        }
 private void Main()
 {
     using (this.pushSocket = new PushSocket(this.connectionString))
     {
         Volatile.Write(ref this.currentState, RUNNING);
         var spin = new SpinWait();
         var msg  = new Msg();
         msg.InitPool(this.maxFrameSize);
         while (Volatile.Read(ref this.currentState) == RUNNING)
         {
             try
             {
                 if (this.buffer.TryPoll(out var send))
                 {
                     send.Send(
                         this.pushSocket,
                         this.envelopFactory,
                         this.encoder,
                         msg,
                         this.maxFrameSize);
                 }
                 else
                 {
                     spin.SpinOnce();
                 }
             }
             catch (Exception ex)
             {
                 log.Error(ex, ex.Message);
             }
         }
     }
 }
Beispiel #22
0
        static void Main(string[] args)
        {
            Console.WriteLine("====== VENTILATOR ======");

            using (var push = new PushSocket())
                using (var sink = new DealerSocket())
                {
                    push.Bind("tcp://127.0.0.1:8888");
                    sink.Connect("tcp://127.0.0.1:7777");

                    Console.WriteLine("Press enter when worker are ready");
                    Console.ReadLine();

                    Console.WriteLine("Sending start of batch to Sink");
                    sink.SendFrame("0");

                    Console.WriteLine("Sending tasks to workers");

                    var rnd     = new Random();
                    var totalMs = 0;

                    for (int taskNumber = 0; taskNumber < 100; taskNumber++)
                    {
                        int workload = rnd.Next(0, 100);
                        totalMs += workload;
                        Console.WriteLine("Workload : {0}", workload);
                        push.SendFrame(workload.ToString());
                    }

                    Console.WriteLine($"Total expected cost : {totalMs} msec");
                    Console.WriteLine("Press Enter to quit");
                    Console.ReadLine();
                }
        }
Beispiel #23
0
 static void Main(string[] args)
 {
     // Task Ventilator
     // Binds PUSH socket to tcp://localhost:5557
     // Sends batch of tasks to workers via that socket
     Console.WriteLine("====== VENTILATOR ======");
     using (var sender = new PushSocket("@tcp://*:80"))
         using (var sink = new PullSocket(">tcp://localhost:8080"))
         {
             Thread.Sleep(1000);
             //the first message it "0" and signals start of batch
             //see the Sink.csproj Program.cs file for where this is used
             Console.WriteLine("Sending start of batch to Sink");
             //sink.SendFrame("0");
             Console.WriteLine("Sending tasks to workers");
             //initialise random number generator
             Random rand = new Random(0);
             //expected costs in Ms
             int totalMs = 0;
             //send 100 tasks (workload for tasks, is just some random sleep time that
             //the workers can perform, in real life each work would do more than sleep
             int upper  = 10;
             int height = 400;
             for (int lower = 0; lower < height; lower += 10)
             {
                 sender.SendFrame(lower + "," + upper + "," + height);
                 upper += 10;
             }
             Console.WriteLine("Total expected cost : {0} msec", totalMs);
             Console.WriteLine("Press Enter to quit");
             Console.ReadLine();
         }
 }
Beispiel #24
0
        //static void SetSocketOpt(NetMQSocket socket)
        //{
        //    socket.Options.TcpKeepalive = true;
        //    socket.Options.ReconnectIntervalMax = TimeSpan.FromMilliseconds(30000);
        //    socket.Options.Linger = TimeSpan.FromMilliseconds(0);
        //    //socket.KeepAlive = true;
        //    //socket.ReconnectIntervalMax = TimeSpan.FromMilliseconds(30000);
        //    //socket.Linger = TimeSpan.FromMilliseconds(0);
        //}

        static public Socket_NanoMsg Create(SocketType socketType)
        {
            NanomsgSocketBase socket;

            switch (socketType)
            {
            case SocketType.Pub:
                socket = new PublishSocket();
                return(new Socket_NanoMsg(socket));

            case SocketType.Pull:
                socket = new PullSocket();
                return(new Socket_NanoMsg(socket));

            case SocketType.Push:
                socket = new PushSocket();
                return(new Socket_NanoMsg(socket));

            case SocketType.Sub:
                socket = new SubscribeSocket();
                return(new Socket_NanoMsg(socket));

            default:
                throw new Exception("Non support SocketType.");
            }
        }
 public static void Main(string[] args)
 {
     // Task Worker
     // Connects PULL socket to tcp://localhost:5557
     // collects workload for socket from Ventilator via that socket
     // Connects PUSH socket to tcp://localhost:5558
     // Sends results to Sink via that socket
     Console.WriteLine("====== WORKER ======");
     using (var receiver = new PullSocket(">tcp://127.0.0.1:5557"))
         using (var sender = new PushSocket(">tcp://127.0.0.1:5558"))
         {
             //process tasks forever
             while (true)
             {
                 //workload from the vetilator is a simple delay
                 //to simulate some work being done, see
                 //Ventilator.csproj Proram.cs for the workload sent
                 //In real life some more meaningful work would be done
                 string workload = receiver.ReceiveFrameString();
                 //simulate some work being done
                 Thread.Sleep(int.Parse(workload));
                 //send results to sink, sink just needs to know worker
                 //is done, message content is not important, just the presence of
                 //a message means worker is done.
                 //See Sink.csproj Proram.cs
                 Console.WriteLine("Sending to Sink");
                 sender.SendFrame(string.Empty);
             }
         }
 }
Beispiel #26
0
        public RegisterClusterSuccesful(uint clusterId, bool succesful, PushSocket socket)
        {
            OutgoingInterserverPacket packet = new OutgoingInterserverPacket(OpCodes.REGISTER_CLUSTER_REQUEST_SUCCESFUL);

            packet.Write(clusterId);
            packet.Write(succesful);
            packet.Send(socket);
        }
Beispiel #27
0
        public RegisterChannelRequestSuccesful(bool accepted, uint channelId, PushSocket socket)
        {
            OutgoingInterserverPacket packet = new OutgoingInterserverPacket(OpCodes.REGISTER_CHANNEL_REQUEST_SUCCESFUL);

            packet.Write(accepted);
            packet.Write(channelId);
            packet.Send(socket);
        }
        public void Start(string serverIpAddress, int serverPort)
        {
            ctx = NetMQContext.Create();
            pushSocket = ctx.CreatePushSocket();

            string serverAddress = string.Format("tcp://{0}:{1}", serverIpAddress, serverPort);
            pushSocket.Connect(serverAddress);
        }
        public RegisterNewChannelSuccesful(uint channelId, bool succesful, PushSocket socket)
        {
            OutgoingInterserverPacket packet = new OutgoingInterserverPacket(OpCodes.REGISTER_NEW_CHANNEL_SUCCESFUL);

            packet.Write(channelId);
            packet.Write(succesful);
            packet.Send(socket);
        }
Beispiel #30
0
        static void Main(string[] args)
        {
            Console.WriteLine("====== Back Queue STARTED ======");
            using var fromWorkerForPosion = new PullSocket($"@{ThreadSafeFactory.BackPosionQueue}");
            using var fromWorkerForUrl    = new PullSocket($"@{ThreadSafeFactory.BackUrlQueue}");
            using var forFrontForUrl      = new PushSocket($"@{ThreadSafeFactory.BackQueue}");
            Console.WriteLine("Socket initialized");

            var fromWorkerProcessorForFrontQueue = Task.Run(() =>
            {
                do
                {
                    try
                    {
                        Console.WriteLine($"Waiting for worker link");
                        var queueItem = fromWorkerForUrl.ReceiveFrameString();
                        Console.WriteLine($"Received [{queueItem}] from worker");
                        Console.WriteLine($"Sending to front queue");
                        forFrontForUrl.SendFrame(queueItem);
                        Console.WriteLine($"Sent to front queue");
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine($"Error in Front Queue Processor {ex.Message}");
                    }
                } while (true);
            });
            var fromWorkerProcessorForPoison = Task.Run(() =>
            {
                do
                {
                    Console.WriteLine($"Waiting for poison items");
                    var workload = fromWorkerForPosion.ReceiveFrameString();
                    UrlPosionQueueItem queueItem = workload.FromJson <UrlPosionQueueItem>();
                    _posionQueue.Enqueue(queueItem);
                    Console.WriteLine($"Received poison [{queueItem.ToJson()}] from worker");
                } while (true);
            });

            var poisonQueueProcessor = Task.Run(() =>
            {
                do
                {
                    //while (_posionQueue.IsEmpty)
                    //{
                    //    Task.Delay(5000).Wait();
                    //}
                    if (_posionQueue.TryDequeue(out UrlPosionQueueItem queueItem))
                    {
                        Console.WriteLine($"Processing poison {queueItem.ToJson()}");
                    }
                    // TODO: Persist all posion queue items with failure reasons in db
                } while (true);
            });

            Task.WaitAll(fromWorkerProcessorForFrontQueue, /* fromWorkerProcessorForPoison,*/ poisonQueueProcessor);
            Console.WriteLine("====== FRONT QUEUE ======");
        }
Beispiel #31
0
 private void createSSocket()
 {
     clientS = context.CreatePushSocket();
     string[] srAddrs = cfg.ServerR.Split(',');
     foreach (string addr in srAddrs)
     {
         clientS.Connect(addr);
     }
 }
Beispiel #32
0
 public ZeroNotificationEnqueue()
 {
     _context = NetMQContext.Create();
     _poller  = new Poller();
     _client  = _context.CreatePushSocket();
     _client.Connect(QueueAddress);
     _scheduler = new NetMQScheduler(_context, _poller);
     Task.Factory.StartNew(_poller.PollTillCancelled, TaskCreationOptions.LongRunning);
 }
Beispiel #33
0
        public Sender(string addr)
        {
            StringNullOrEmptyException.Assert(addr, nameof(addr));

            _socket = new PushSocket();
            _socket.Options.SendTimeout       = TimeSpan.FromMilliseconds(100);
            _socket.Options.ReconnectInterval = TimeSpan.FromMilliseconds(150);
            _socket.Connect(addr.ToLower());
        }
        public void Start(string serverIpAddress, int serverPort)
        {
            ctx        = NetMQContext.Create();
            pushSocket = ctx.CreatePushSocket();

            string serverAddress = string.Format("tcp://{0}:{1}", serverIpAddress, serverPort);

            pushSocket.Connect(serverAddress);
        }
Beispiel #35
0
        protected override void Produce(PushSocket socket, int messageSize)
        {
            var msg = new byte[messageSize];

            msg[messageSize / 2] = 0x42;

            for (int i = 0; i < MsgCount; i++)
            {
                socket.SendFrame(msg);
            }
        }
Beispiel #36
0
		public CommandListener (int port, Dictionary<int, Job> jobs)
		{
			this.Port = port;
			this.Jobs = jobs;
			this.Context = NetMQContext.Create ();
			this.RequestSock = Context.CreateResponseSocket ();
			this.RequestSock.Bind ("tcp://0.0.0.0:" + Port);
			logger.Info ("Bound to TCP port {0}", Port);

			this.ResponseSock = Context.CreatePushSocket ();
			this.ResponseSock.Bind ("tcp://0.0.0.0:" + (Port + 1));
			logger.Info ("Bound callback to TCP port {0}", (Port + 1));
		}
Beispiel #37
0
        private bool _disposedValue = false; // Для определения избыточных вызовов

        #endregion Fields

        #region Constructors

        public NetMQBrocker(NetMQContext context, string pushAddress, string pullAddress, int workersCnt)
        {
            _logger.Trace("Brocker created");
            _pushAddress = pushAddress;
            _pullAddress = pullAddress;

            //_pushSocket.Bind(pushAddress);
            _pullSocket = context.CreatePullSocket();
            _pullSocket.Bind(pullAddress);

            _pushSocket = context.CreatePushSocket();

            Task.Run(() =>
            {
                try
                {

                    while (true)
                    {
                        var ba = _pullSocket.ReceiveFrameBytes();
                        if (ba != null)
                        {

                            using (var ms = new MemoryStream())
                            {
                                ms.Write(ba, 0, ba.Length);
                                ms.Position = 0;
                                var data = (ProcessedEventArgs)_formatter.Deserialize(ms);
                                _logger.Trace("Brocker received result queue {0}", data.QueueId);
                                OnFramesProcessed(data);
                            }
                        }
                        else
                        {
                            _logger.Trace("Brocker not received");
                            Thread.Sleep(200);
                        }
                    }
                }
                catch (Exception)
                {

                    _logger.Error("EXCEPTION");
                }

            });
        }
Beispiel #38
0
        private NetMQScheduler(Poller poller, PushSocket pushSocket, PullSocket pullSocket)
        {
            if (poller == null)
            {
                m_ownPoller = true;
                m_poller = new Poller();
            }
            else
            {
                m_ownPoller = false;
                m_poller = poller;
            }

            var address = string.Format("{0}://scheduler-{1}",
                Address.InProcProtocol,
                Interlocked.Increment(ref s_schedulerCounter));

            m_serverSocket = pullSocket;
            m_serverSocket.Options.Linger = TimeSpan.Zero;
            m_serverSocket.Bind(address);

            m_currentMessageHandler = OnMessageFirstTime;

            m_serverSocket.ReceiveReady += m_currentMessageHandler;

            m_poller.AddSocket(m_serverSocket);

            m_clientSocket = pushSocket;
            m_clientSocket.Connect(address);

            m_isSchedulerThread = new ThreadLocal<bool>(() => false);

            if (m_ownPoller)
            {
                m_poller.PollTillCancelledNonBlocking();
            }
        }
Beispiel #39
0
        public void Run()
        {
            Console.WriteLine("[CLIENT {0}] Starting", m_id);

            var rnd = new Random(m_id);
            // each request shall have an unique id in order to recognize an reply for a request
            var messageId = new byte[5];
            // create clientId for messages
            var clientId = new[] { m_id };
            // a flag to signal that an answer has arrived
            bool messageAnswered = false;
            // we use a poller because we have a socket and a timer to monitor
            using (var clientPoller = new NetMQPoller())
            using (var client = new RequestSocket())
            using (var monitor = new PushSocket())
            {
                client.Connect(m_localFrontendAddress);
                monitor.Connect(m_monitorAddress);

                client.Options.Identity = new[] { m_id };
                var timer = new NetMQTimer((int)TimeSpan.FromSeconds(10).TotalMilliseconds);

                // use as flag to indicate exit
                var exit = false;

                // every 10 s check if message has been received, if not then send error message and ext
                // and restart timer otherwise
                timer.Elapsed += (s, e) =>
                {
                    if (messageAnswered)
                    {
                        e.Timer.Enable = true;
                    }
                    else
                    {
                        var msg = string.Format("[CLIENT {0}] ERR - EXIT - lost message {1}", m_id, messageId);
                        // send an error message
                        monitor.SendFrame(msg);

                        // if poller is started than stop it
                        if (clientPoller.IsRunning)
                            clientPoller.Stop();
                        // mark the required exit
                        exit = true;
                    }
                };

                // process arriving answers
                client.ReceiveReady += (s, e) =>
                {
                    // mark the arrival of an answer
                    messageAnswered = true;
                    // worker is supposed to answer with our request id
                    var reply = e.Socket.ReceiveMultipartMessage();

                    if (reply.FrameCount == 0)
                    {
                        // something went wrong
                        monitor.SendFrame(string.Format("[CLIENT {0}] Received an empty message!", m_id));
                        // mark the exit flag to ensure the exit
                        exit = true;
                    }
                    else
                    {
                        var sb = new StringBuilder();

                        // create success message
                        foreach (var frame in reply)
                            sb.Append("[" + frame.ConvertToString() + "]");

                        // send the success message
                        monitor.SendFrame(string.Format("[CLIENT {0}] Received answer {1}",
                            m_id,
                            sb.ToString()));
                    }
                };

                // add socket & timer to poller
                clientPoller.Add(client);
                clientPoller.Add(timer);

                // start poller in another thread to allow the continued processing
                clientPoller.RunAsync();

                // if true the message has been answered
                // the 0th message is always answered
                messageAnswered = true;

                while (!exit)
                {
                    // simulate sporadic activity by randomly delaying
                    Thread.Sleep((int)TimeSpan.FromSeconds(rnd.Next(5)).TotalMilliseconds);

                    // only send next message if the previous one has been replied to
                    if (messageAnswered)
                    {
                        // generate random 5 byte as identity for for the message
                        rnd.NextBytes(messageId);

                        messageAnswered = false;

                        // create message [client adr][empty][message id] and send it
                        var msg = new NetMQMessage();

                        msg.Push(messageId);
                        msg.Push(NetMQFrame.Empty);
                        msg.Push(clientId);

                        client.SendMultipartMessage(msg);
                    }
                }

                // stop poller if needed
                if (clientPoller.IsRunning)
                    clientPoller.Stop();
            }
        }
 /// <summary>
 /// Initialize the messaging system
 /// </summary>
 public void Initialize()
 {
     _port = Config.Get("desktop-http-port");
     CheckPort();
     _server = new PushSocket("@tcp://*:" + _port);
 }
Beispiel #41
0
        public void DesktopClient_WillShutDown_WhenStopServerIsCalled_FromAnotherThread()
        {
            Queue<Packet> packets = new Queue<Packet>();
            var messageHandler = new Mock<IDesktopMessageHandler>();
            messageHandler.Setup(mh => mh.DisplayLogPacket(It.IsAny<LogPacket>()))
            .Callback((LogPacket packet) =>
            {
                packets.Enqueue(packet);
            })
            .Verifiable();

            StartClientThread(messageHandler.Object);

            // Try to send a message when the DesktopClient is listening
            using (PushSocket server = new PushSocket("@tcp://*:" + _port))
            {
                var message = new NetMQMessage();

                message.Append(JsonConvert.SerializeObject(new LogPacket()));

                server.SendMultipartMessage(message);
            }

            // Give NetMQ time to send the message
            Thread.Sleep(2000);
            Assert.IsTrue(packets.Count == 1);

            // Shut down the server
            _desktopMessageHandler.StopServer();
            Thread.Sleep(2000);

            // Try to send another message when the DesktopClient is not listening
            using (PushSocket server = new PushSocket("@tcp://*:" + _port))
            {
                var message = new NetMQMessage();

                message.Append(JsonConvert.SerializeObject(new LogPacket()));

                server.SendMultipartMessage(message);
            }

            // Give NetMQ time to send the message
            Thread.Sleep(2000);
            // Nothing should have made it so the count should be the same
            Assert.IsTrue(packets.Count == 1);
        }