/// <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; }
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); }
/// <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; }
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)); }