Beispiel #1
0
 public void Register(IInputProvider input)
 {
     if (input != null)
     {
         Context.Debug(() => $"Registering {input.GetType().Name}.");
     }
     InputProvider = input;
 }
Beispiel #2
0
        public void SubscribeInputProvider(IInputProvider newInputProvider)
        {
            bool providerAlreadyExists = false;

            foreach (var provider in this.inputProviders)
            {
                if (provider.GetType() == newInputProvider.GetType())
                {
                    providerAlreadyExists = true;
                    break;
                }
            }
            if (!providerAlreadyExists)
            {
                inputProviders.Add(newInputProvider);
                SubscribeToInputProviderEvents(newInputProvider);
            }
        }
Beispiel #3
0
        static void Initialization(Configuration config)
        {
            Logger = new Logger.Logger(config.LogPath, new TimeProvider());
            Logger.Log("Logger initialized");

            Reader = InputProviderFactory.CreateInputReader(config);
            Logger.Log("Reader of type " + Reader.GetType().Name + " initialized");

            Driver = new InternetExplorerDriver("Resources/");
            Logger.Log("InternetExplorerDriver initialized");

            Parsers = new List <IAbstractSiteParser>()
            {
                //new Auto911Parser("http://911auto.com.ua/search/", Driver, Logger),
                //new AutoKlad("SiteParser/IE Driver/", Logger)
            };
            Logger.Log("Site parsers initialized");

            Store = DataStoreFactory.CreateDataStore(config, Logger);
            Logger.Log("DataStore of type " + Store.GetType() + "Initialized");
        }
Beispiel #4
0
        private void InitializeInputProvider()
        {
            var providerInterfaceType = typeof(IInputProvider);
            var path = Path.Combine(App.DataDir, ProvidersRootDir, _settings.InputProviderPath);

            try {
                if (!File.Exists(path))
                {
                    Log.Error($"Could not load input provider. File does not exist at {path}");
                    return;
                }
            }
            catch (Exception e) {
                Log.Error($"Caught file exception related to input provider: {e}");
                return;
            }

            if (!TryLoadAssemblyFrom(path, out var a))
            {
                Log.Error("Failed to load assembly for provider.");
                return;
            }

            Log.Info("Provider assembly loaded. Searching for instances.");
            Type providerType = null;

            foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies())
            {
                foreach (var type in assembly.GetTypes())
                {
                    if (!providerInterfaceType.IsAssignableFrom(type) || !type.IsClass || type.IsAbstract)
                    {
                        continue;
                    }
                    providerType = type;
                    break;
                }
            }

            if (providerType == null)
            {
                Log.Error($"No {providerInterfaceType.Name} implementation could be found inside the loaded assembly {path}");
                return;
            }

            object instance = null;

            try {
                instance  = Activator.CreateInstance(providerType);
                _provider = (IInputProvider)instance;
            }
            catch (Exception e) {
                Log.Error($"Exception thrown when instantiating or casting provider '{instance.GetType().Name}': {e}");
                return;
            }

            if (_provider == null)
            {
                Log.Error($"Unknown error. Provider could not be instantiated/cast to {providerInterfaceType.Name}");
                return;
            }

            _provider.Cursor   = this;
            _provider.DataDir  = App.DataDir;
            _provider.Hotspots = Hotspots;

            try {
                _provider.Start();
                Log.Info($"Input provider '{_provider.GetType().Name}'");
            }
            catch (Exception e) {
                Log.Error($"Exception caught while starting {_provider.GetType().Name}. {e}");
            }
        }
Beispiel #5
0
        private IEnumerable<CommandBinding> GetDefaultBindings(IInputProvider inputProvider, ICommand command)
        {
            if (command == null) {
                yield break;
            }

            var attributes = command.GetType().GetCustomAttributes(typeof(DefaultBindingAttribute), false).OfType<DefaultBindingAttribute>();

            foreach (var defaultBinding in attributes.Where((attr) => attr.ProviderType == inputProvider.GetType())) {
                yield return new CommandBinding(defaultBinding.InputSequence, command);
            }
        }