/// <summary> /// Запускает обработку полученных updates /// <PARAM name="answer">List<TelegramAnswer></PARAM> /// </summary> /// <returns>int - номер последнего обработанного TelegramUpdate</returns> private int listener_CheckTelegramAnswer(TelegramAnswer answer) { if (answer.ok) { // Ошибок нет, можно обработать updates return(listener_CheckUpdates(answer.updates)); } else { // API вернул ошибку Logger.Write(answer.description, true, mutLogger); return(this.tmOffset); } }
/// <summary> /// Основной обработчик BackgroundListener /// </summary> void BackgroundListener_DoWork(object sender, DoWorkEventArgs e) { DateTime StartTime = new DateTime(2000, 1, 1); DateTime CurrentTime = DateTime.Now; TimeSpan ts = CurrentTime - StartTime; int interval = tmSettings.Interval * 1000; while (!((BackgroundWorker)sender).CancellationPending) { CurrentTime = DateTime.Now; ts = CurrentTime - StartTime; if (ts.TotalMilliseconds < interval) { Logger.Debug(tmSettings, "wt " + (interval - ts.Milliseconds).ToString(), false, mutLogger); System.Threading.Thread.Sleep(interval - ts.Milliseconds); } StartTime = DateTime.Now; LastStartTime = StartTime; this.tmOffset = Math.Max(this.tmOffset, this.maxOffset); // Получение updates с заданной периодичностью string url = "https://api.telegram.org/bot{0}/getUpdates?offset=" + this.tmOffset.ToString(); Logger.Debug(tmSettings, "url: " + url, false, mutLogger); Logger.Debug(tmSettings, "mt wait", false, mutLogger); mutAPI.WaitOne(); ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12; HttpRequest request = CreateRequest(); Logger.Debug(tmSettings, "request created", false, mutLogger); TelegramAnswer answer = null; try { //HttpResponse response = request.Send(HttpMethod .GET, new Uri(String.Format(url, botToken))); HttpResponse response = request.Get(String.Format(url, botToken)); string jsonText = response.ToString(); response.None(); response = null; // Убираем пикрограммы jsonText = jsonText.Replace(Const.PIC_BUTTON_START_REP, ""); jsonText = jsonText.Replace(Const.PIC_BUTTON_OTHER_REP, ""); Logger.Debug(tmSettings, "request:" + jsonText, false, mutLogger); // Получение updates из JSON answer = JsonConvert.DeserializeObject <TelegramAnswer>(jsonText); Logger.Debug(tmSettings, answer.ok.ToString(), false, mutLogger); } catch (Exception respExc) { string err = respExc.Message; if (respExc.InnerException != null) { err += " --> " + respExc.InnerException.Message; } Logger.Debug(tmSettings, "response err: " + err, true, mutLogger); } request.Close(); request = null; // Обработка, полученных updates if (answer != null) { this.tmOffset = Math.Max(this.tmOffset, listener_CheckTelegramAnswer(answer)); } this.maxOffset = Math.Max(this.tmOffset, this.maxOffset); Logger.Debug(tmSettings, "mt release", false, mutLogger); mutAPI.ReleaseMutex(); } }