예제 #1
0
        private void _routerSocket_ReceiveReady(object sender, NetMQ.NetMQSocketEventArgs e)
        {
            NetMQ.NetMQMessage msg = new NetMQ.NetMQMessage();
            if (e.Socket.TryReceiveMultipartMessage(ref msg, 3))
            {
                var address = msg.Pop();
                var empty   = msg.Pop();
                var data    = msg.Pop();


                var messageData = new MemoryRemoteSocketData()
                {
                    Address = new StageAddress()
                    {
                        Address = address.ConvertToString()
                    },
                    Data = data.Buffer
                };

                _inputBuffer.Post(messageData);
            }
        }
예제 #2
0
            private void OnPipeReady(object sender, NetMQSocketEventArgs e)
            {
                Assumes.NotNull(m_pipe);
                Assumes.NotNull(m_pingTimer);
                Assumes.NotNull(m_poller);

                NetMQMessage message = m_pipe.ReceiveMultipartMessage();

                string command = message.Pop().ConvertToString();

                switch (command)
                {
                case ConfigureCommand:
                    string interfaceName = message.Pop().ConvertToString();
                    int    port          = message.Pop().ConvertToInt32();
                    Configure(interfaceName, port);
                    break;

                case PublishCommand:
                    m_transmit           = message.Pop();
                    m_pingTimer.Interval = message.Pop().ConvertToInt32();
                    m_pingTimer.Enable   = true;
                    SendUdpFrame(m_transmit);
                    break;

                case SilenceCommand:
                    m_transmit         = null;
                    m_pingTimer.Enable = false;
                    break;

                case SubscribeCommand:
                    m_filter = message.Pop();
                    break;

                case UnsubscribeCommand:
                    m_filter = null;
                    break;

                case NetMQActor.EndShimMessage:
                    m_poller.Stop();
                    break;

                default:
                    throw new ArgumentOutOfRangeException();
                }
            }
예제 #3
0
            public void HandlePipe()
            {
                NetMQMessage message = m_pipe.ReceiveMessage();

                string command = message.Pop().ConvertToString();

                switch (command)
                {
                case ConfigureCommand:
                    string interfaceName = message.Pop().ConvertToString();
                    int    port          = message.Pop().ConvertToInt32();
                    Configure(interfaceName, port);
                    break;

                case PublishCommand:
                    m_transmit = message.Pop();
                    m_interval = message.Pop().ConvertToInt32();

                    //  Start broadcasting immediately
                    m_pingAt = Clock.NowMs();
                    break;

                case SilenceCommand:
                    m_transmit = null;
                    break;

                case SubscribeCommand:
                    m_filter = message.Pop();
                    break;

                case UnsubscribeCommand:
                    m_filter = null;
                    break;

                case ActorKnownMessages.END_PIPE:
                    m_terminated = true;
                    break;

                default:
                    throw new ArgumentOutOfRangeException();
                }
            }