Пример #1
0
        public void Search(SearchRun searchRun)
        {
            try
            {
                WordSemanticBranch lnk = null;

                if (!searchRun.ForceSearch)
                {
                    lnk = m_SemanticHelper.GetSemanticLinkFromDB(searchRun.WordLink.ParentWord.Word);

                    if (lnk != null)
                    {
                        if (lnk.ParentWord.Status == WordStatus.eNotProcessed)
                        {
                            lnk = null;
                        }
                    }
                }

                if (lnk == null)
                {
                    m_SemanticHelper.UpdateWordStatus(searchRun.WordLink.ParentWord, WordStatus.eInProgress);
                    OnExplProcessed(new ExplProcessedEventArgs(searchRun, false));
                    GetSemanticLink(searchRun);
                }
                else
                {
                    //searchRun.WordLink = lnk;
                }

                //m_SemanticHelper.UpdateWordStatus(curRun.WordLink.ParentWord, WordStatus.eNotProcessed);//WordStatus.eInProgress);
                //OnExplProcessed(new ExplProcessedEventArgs(curRun, false));

                //searchRun.WordLink =
                //GetSemanticLink(searchRun);
                //WordSemanticLink link = GetSemanticLink(searchRun);
                //if (!m_ListLinks.Keys.Contains(searchRun.WordToSearch))
                //{
                //    m_ListLinks.Add(link.ParentWord.Word, link);
                //    OnExplProcessed(new ExplProcessedEventArgs(searchRun, true));
                //}

                int nNewDeepSearch = searchRun.DeepSearch - 1;
                foreach (WordLink aLink in searchRun.WordLink.Children)
                {
                    if (aLink.RelationType == WordLinkType.eNormal ||
                        aLink.RelationType == WordLinkType.eTentative)
                    {
                        WordSemanticBranch childLink = m_SemanticHelper.GetSemanticLinkFromDB(aLink.Child.Word);
                        if (childLink == null)
                        {
                            m_SemanticHelper.UpdateWordStatus(aLink.Child, WordStatus.eNotProcessed);
                            childLink            = new WordSemanticBranch();
                            childLink.ParentWord = aLink.Child;
                            m_SemanticHelper.AddDictionaryWord(childLink);
                        }
                        OnExplProcessed(new ExplProcessedEventArgs(new SearchRun(childLink, 0, false, 0), true));

                        ThreadPool.QueueUserWorkItem(new WaitCallback(this.StartSearch), new SearchRun(childLink, searchRun.DeepSearch - 1, searchRun.ForceSearch, searchRun.CurDeep + 1));
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(string.Format("{0}\n{1}", "CLientLogic.Search", ex.Message));
            }
        }