private static bool Compare([NotNull] NetMQFrame a, [NotNull] NetMQFrame b, int size) { for (int i = 0; i < size; i++) { if (a.Buffer[i] != b.Buffer[i]) { return(false); } } return(true); }
private bool Compare(NetMQFrame a, NetMQFrame b, int size) { for (int i = 0; i < size; i++) { if (a.Buffer[i] != b.Buffer[i]) { return(false); } } return(true); }
private NetMQFrame ReceiveUdpFrame(out string peerName) { var buffer = new byte[UdpFrameMax]; EndPoint peer = new IPEndPoint(IPAddress.Any, 0); int bytesRead = m_udpSocket.ReceiveFrom(buffer, ref peer); var frame = new NetMQFrame(bytesRead); Buffer.BlockCopy(buffer, 0, frame.Buffer, 0, bytesRead); peerName = peer.ToString(); return(frame); }
private void SendUdpFrame(NetMQFrame frame) { Assumes.NotNull(m_udpSocket); try { m_udpSocket.SendTo(frame.Buffer, 0, frame.MessageSize, SocketFlags.None, m_broadcastAddress); } catch (SocketException ex) when(ex.SocketErrorCode == SocketError.AddressNotAvailable) { // Initiate Creation of new Udp here to solve issue related to 'sudden' network change. // On windows (7 OR 10) incorrect/previous ip address might still exist instead of new Ip // due to network change which causes crash (if no try/catch and keep trying to send to incorrect/not available address. // This approach would solve the issue... } }
private void OnPipeReady(object sender, NetMQSocketEventArgs e) { 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_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(false); break; default: throw new ArgumentOutOfRangeException(); } }
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(); } }
private bool TryReceiveUdpFrame(out NetMQFrame frame, out string peerName) { Assumes.NotNull(m_udpSocket); var buffer = new byte[UdpFrameMax]; EndPoint peer = new IPEndPoint(IPAddress.Any, 0); int bytesRead = 0; try { bytesRead = m_udpSocket.ReceiveFrom(buffer, ref peer); } catch (SocketException ex) when(ex.SocketErrorCode == SocketError.MessageSize) { frame = default; peerName = null; return(false); } peerName = peer.ToString(); frame = new NetMQFrame(buffer, bytesRead); return(true); }
private void SendUdpFrame(NetMQFrame frame) { m_udpSocket.SendTo(frame.Buffer, 0, frame.MessageSize, SocketFlags.None, m_broadcastAddress); }