Ejemplo n.º 1
0
        /// <summary>
        /// Starts processes to capture network data for all available devices
        /// </summary>
        protected void StartNetworkDataCapture()
        {
            captureResetEvent.Set();

            var devices = CaptureDeviceList.Instance;

            foreach (var device in devices)
            {
                if (isAdvancedLogEnabled)
                {
                    LogProvider.Log.Info(this, $"Found device: {device.Name}, {device.Description}. [{SiteString}]");
                }

                try
                {
                    device.Open(DeviceMode.Normal);

                    var captureDevice = new CaptureDevice(device)
                    {
                        IsOpened = true
                    };

                    captureDevices.Push(captureDevice);
                }
                catch (Exception e)
                {
                    LogProvider.Log.Error(this, $"Failed to open device {device.Name}. [{SiteString}]", e);
                }
            }

            captureDevices.ForEach(captureDevice => Task.Run(() => CaptureData(captureDevice)));
        }
Ejemplo n.º 2
0
        public void Test()
        {
            ConcurrentStack<int> stack = new ConcurrentStack<int>();
            stack.ForEach(i => Console.WriteLine(i));
            Console.WriteLine("---------------");
            CountDownLatch mutex = new CountDownLatch(20);
            for (int i = 1; i <= mutex.Count; i++)
            {
                ThreadPool.QueueUserWorkItem((state) =>
                {
                    stack.Push((int)state);
                    mutex.CountDown();
                }, i);
            }

            mutex.Await();
            stack.ForEach(i => Console.WriteLine(i));
           
        }
Ejemplo n.º 3
0
        public void Test()
        {
            ConcurrentStack <int> stack = new ConcurrentStack <int>();

            stack.ForEach(i => Console.WriteLine(i));
            Console.WriteLine("---------------");
            CountDownLatch mutex = new CountDownLatch(20);

            for (int i = 1; i <= mutex.Count; i++)
            {
                ThreadPool.QueueUserWorkItem((state) =>
                {
                    stack.Push((int)state);
                    mutex.CountDown();
                }, i);
            }

            mutex.Await();
            stack.ForEach(i => Console.WriteLine(i));
        }
Ejemplo n.º 4
0
            private void InternalRegisterDependencies(IServiceContainer container)
            {
                // Регистрирую общие зависимости
                _listOfNativeDependencies.ForEach(t =>
                {
                    try
                    {
                        //смотрим по атрибуту, с каким временем жизни надо регистрировать тип
                        var registerAttr = t.GetCustomAttribute <RegisterAttribute>(false);
                        var lifetime     = registerAttr?.Lifetime ?? RegisterAttribute.DefaultLifetime;

                        //получаем интерфейс для регистрации
                        Type serviceType = registerAttr?.ServiceType;

                        //Регистрируем от интерфейса
                        if (serviceType != null)
                        {
                            container.Register(serviceType, t, _lifetimeDict[lifetime]());
                        }
                        else
                        {
                            // Регестрируем сервисы как реализацию интерфейсов от которых они унаследованы
                            t.GetInterfaces()
                            .Where(i => !(i == typeof(IDependency) || i == typeof(IDisposable) || i == typeof(IValidator)))
                            .ForEach(i =>
                            {
                                // Проверка по равенству наименований интерфейса и класса наслединка
                                // Пример - Интерфейс: ISomeLogic, Имя класса: SomeLogic
                                if (i.Name.StartsWith("I") && i.Name.Substring(1) == t.Name)
                                {
                                    container.Register(i, t, _lifetimeDict[lifetime]());
                                }
                            }
                                     );
                        }

                        //регистрирую как самого себя в любом случае
                        container.Register(t, _lifetimeDict[lifetime]());
                    }
                    catch (Exception ex)
                    {
                        // Не удалось зарегистрировать один из типов
                        Debug.WriteLine($"{typeof(LegacyServiceBase).Namespace}\r\n{ex}");
                    }
                });

                // Регистрирую частные зависимости
                _listOfCustomDependencies
                .ForEach(mi =>
                {
                    try
                    {
                        mi.Invoke(null, new object[] { container });
                    }
                    catch (Exception exception)
                    {
                        // Не удалось исполнить частную регистрацию типа
                        Debug.WriteLine($"{typeof(LegacyServiceBase).Namespace}\r\n{exception}");
                    }
                });

                // Регистрирую Automapper
                try
                {
                    var mapper = CreateMapper(_listOfMapperProfiles);
                    container.RegisterInstance(mapper);
                }
                catch (Exception ex)
                {
                    // Не удалось зарегистрировать Automapper
                    Debug.WriteLine($"{typeof(LegacyServiceBase).Namespace}\r\n{ex}");
                }

                //Регистрирую логгер
                try
                {
                    container.Register(typeof(Logger <>));
                }
                catch (Exception ex)
                {
                    // Не удалось зарегистрировать логгер
                    Debug.WriteLine($"{typeof(LegacyServiceBase).Namespace}\r\n{ex}");
                }

                //регистрирую кэши
                _listOfCaches.ForEach(t =>
                {
                    try
                    {
                        //каждый кэш - синглтон. За счет этого механизм автообновления (реализуемый в провайдере) всегда может получить доступ к кэшу.
                        //ps. todo: с этим можно поспорить, так что тут есть что еще обсудить..
                        container.Register(t, new PerContainerLifetime());
                    }
                    catch (Exception ex)
                    {
                        // Не удалось зарегистрировать один из типов
                        Debug.WriteLine($"{typeof(LegacyServiceBase).Namespace}\r\n{ex}");
                    }
                });
            }