static void CompleteTask() { try { while (doOtherThreads) { Task task; lock (tasksLocker) { task = tasks[0]; } int sleepTime = task.TimeUNIX - Utilites.NowUNIX(); if (sleepTime > 0) Thread.Sleep(sleepTime * 1000); try { task.Func(task.GameID); } catch (Exception e) { Debug.LogException(e); } lock (tasksLocker) { tasks.Remove(task); if (tasks.Count == 0) return; } } } catch (Exception e) { Debug.LogException(e); } }
public static void ParseLive() { if (lastLVParseTime.AddSeconds(5) > DateTime.Now) { return; } jsonFormats.ValueLV[] results; try { string url = "https://1xstavka.ru/LiveFeed/Get1x2_VZip?sports=8&count=50&mode=4&country=1&partner=51&getEmpty=true"; string strRes = Utilites.GetHTML(url); JavaScriptSerializer serializer = new JavaScriptSerializer(); var obj = serializer.Deserialize <jsonFormats.LiveRootObj>(strRes); if (obj == null || obj.Value == null) { return; } results = obj?.Value; } catch (Exception e) { Debug.LogException(e); return; } for (int i = 0; i < results.Length; i++) { jsonFormats.ValueLV result = results[i]; int id = result.N; Game game; result.E = RebuidE_array(result.E); if (result.E == null) { continue; } lock (Program.gamesLocker) { if (!Program.games.ContainsKey(id)) { continue; } game = Program.games[id]; game.startTimeUNIX = result.S; game.updTimeUNIX = Utilites.NowUNIX(); game.gameTime = result.SC.TS; if (result.E.Length < 10) { continue; } game.totalL = result.E[8].P; if (result.E.Length > 13 && game.favTeam > -1) { if (game.favTeam == 0) { game.iTotalL = result.E[10].P; game.iTkfMore = result.E[10].C; game.iTkfLess = result.E[11].C; } else { game.iTotalL = result.E[12].P; game.iTkfMore = result.E[12].C; game.iTkfLess = result.E[13].C; } } if (result.SC != null && result.SC.PS != null && result.SC.PS.Length > 0) { game.teams[0].goals1T = result.SC.PS[0].Value.S1; game.teams[1].goals1T = result.SC.PS[0].Value.S2; } game.TkfMore = result.E[8].C; game.TkfLess = result.E[9].C; game.teams[0].name = result.O1; game.teams[1].name = result.O2; Program.games[id] = game; } } // if (results != null && results.Length > 0) { lastLVParseTime = DateTime.Now; } }
//Я понимаю, что весь код связанный с json нечитабелен, но json в //источнике минифицирован, поэтому я просто не знал, что делать public static void ParseLine(int ID = -1) { if (lastLNParseTime.AddSeconds(5) > DateTime.Now) { return; } Debug.Log("Проверяю страницу \"Линия\""); jsonFormats.ValueLN[] results; try { string url = "https://1xstavka.ru/LineFeed/Get1x2_VZip?sports=8&count=50&mode=4&country=1&partner=51&getEmpty=true"; string strRes = Utilites.GetHTML(url); JavaScriptSerializer serializer = new JavaScriptSerializer(); var obj = serializer.Deserialize <jsonFormats.LineRootObj>(strRes); if (obj == null || obj.Value == null) { return; } results = obj?.Value; } catch (Exception e) { Debug.LogException(e); return; } for (int i = 0; i < results.Length; i++) { jsonFormats.ValueLN result = results[i]; int id = result.N; Game game; result.E = RebuidE_array(result.E); if (result.E == null) { continue; } bool containsGame; lock (Program.gamesLocker) { containsGame = Program.games.ContainsKey(id); game = containsGame ? Program.games[id] : new Game(); game.league = result.L; game.startTimeUNIX = result.S; game.updTimeUNIX = Utilites.NowUNIX(); if (result.E.Length < 10) { continue; } game.totalF = result.E[8].P; game.TkfMore = result.E[8].C; game.TkfLess = result.E[9].C; game.teams[0].name = result.O1; game.teams[1].name = result.O2; game.teams[0].kf = result.E[0].C; game.teams[1].kf = result.E[2].C; Program.games[id] = game; } if (game.startTimeUNIX < Utilites.NowUNIX() + 301) { if (game.teams[0].kf > 0 && game.teams[0].kf <= 1.6) { game.favTeam = 0; } else if (game.teams[1].kf > 0 && game.teams[1].kf <= 1.6) { game.favTeam = 1; } if (result.E.Length > 13 && game.favTeam > -1) { game.iTotalF = result.E[12 + game.favTeam].P; } //Алгоритм, который проверяет и удаляет игру в конце if (!game.deleteFuncIsActivated) { Task task = new Task { GameID = id, TimeUNIX = game.startTimeUNIX + 3660, //61 min Func = Algorithms.CheckOnTheEnd }; TasksMgr.AddTask(task); game.deleteFuncIsActivated = true; }/* * if (!game.algoritms[0].actived) * { * Task task = new Task * { * GameID = id, * TimeUNIX = game.startTimeUNIX + 600, //10 min * Func = Algorithms.FirstAlg * }; * TasksMgr.AddTask(task); * game.algoritms[0].actived = true; * }*/ if (!game.algoritms[1].actived) { Task task = new Task { GameID = id, TimeUNIX = game.startTimeUNIX + 300, //5 min Func = Algorithms.SecondAlg }; TasksMgr.AddTask(task); game.algoritms[1].actived = true; }/* * if (!game.algoritms[2].actived && game.favTeam >= 0) * { * Task task = new Task * { * GameID = id, * TimeUNIX = game.startTimeUNIX + 1800, //30 min * Func = Algorithms.ThirdAlg * }; * TasksMgr.AddTask(task); * game.algoritms[2].actived = true; * }*/ } else if (!containsGame) { int rand = (int)(new Random().NextDouble() * 150); Task task = new Task { GameID = id, TimeUNIX = game.startTimeUNIX - 300 + rand, Func = ParseLine }; TasksMgr.AddTask(task); } } // if (results != null && results.Length > 0) { lastLNParseTime = DateTime.Now; } }
public static void SecondAlg(int id) { Parser.ParseLive(); lock (Program.gamesLocker) { Game game = Program.games[id]; if (game.gameTime > 1200) //20 min { return; } bool ret = false; if (game.updTimeUNIX + 30 > Utilites.NowUNIX() && game.totalF * game.totalL > 0) { string team1 = game.teams[0].name; string team2 = game.teams[1].name; Debug.Log("Проверка игры \"" + team1 + " - " + team2 + "\" на \"Тотал в 1 тайме\""); if (game.teams[0].kf * game.teams[1].kf > 0) { team1 += " (" + game.teams[0].kf + ")"; team2 += " (" + game.teams[1].kf + ")"; } double totalF = Math.Round(game.totalF / 2); double totalL = Math.Round(game.totalL / 2); double deltaTotal = totalL - totalF; string recomend = ""; if (deltaTotal >= 5) { recomend = "ТБ " + totalL + " - " + game.TkfLess; Program.games[id].algoritms[1].sendedTotal = totalL; Program.games[id].algoritms[1].tMore = false; } else if (deltaTotal <= -4) { recomend = "ТМ " + totalL + " - " + game.TkfMore; Program.games[id].algoritms[1].sendedTotal = totalL; Program.games[id].algoritms[1].tMore = true; } //Calculating rate // double rate = game.teams[0].goals1T + game.teams[1].goals1T; //оставить 2 знака после запятой ииии 1800=30*60 из уравнения клиента rate -= Math.Round(game.totalF * game.gameTime / 1800, 2); string text = "#Signal_" + Params.LastSignalNumer + "\nАлгоритм - \"Тотал в 1 тайме\"" + "\nЛига - \"" + game.league + "\"" + "\nКоманда - \"" + team1 + " - " + team2 + "\"" + "\nВремя - \"" + TimeSpan.FromSeconds(game.gameTime).ToString("mm\\:ss") + "\"" + "\nСчёт - \"" + game.teams[0].goals1T + ":" + game.teams[1].goals1T + "\"" + "\n" + "\nНачальный тотал - \"" + totalF + "\"" + "\n" + "\nТемп - \"" + rate + "\"" + "\nСейчас тотал - \"" + totalL + "\"" + "\nРазница тотала - \"" + deltaTotal + "\"" + "\nРекомендую - \"" + recomend + "\""; if (recomend.Length > 0) { ret = Telegram.SendMessagesFromAlgorithms(text, 2, id); } } if (!ret) { TasksMgr.AddTask(new Task { TimeUNIX = Utilites.NowUNIX() + 25, Func = SecondAlg, GameID = id }); } else //if signal was succesful sended to anybody { Params.LastSignalNumer++; } } }
public static void CheckOnTheEnd(int id) { Parser.ParseEndGameResults(id); lock (Program.gamesLocker) { Game game = Program.games[id]; //if game wasn't finished if (!game.isFinished) { TasksMgr.AddTask(new Task { TimeUNIX = Utilites.NowUNIX() + 30, Func = CheckOnTheEnd, GameID = id }); return; } //смайлы в Telegram string yes = Encoding.UTF8.GetString(new byte[] { 0xE2, 0x9C, 0x85 }); string not = Encoding.UTF8.GetString(new byte[] { 0xE2, 0x9D, 0x8E }); string text; double goals; Algoritm algoritm; //First algoritm algoritm = game.algoritms[0]; if (algoritm.sendedTotal > 0) { text = algoritm.messageText + " "; goals = game.teams[0].allGoals + game.teams[1].allGoals; if ((algoritm.tMore && goals > algoritm.sendedTotal) || (!algoritm.tMore && goals < algoritm.sendedTotal)) { text += yes; } else { text += not; } text += " " + goals; Debug.Log("Редактирую сообщения"); foreach (Message message in algoritm.messages) { Telegram.EditMessage(text, message.chatID, message.msgID); } } //Second algoritm algoritm = game.algoritms[1]; if (algoritm.sendedTotal > 0) { text = algoritm.messageText + " "; goals = game.teams[0].goals1T + game.teams[1].goals1T; if ((algoritm.tMore && goals > algoritm.sendedTotal) || (!algoritm.tMore && goals < algoritm.sendedTotal)) { text += yes; } else { text += not; } text += " " + goals; foreach (Message message in algoritm.messages) { Telegram.EditMessage(text, message.chatID, message.msgID); } } //Third algoritm algoritm = game.algoritms[2]; if (algoritm.sendedTotal > 0) { text = algoritm.messageText + " "; goals = game.teams[game.favTeam - 1].goals1T; if (goals > algoritm.sendedTotal) { text += yes; } else { text += not; } text += " " + goals; foreach (Message message in algoritm.messages) { Telegram.EditMessage(text, message.chatID, message.msgID); } } Program.games.Remove(id); } }
public static void ThirdAlg(int id) { Parser.ParseLive(); lock (Program.gamesLocker) { Game game = Program.games[id]; if (game.gameTime < 1800) { TasksMgr.AddTask(new Task { TimeUNIX = Utilites.NowUNIX() + 1800 - game.gameTime, Func = ThirdAlg, GameID = id }); return; } if (game.updTimeUNIX + 10 < Utilites.NowUNIX()) { TasksMgr.AddTask(new Task { TimeUNIX = Utilites.NowUNIX() + 5, Func = ThirdAlg, GameID = id }); return; } if (game.gameTime > 1810 && game.favTeam > -1 && game.iTotalF * game.iTotalL > 0) { string team1 = game.teams[0].name; string team2 = game.teams[1].name; Debug.Log("Проверка игры \"" + team1 + " - " + team2 + "\" на \"Индивидуальный тотал Фаворита\""); if (game.teams[0].kf * game.teams[1].kf > 0) { team1 += " (" + game.teams[0].kf + ")"; team2 += " (" + game.teams[1].kf + ")"; } double totalMF = Math.Round(game.iTotalF / 2); double totalML = Math.Round(game.iTotalL / 2); double favGoalsAim = totalMF - 4; double realGoals = game.teams[game.favTeam].goals1T; double totalL = game.iTotalL; string favTeam = game.teams[game.favTeam].name; string recomend = "ТБ " + game.iTotalL + " - " + game.iTkfLess; Program.games[id].algoritms[2].sendedTotal = game.iTotalL; Program.games[id].algoritms[2].tMore = true; string text = "#Signal_" + Params.LastSignalNumer + "\nАлгоритм - \"Индивидуальный тотал Фаворита\"" + "\nЛига - \"" + game.league + "\"" + "\nКоманда - \"" + team1 + " - " + team2 + "\"" + "\nВремя - \"" + TimeSpan.FromSeconds(game.gameTime).ToString("mm\\:ss") + "\"" + "\nСчёт - \"" + game.teams[0].goals1T + ":" + game.teams[1].goals1T + "\"" + "\n" + "\nНачальный тотал - \"" + totalMF + "\"" + "\n" + "\nСейчас тотал - \"" + totalML + "\"" + "\nФаворит - \"" + favTeam + "\"" + "\nРекомендую - \"" + recomend + "\""; if (realGoals <= favGoalsAim && totalL < totalMF + realGoals) { if (Telegram.SendMessagesFromAlgorithms(text, 3, id)) { Params.LastSignalNumer++; } } } } }
static void MsgUpd() { JavaScriptSerializer serializer = new JavaScriptSerializer(); while (TasksMgr.doOtherThreads) { try { string offset = Params.LastUMid == -1 ? "" : "offset=" + (Params.LastUMid + 1); string ret = Utilites.Post("https://api.telegram.org/bot" + Params.TelegToken + "/getUpdates", offset); var obj = serializer.Deserialize <jsonFormats.GetUpdResRoot>(ret); if (obj != null && obj.ok && obj.result.Length > 0) { for (int i = 0; i < obj.result.Length; i++) { jsonFormats.Result result = obj.result[i]; int id = result.message.from.id; if (result.message.message_id > Params.LastUMid) { switch (result.message.text) { case "Старт": case "cтарт": case "/start": if (Params.Users.Contains(id)) { SendMessage("Для вас уже включена рассылка", id); } else { Params.Users.Add(id); SendMessage("Теперь вы будете получать рассылку", id); Debug.Log(result.message.from.first_name + " добавлен в список пользователей"); } break; case "Стоп": case "cтоп": case "/stop": if (Params.Users.Contains(id)) { Params.Users.Remove(id); SendMessage("Теперь вы не будете получать рассылку", id); Debug.Log(result.message.from.first_name + " удалён из списка пользователей"); } else { SendMessage("Вы и так не получали рассылку...", id); } break; default: SendMessage("Извините, но я вас не понимаю...", id); Debug.LogWarning(result.message.from.first_name + " пишет: " + result.message.text); break; } } } Params.LastUMid = obj.result[obj.result.Length - 1].message.message_id; } Thread.Sleep(1500); } catch (Exception e) { Debug.LogException(e); } } }