示例#1
0
 /// <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);
     }
 }
示例#2
0
        /// <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();
            }
        }