// проверяет, ранее уже вбивали это слово или нет // вход - структура ответа, структура уровня // выход - флаг присутствия ответа в списках private static bool checkAlreadyExist(Answ q1, Level lvl) { List <string> old = new List <string>(); old.AddRange(lvl.answers_bad); old.AddRange(lvl.answers_good); foreach (string s in lvl.bonus) { if (s != "") { old.Add(s); } } foreach (string s in lvl.sector) { if (s != "") { old.Add(s); } } bool f1 = old.Contains(q1.wrd); bool f2 = old.Contains(q1.wrd2); return(f1 || f2); }
public void GetAnswJSON(String idk) { string query = "SELECT [IdOtvet] ,[Otvet] FROM [Otvet]where [IdVopr]=" + idk; Context.Response.Clear(); Context.Response.ContentType = "application/json"; SqlConnection cn = new SqlConnection("Data Source=.;Initial Catalog=dbtest11;User ID=sa;Password=Ise123123;Persist Security Info=True;"); cn.Open(); DataTable tbl = new DataTable(); SqlDataAdapter da = new SqlDataAdapter(query, cn); da.Fill(tbl); List <Answ> q = new List <Answ>(); int i = 0; foreach (DataRow item in tbl.Rows) { Answ e = new Answ(); e.IdOtvet = Convert.ToInt16(item["IdOtvet"].ToString()); e.Otvet = item["Otvet"].ToString(); q.Add(e); i = i + 1; } cn.Close(); JavaScriptSerializer js = new JavaScriptSerializer(); Context.Response.Write(js.Serialize(q)); }
public async Task <bool> CheckIfExists(Answ location) { await SyncAsync(true); var locations = await azureSyncTable.Where(x => x.Id == location.Id).ToListAsync(); return(locations.Any()); }
public RedirectViewModel(IAnsDB ansDB) { answerDB = ansDB; if (MyGlobals.answer != null) { Answ sel = MyGlobals.answer; insertAns(sel.AnsFrom, sel.AnsTo, sel.AnsCal, sel.AnsLoc, sel.AnsExtra); MyGlobals.answer = null; } ShowViewModel <NotificationViewModel>(); }
public async Task <int> InsertAns(string from, string to, string cal, string loc, string extra) { Answ answer = new Answ { AnsFrom = from, AnsTo = to, AnsCal = cal, AnsLoc = loc, AnsExtra = extra }; await SyncAsync(true); await azureSyncTable.InsertAsync(answer); await SyncAsync(false); return(1); }
// постановка слова в очередь // вход - Таб, приоритет, слово, 3 номера картинок // выход - нет, слово ставиться в очередь public static void Add(OneTab T, int priority, string wrd, int i1, int i2 = -1, int i3 = -1) { if ((i1 != 0) && (i2 != 0) && (i3 != 0)) { int lvlnum = T.level.number; string wrd2 = SetProtect(wrd, i1, T.sProtect); Answ q1 = new Answ(); q1.OT = T; q1.Tab = T.Tab; q1.Sec = T.tbSectors; q1.Bon = T.tbBonuses; q1.Web = T.wbPictures; q1.Txt = T.tbTextHints; q1.wrd = wrd; q1.wrd2 = wrd2; q1.lvlnum = T.level.number; q1.i1 = i1; q1.i2 = i2; q1.i3 = i3; q1.priority = priority; Queue.Add(q1); } }
// возвращает наиболее приоритетный ответ private static Answ GetNext() { int prior = 999; int i_prior = -1; int i_level = -1; int i_choice = -1; int cnt = Queue.Count; for (int i = 0; i < cnt; i++) { Answ q1 = Queue[i]; if (q1.priority < prior) { prior = q1.priority; i_prior = i; i_level = -1; } if ((q1.lvlnum == current_level) && (q1.priority == prior)) { i_level = i; } } if (i_level == -1) { i_choice = i_prior; } else { i_choice = i_level; } Answ q2 = Queue[i_choice]; Queue.Remove(q2); if (current_level != q2.lvlnum) { current_level = q2.lvlnum; } return(q2); }
// процесс вбивания. единственный и неповторимый public static bool Process() { // здесь нужно в бесконечном цикле просматривать очередь, выбирать наиболее приоритетные ответы и вбивать их // после любых вбитий - перечитывать парсенные данные и обновлять ГУИ // после успешных - обновлять все прочее bool isTrue = true; while (isTrue == true) { while (Queue.Count < 1) { System.Threading.Thread.Sleep(1000); } // получим следующее Answ q1 = GetNext(); // проверим, ранее вбивали или нет Level lvl = q1.OT.level; int oldsecbon = lvl.secbon; bool isAlreadyExist = checkAlreadyExist(q1, lvl); if (!isAlreadyExist) { // попробуем вбить string p1 = Engine.TryOne(q1.lvlnum, q1.wrd2); lvl.UpdateAnswersLevel(p1); q1.OT.level = lvl; // проверим, наш ответ удачен или нет? bool isYes = false; if (lvl.answers_good.Contains(q1.wrd2)) { isYes = true; } // были изменения секторов и бонусов? if ((isYes) || (oldsecbon != lvl.secbon)) { //очистим очередь от а) ответов с тем же ид б) от ответов с ид = номерам решенных секторов для картинок ClearQueue(q1); //надо обновить GUI string sec1 = ""; for (int i = 0; i < lvl.sectors; i++) { sec1 = sec1 + (i + 1).ToString() + ": " + lvl.sector[i] + "\r\n"; } q1.OT.tbSectors.Invoke(new Action(() => { q1.OT.tbSectors.Text = sec1; })); string bon1 = ""; for (int i = 0; i < lvl.bonuses; i++) { bon1 = bon1 + (i + 1).ToString() + ": " + lvl.bonus[i] + "\r\n"; } q1.OT.tbBonuses.Invoke(new Action(() => { q1.OT.tbBonuses.Text = bon1; })); // подчистить картинки в ГУИ if (q1.OT.isPicsSect) { string html = ""; q1.OT.wbPictures.Invoke(new Action(() => { html = q1.OT.wbPictures.DocumentText; })); string html2 = UpdateHtmlPics(html, lvl); q1.OT.wbPictures.Invoke(new Action(() => { q1.OT.wbPictures.DocumentText = html2; })); } } //нужно выждать какое-то время //System.Threading.Thread.Sleep(rnd1.Next(rnd_min, rnd_max)); } } return(true); }
// очищает очередь от всех ответов, где присутствуют ид из q1 // вход - ответ, по ид которого очищается очередь private static void ClearQueue(Answ q1) { int i1 = q1.i1; int i2 = q1.i2; int i3 = q1.i3; int j1, j2, j3; int cnt = Queue.Count; for (int i = cnt - 1; i >= 0; i--) { j1 = Queue[i].i1; j2 = Queue[i].i2; j3 = Queue[i].i3; bool fl = false; if ((i1 != -1) && (i1 == j1)) { fl = true; } if ((i1 != -1) && (i1 == j2)) { fl = true; } if ((i1 != -1) && (i1 == j3)) { fl = true; } if ((i2 != -1) && (i2 == j1)) { fl = true; } if ((i2 != -1) && (i2 == j2)) { fl = true; } if ((i2 != -1) && (i2 == j3)) { fl = true; } if ((i3 != -1) && (i3 == j1)) { fl = true; } if ((i3 != -1) && (i3 == j2)) { fl = true; } if ((i3 != -1) && (i3 == j3)) { fl = true; } if (fl) { Queue.RemoveAt(i); } } // почистим по номерам бонусов и секторов, если необходимо if (q1.OT.isPicsSect) { for (int i = 0; i < q1.OT.level.bonuses; i++) { string s1 = q1.OT.level.bonus[i]; string[] ar1 = s1.Split(' '); foreach (string s2 in ar1) { if ((s2 == q1.wrd) || (s2 == q1.wrd2)) { int cnt2 = Queue.Count; int jj1, jj2, jj3; for (int ii = cnt2 - 1; ii >= 0; ii--) { jj1 = Queue[ii].i1; jj2 = Queue[ii].i2; jj3 = Queue[ii].i3; if (i == jj1) { Queue.RemoveAt(ii); } } } } } for (int i = 0; i < q1.OT.level.sectors; i++) { string s1 = q1.OT.level.sector[i]; string[] ar1 = s1.Split(' '); foreach (string s2 in ar1) { if ((s2 == q1.wrd) || (s2 == q1.wrd2)) { int cnt2 = Queue.Count; int jj1, jj2, jj3; for (int ii = cnt2 - 1; ii >= 0; ii--) { jj1 = Queue[ii].i1; jj2 = Queue[ii].i2; jj3 = Queue[ii].i3; if (i == jj1) { Queue.RemoveAt(ii); } } } } } } }