Example #1
0
 private void Broadcast()
 {
     Socket sendUdpSocket = null;
     Socket receiveUdpSocket = null;
     try
     {
         var noticeForSend = new ScannerBroadcastNotice(_scanner.SerialNumber, _scanner.Status);
         sendUdpSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Unspecified);
         sendUdpSocket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, 1);
         var sendEndPoint = new IPEndPoint(_broadcastIpAddress, UDP_BROADCAST_PORT);
         receiveUdpSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Unspecified)
                                {
                                    Blocking = false // режим неблокированной работы
                                };
         EndPoint receiveEndPoint = new IPEndPoint(IPAddress.Any, UDP_BROADCAST_PORT);
         receiveUdpSocket.Bind(receiveEndPoint);
         try
         {
             sendUdpSocket.SendTo(noticeForSend.Data, sendEndPoint);
             _logger.LogVerbose(Message.ScannerBrodcastMessageSended);
         }
         catch (Exception ex)
         {
             if (ex is RemotingException || ex is SocketException)
                 _logger.LogInfo(Message.ScannerManagerSendingFirstMessageError, ex.Message);
             else
                 _logger.LogError(Message.ScannerManagerSendingFirstMessageError, ex);
         }
         while (true)
         {
             try
             {
                 while (receiveUdpSocket.Poll(READ_TIMEOUT, SelectMode.SelectRead))
                 {
                     var data = new byte[ScannerBroadcastNotice.DATA_LENGTH];
                     receiveUdpSocket.ReceiveFrom(data, ref receiveEndPoint);
                     if (_connectorEventsHandler == null)
                         break;
                     var remoteAdress = ((IPEndPoint) receiveEndPoint).Address.ToString();
                     if (string.CompareOrdinal(_scanner.IPAddress, remoteAdress) == 0)
                         continue;
                     var receivedData = new ScannerBroadcastNotice(data);
                     _connectorEventsHandler.Connected(
                         receivedData.SerialNumber,
                         remoteAdress);
                 }
             }
             catch (ThreadAbortException)
             {
                 throw;
             }
             catch (Exception ex)
             {
                 if (ex is RemotingException || ex is SocketException)
                     _logger.LogInfo(Message.ScannerManagerPollMessageError, ex.Message);
                 else
                     _logger.LogError(Message.ScannerManagerPollMessageError, ex);
             }
             if (_stopBroadcastEvent.WaitOne(SEND_TIMEOUT))
                 return;
             try
             {
                 sendUdpSocket.SendTo(noticeForSend.Data, sendEndPoint);
                 _logger.LogVerbose(Message.ScannerBrodcastMessageSended);
             }
             catch (Exception ex)
             {
                 if (ex is RemotingException || ex is SocketException)
                     _logger.LogInfo(Message.ScannerManagerSendingMessageError, ex.Message);
                 else
                     _logger.LogError(Message.ScannerManagerSendingMessageError, ex, ex.Message);
             }
         }
     }
     catch (ThreadAbortException)
     {
         _logger.LogVerbose(Message.ScannerBrodcastMessagingStopped);
     }
     catch (Exception ex)
     {
         _logger.LogError(Message.ScannerManagerBroadcastError, ex);
     }
     finally
     {
         if (receiveUdpSocket != null)
             receiveUdpSocket.Close();
         if (sendUdpSocket != null)
             sendUdpSocket.Close();
     }
 }
Example #2
0
        private void Broadcast()
        {
            Socket sendUdpSocket    = null;
            Socket receiveUdpSocket = null;

            try
            {
                var noticeForSend = new ScannerBroadcastNotice(_scanner.SerialNumber, _scanner.Status);
                sendUdpSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Unspecified);
                sendUdpSocket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, 1);
                var sendEndPoint = new IPEndPoint(_broadcastIpAddress, UDP_BROADCAST_PORT);
                receiveUdpSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Unspecified)
                {
                    Blocking = false                        // режим неблокированной работы
                };
                EndPoint receiveEndPoint = new IPEndPoint(IPAddress.Any, UDP_BROADCAST_PORT);
                receiveUdpSocket.Bind(receiveEndPoint);
                try
                {
                    sendUdpSocket.SendTo(noticeForSend.Data, sendEndPoint);
                    _logger.LogVerbose(Message.ScannerBrodcastMessageSended);
                }
                catch (Exception ex)
                {
                    if (ex is RemotingException || ex is SocketException)
                    {
                        _logger.LogInfo(Message.ScannerManagerSendingFirstMessageError, ex.Message);
                    }
                    else
                    {
                        _logger.LogError(Message.ScannerManagerSendingFirstMessageError, ex);
                    }
                }
                while (true)
                {
                    try
                    {
                        while (receiveUdpSocket.Poll(READ_TIMEOUT, SelectMode.SelectRead))
                        {
                            var data = new byte[ScannerBroadcastNotice.DATA_LENGTH];
                            receiveUdpSocket.ReceiveFrom(data, ref receiveEndPoint);
                            if (_connectorEventsHandler == null)
                            {
                                break;
                            }
                            var remoteAdress = ((IPEndPoint)receiveEndPoint).Address.ToString();
                            if (string.CompareOrdinal(_scanner.IPAddress, remoteAdress) == 0)
                            {
                                continue;
                            }
                            var receivedData = new ScannerBroadcastNotice(data);
                            _connectorEventsHandler.Connected(
                                receivedData.SerialNumber,
                                remoteAdress);
                        }
                    }
                    catch (ThreadAbortException)
                    {
                        throw;
                    }
                    catch (Exception ex)
                    {
                        if (ex is RemotingException || ex is SocketException)
                        {
                            _logger.LogInfo(Message.ScannerManagerPollMessageError, ex.Message);
                        }
                        else
                        {
                            _logger.LogError(Message.ScannerManagerPollMessageError, ex);
                        }
                    }
                    if (_stopBroadcastEvent.WaitOne(SEND_TIMEOUT))
                    {
                        return;
                    }
                    try
                    {
                        sendUdpSocket.SendTo(noticeForSend.Data, sendEndPoint);
                        _logger.LogVerbose(Message.ScannerBrodcastMessageSended);
                    }
                    catch (Exception ex)
                    {
                        if (ex is RemotingException || ex is SocketException)
                        {
                            _logger.LogInfo(Message.ScannerManagerSendingMessageError, ex.Message);
                        }
                        else
                        {
                            _logger.LogError(Message.ScannerManagerSendingMessageError, ex, ex.Message);
                        }
                    }
                }
            }
            catch (ThreadAbortException)
            {
                _logger.LogVerbose(Message.ScannerBrodcastMessagingStopped);
            }
            catch (Exception ex)
            {
                _logger.LogError(Message.ScannerManagerBroadcastError, ex);
            }
            finally
            {
                if (receiveUdpSocket != null)
                {
                    receiveUdpSocket.Close();
                }
                if (sendUdpSocket != null)
                {
                    sendUdpSocket.Close();
                }
            }
        }