コード例 #1
0
        public void SearchRoute(object args)
        {
            _updateInformationAboutSearching = ((SearchRouteArgs)args).DelegateToUpdatingInformationAboutSearching;
            _updateInformationAboutSearching("Searching direct connection", 0);
            Delegates.DeliverResults deliverResults = ((SearchRouteArgs)args).DelegateToDeliverResultsToView;

            List<SearchResultConnection> result = new List<SearchResultConnection>();

            SoughtConnection soughtConnection = ((SearchRouteArgs)args).UserSearchArgs.SoughtConnectionByUser;
            SearcherOfDirectRoutes searcherDirectRoutes = new SearcherOfDirectRoutes();
            SearchResultConnection directConnection = searcherDirectRoutes.FindDirectConnection(_repository, soughtConnection);
            if (directConnection != null)
            {
                result.Add(directConnection);
                deliverResults(result);
                result.Remove(directConnection);
            }

            if (((SearchRouteArgs)args).UserSearchArgs.ShouldSearchOnlyDirectConnections)
            {
                if (directConnection == null)
                {
                    _updateInformationAboutSearching("No results", 100);
                }
                else
                {
                    _updateInformationAboutSearching("Searching done", 100);
                }
                return;
            }
            _updateInformationAboutSearching("Searching indirect connection", 10);
            SearcherOfIndirectRoutes searcherOfIndirectRoutes = new SearcherOfIndirectRoutes();
            List<SearchResultConnection> indirectConnection = searcherOfIndirectRoutes.FindIndirectConnection(_repository, soughtConnection, _processInformationAboutIndirectSearchingAndDeliverToTheView);
            if (indirectConnection == null)
            {
                if (directConnection == null)
                {
                    _updateInformationAboutSearching("No results", 100);
                }
                else
                {
                    _updateInformationAboutSearching("Searching done", 100);
                }
                return;
            }
            result.AddRange(indirectConnection);
            deliverResults(result);

            if (directConnection == null && (indirectConnection == null || indirectConnection.Count == 0))
            {
                _updateInformationAboutSearching("No results", 100);
            }
            else
            {
                _updateInformationAboutSearching("Searching done", 100);
            }
        }
 private void SetDelagetes()
 {
     _ShowTimeForActualizationOfSchedule += ActualizeTimeForLoadingNewSchedule;
     _ShowTimeForSearchingRoute += ActualizeTimeForSearchingRoute;
     _deliverResultsToView += DeliverResultOfSearchingToTheView;
 }