コード例 #1
0
 /// <summary>
 /// Ctor: Infuse app services.
 /// </summary>
 /// <remarks>
 /// Default null values make controller accessible to <see cref="IndexController"/>.
 /// That way, functionality is limited to serving static pages.
 /// </remarks>
 public DynpageController(PageProvider pageProvider, IConfiguration config, ILoggerFactory loggerFactory,
                          Auth auth, SqlDict dict, CountryResolver cres, QueryLogger qlog, Sphinx sphinx, LangRepo langRepo)
 {
     this.cres         = cres;
     this.pageProvider = pageProvider;
     this.dict         = dict;
     this.sphinx       = sphinx;
     this.qlog         = qlog;
     this.config       = config;
     this.logger       = loggerFactory.CreateLogger("DynpageController");
     this.auth         = auth;
     this.langRepo     = langRepo;
 }
コード例 #2
0
        private void GenerateAndVisitSphinx(Position sphinxPosition)
        {
            if (sphinx == null)
            {
                this.sphinx = new Sphinx(sphinxPosition,
                                         SphinxConstants.BonusGold * levelGenerator.CurrentLevelNumber,
                                         SphinxConstants.MinusHealth * levelGenerator.CurrentLevelNumber);
            }
            if (sphinx.IsVisited)
            {
                Visualisator.PrintUnderTheBattleField(VisualisatorConstants.SphinxIsVisited);
                return;
            }
            var riddle = new Riddle();

            riddle.LoadQuestion();
            bool IsTheAnswerCorrect = riddle.IsItRight();

            sphinx.IsVisited = true;
            if (IsTheAnswerCorrect)
            {
                player.Gold += sphinx.BonusGold;
            }
            else
            {
                if (player.Health <= sphinx.MinusHealth)
                {
                    player.Health = 1;
                }
                else
                {
                    player.Health -= sphinx.MinusHealth;
                }
            }
            Visualisator.PrintAllMap(dungeon, player);
        }
コード例 #3
0
 /// <summary>
 /// Ctor: init controller within app environment.
 /// </summary>
 public CorpusController(Sphinx sphinx, QueryLogger qlog, CountryResolver cres)
 {
     this.sphinx = sphinx;
     this.qlog   = qlog;
     this.cres   = cres;
 }
コード例 #4
0
        public IActionResult Go([FromQuery] string query)
        {
            int          limit = 100;
            SearchResult res   = new SearchResult();

            query           = query.Trim();
            res.ActualQuery = query;
            if (query.Length == 0)
            {
                return(new ObjectResult(res));
            }

            bool isZhoSearch = hasHanzi(query);

            if (!isZhoSearch)
            {
                query = pruneSurf(query, true, null);
            }
            res.ActualQuery = query;

            SphinxResult sres = Sphinx.Query(query, isZhoSearch, limit);

            if (sres == null)
            {
                return(StatusCode(500));
            }
            using (BinReader br = new BinReader("zhhu-data.bin"))
            {
                List <float>  trgHilites  = new List <float>();
                List <float>  srcHilites  = new List <float>();
                HashSet <int> usedPoss    = new HashSet <int>();
                int           resultCount = 0;
                // Render surface search results
                foreach (int pos in sres.SurfSegPositions)
                {
                    ++resultCount;
                    usedPoss.Add(pos);
                    br.Position = pos;
                    CorpusSegment cseg = new CorpusSegment(br);
                    if (isZhoSearch)
                    {
                        buildHilitesZhoToHu(query, cseg, trgHilites, srcHilites);
                    }
                    else
                    {
                        buildHilitesHuToZho(query, null, cseg, trgHilites, srcHilites);
                    }
                    res.SrcSegs.Add(renderSegment(cseg.ZhSurf, srcHilites, isZhoSearch));
                    res.TrgSegs.Add(renderSegment(cseg.TrgSurf, trgHilites, isZhoSearch));
                }
                // Render stem search results to fill up to limit
                for (int i = 0; i < sres.StemmedSegs.Count && resultCount < limit; ++i)
                {
                    int pos = sres.StemmedSegs[i].Key;
                    if (usedPoss.Contains(pos))
                    {
                        continue;
                    }
                    ++resultCount;
                    br.Position = pos;
                    CorpusSegment cseg = new CorpusSegment(br);
                    buildHilitesHuToZho(sres.StemmedQuery, sres.StemmedSegs[i].Value, cseg, trgHilites, srcHilites);
                    res.SrcSegs.Add(renderSegment(cseg.ZhSurf, srcHilites, isZhoSearch));
                    res.TrgSegs.Add(renderSegment(cseg.TrgSurf, trgHilites, isZhoSearch));
                }
            }
            return(new ObjectResult(res));
        }