Example #1
0
        public Client()
        {
            using (FileStream fs = new FileStream("ConfigClient.xml", FileMode.OpenOrCreate))
            {
                Configuration = (Configuration) new XmlSerializer(typeof(Configuration)).Deserialize(fs);

                client = new UdpClient();
                client.ExclusiveAddressUse = false;
                localEp = new IPEndPoint(IPAddress.Any, Configuration.LocalPort);
                client.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
                client.ExclusiveAddressUse = false;
                client.Client.Bind(localEp);
                multicastaddress = IPAddress.Parse(Configuration.IP);
                client.JoinMulticastGroup(multicastaddress);
                Console.WriteLine("Настройки загружены!");
            }
        }
Example #2
0
        private void ProduceMessages()
        {
            using var udpClient = new UdpClient(_options.Port, AddressFamily.InterNetwork);
#if DEBUG
            Task.Run(() =>
            {
                while (true)
                {
                    Console.WriteLine($"Available packages on {DateTime.Now:T}: {udpClient.Available}");
                    Thread.Sleep(1000);
                }
            });
#endif

            var address = IPAddress.Parse(_options.IpAddress);
            udpClient.JoinMulticastGroup(address);
            var previousMessageNumber = long.MinValue;

            while (true)
            {
                if (_hold > 0)
                {
                    _resetEvent.WaitOne();
                }

                try
                {
                    IPEndPoint remoteIp = null;
                    byte[]     data     = udpClient.Receive(ref remoteIp);
                    using var stream = new MemoryStream(data);
                    var message = Serializer.Deserialize <Message>(stream);
                    _cache.Add(message.Value);

                    if (previousMessageNumber + 1 != message.SequenceNumber)
                    {
                        Interlocked.Increment(ref _lossPackagesCount);
                    }
                    previousMessageNumber = message.SequenceNumber;
                }
                catch (Exception e)
                {
                    ExceptionHandler.Handle(e);
                }
            }
        }
Example #3
0
        public void Start()
        {
            _udpClient = new UdpClient(_port);
            _udpClient.JoinMulticastGroup(_multiCastGroup, 5);
            while (true)
            {
                if (_nextDelaySeconds > 0)
                {
                    Thread.Sleep(1000 * _nextDelaySeconds);
                    _udpClient.Dispose();
                    _udpClient = new UdpClient(_port);
                    _udpClient.JoinMulticastGroup(_multiCastGroup, 5);
                    _nextDelaySeconds = 0;
                }

                var data    = _udpClient.Receive(ref _ipEndPoint);
                var number  = BitConverter.ToInt32(data, 0);
                var counter = BitConverter.ToInt32(data, 4);
                _handler(number, counter);
            }
        }