예제 #1
0
 /// <summary>
 /// Create a new NetMQTimer with the given timer-interval in milliseconds.
 /// </summary>
 /// <param name="interval">an integer specifying the timer-interval in milliseconds</param>
 /// <remarks>
 /// This sets the When property to an initial value of -1, to indicate it no future-time applies as yet.
 /// </remarks>
 public NetMQTimer(int interval)
 {
     m_interval       = interval;
     m_timerEventArgs = new NetMQTimerEventArgs(this);
     m_enable         = true;
     When             = -1;
 }
예제 #2
0
파일: NetMQTimer.cs 프로젝트: Robin--/netmq
 /// <summary>
 /// Create a new NetMQTimer with the given timer-interval in milliseconds.
 /// </summary>
 /// <param name="interval">an integer specifying the timer-interval in milliseconds</param>
 /// <remarks>
 /// This sets the When property to an initial value of -1, to indicate it no future-time applies as yet.
 /// </remarks>
 public NetMQTimer(int interval)
 {
     m_interval = interval;
     m_timerEventArgs = new NetMQTimerEventArgs(this);
     m_enable = true;
     When = -1;
 }
예제 #3
0
파일: Bus.cs 프로젝트: vadian/netmq
        private void ClearDeadNodes(object sender, NetMQTimerEventArgs e)
        {
            // create an array with the dead nodes
            var deadNodes = m_nodes.
                Where(n => DateTime.Now > n.Value + m_deadNodeTimeout)
                .Select(n => n.Key).ToArray();

            // remove all the dead nodes from the nodes list and disconnect from the publisher
            foreach (var node in deadNodes)
            {
                m_nodes.Remove(node);
                m_publisher.Disconnect(node.Address);
                m_shim.SendMoreFrame(RemovedNodeCommand).SendFrame(node.Address);
            }
        }
예제 #4
0
 private void PingElapsed(object sender, NetMQTimerEventArgs e)
 {
     SendUdpFrame(m_transmit);
 }
예제 #5
0
 private void PingElapsed(object sender, NetMQTimerEventArgs e)
 {
     SendUdpFrame(m_transmit);
 }
예제 #6
0
 private void OnTimeoutTimer(object sender, NetMQTimerEventArgs e)
 {
     // dispose the current subscriber socket and try to connect
     m_poller.RemoveSocket(m_subscriber);
     m_subscriber.Dispose();
     m_subscriber = null;
     Connect();
 }
예제 #7
0
 private void OnReconnectTimer(object sender, NetMQTimerEventArgs e)
 {
     // try to connect again
     Connect();
 }
예제 #8
0
 private void OnHeartbeatTimerElapsed(object sender, NetMQTimerEventArgs e)
 {
     // Heartbeat timer elapsed, let's send another heartbeat
     m_publisherSocket.SendFrame(HeartbeatMessage);
 }
예제 #9
0
            private void PingElapsed(object sender, NetMQTimerEventArgs e)
            {
                Assumes.NotNull(m_transmit);

                SendUdpFrame(m_transmit);
            }
예제 #10
0
        private void OnPingPeer(object sender, NetMQTimerEventArgs e)
        {
            foreach (var peer in _peers.Values)
            {
                var clockTime = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond;
                if (clockTime >= peer.ExpiredAt)
                {
                    if (_verbose)
                    {
                        Trace.WriteLine(
                            string.Format(
                                "({0}) peer expired name={1} endpoint={2}",
                                _name,
                                peer.Name,
                                peer.Endpoint));
                    }

                    RemovePeer(peer);
                }
                else if (clockTime >= peer.EvasiveAt)
                {
                    //  If peer is being evasive, force a TCP ping.
                    //  TODO: do this only once for a peer in this state;
                    //  it would be nicer to use a proper state machine
                    //  for peer management.
                    if (_verbose)
                    {
                        Trace.WriteLine(
                            string.Format(
                                "({0}) peer seems dead/slow name={1} endpoint={2}",
                                _name,
                                peer.Name,
                                peer.Endpoint));
                    }

                    var ping = new ZreMessage(ZreMessageType.Ping);
                    peer.Send(ping);

                    // Inform the calling application this peer is being evasive
                    _pipe
                        .SendMoreFrame("EVASIVE")
                        .SendMoreFrame(peer.Identity.ToString())
                        .SendFrame(peer.Name);
                }
            }
        }