Esempio n. 1
0
        static void Main(string[] args)
        {
            Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
            string requestFileName = "lastrequest.req";
            bool   debug           = false;
            bool   noDelReq        = false;

            string responseDir = Environment.CurrentDirectory;

            if (args.Length > 0)
            {
                foreach (string argItem in args)
                {
                    if (argItem == "test")
                    {
                        SendMailRemind("TEST body sending mail", "[TEST] subj", MailRecipients);
                        return;
                    }
                    else if (argItem.Contains("@")
                             & argItem.Contains("."))
                    {
                        if (argItem.IndexOf('@') > 0
                            & argItem.IndexOf('@') + 1 < argItem.IndexOf('.', argItem.IndexOf('@')))
                        {
                            MailRecipients.Add(argItem);
                        }
                    }

                    else if (argItem.Contains("request="))
                    {
                        requestFileName = argItem.Substring(8);
                    }
                    else if (argItem.Contains("responsedir="))
                    {
                        responseDir = argItem.Substring(12);
                    }
                    else if (argItem == "debug")
                    {
                        debug    = true;
                        noDelReq = true;
                    }
                    else if (argItem == "no-del-req")
                    {
                        noDelReq = true;
                    }
                }
            }


            List <IRequest>  myReqObjects  = new List <IRequest>();
            List <IResponse> myRespObjects = new List <IResponse>();

            if (File.Exists(requestFileName))
            {
                //myReqObjects.Add(FileIO.LoadMyRequestObjectXML(requestFileName));
                // здесь надо загружать объекты запросов из xml. однако, это не работает для интерфейсов.
                //myReqObjects.Add(myRequestObject.LoadFromXML(requestFileName));
                Console.WriteLine("Processing with REQUEST files is not realized yet! Please, remove ARG: \"request=\" or remove FILE \"lastrequest.req\" from DIR: \"" + responseDir + "\"");
            }
            else
            {
                if (Directory.Exists(responseDir))
                {
                    if (debug)
                    {
                        Console.WriteLine("Resp.dir: " + responseDir);
                    }
                    foreach (string item in Directory.GetFiles(responseDir, "*.resp"))
                    {
                        if (debug)
                        {
                            Console.WriteLine("Resp.found: " + item);
                        }
                        IResponse curResp = SFileIO.LoadMyResponse(item);
                        if (curResp != null)
                        {
                            myRespObjects.Add(curResp);
                            if (debug)
                            {
                                Console.WriteLine("Resp.load: " + item);
                            }
                        }
                        else
                        {
                            if (debug)
                            {
                                Console.WriteLine("Resp. NOT load: " + item);
                            }
                        }
                    }

                    foreach (string item in Directory.GetFiles(responseDir, "*.req"))
                    {
                        if (debug)
                        {
                            Console.WriteLine("Req.found: " + item);
                        }
                        IRequest curReq = null;

                        string checkType = "";

                        using (StreamReader sr = new StreamReader(item))
                        {
                            sr.ReadLine(); //читаем первую строку "<?xml version="1.0"?>"
                            checkType = sr.ReadLine();
                            checkType = checkType.Substring(1, checkType.IndexOf(' ') - 1);
                        }

                        //IRequest curReq = myRequestObject.LoadFromXML(item);
                        // здесь надо загружать объекты запросов из xml. однако, это не работает для интерфейсов.
                        //IRequest curReq = FileIO.LoadMyRequestObjectXML(item);
                        //object deserObj = SFileIO.LoadMyRequestObjectXML(item, checkType);

                        switch (checkType)
                        {
                        case "TorgASVRequest":
                            curReq = ATorgRequest.LoadMyRequestObjectXML(new TorgiASV.TorgASVRequest(), item);
                            break;

                        case "CenterrRequest":
                            curReq = ATorgRequest.LoadMyRequestObjectXML(new CenterRu.CenterrRequest(), item);
                            break;

                        case "ASVorgRequest":
                            curReq = ATorgRequest.LoadMyRequestObjectXML(new ASVorgRU.ASVorgRequest(), item);
                            break;

                        case "SberbankAstRequest":
                            curReq = ATorgRequest.LoadMyRequestObjectXML(new SberbankAST.SberbankAstRequest(), item);
                            break;

                        case "B2BRequest":
                            curReq = ATorgRequest.LoadMyRequestObjectXML(new B2B.B2BRequest(), item);
                            break;

                        case "GPBRequest":
                            curReq = ATorgRequest.LoadMyRequestObjectXML(new ETP_GPB.GPBRequest(), item);
                            break;

                        case "UTenderRequest":
                            curReq = ATorgRequest.LoadMyRequestObjectXML(new UTender.UTenderRequest(), item);
                            break;

                        case "ZakupkiGovRequest":
                            curReq = ATorgRequest.LoadMyRequestObjectXML(new ZakupkiGov.ZakupkiGovRequest(), item);
                            break;

                        case "TekTorgRequest":
                            curReq = ATorgRequest.LoadMyRequestObjectXML(new TekTorg.TekTorgRequest(), item);
                            break;

                        case "RosElTorgRequest":
                            curReq = ATorgRequest.LoadMyRequestObjectXML(new RosElTorg.RosElTorgRequest(), item);
                            break;

                        case "RTSTenderRequest":
                            curReq = ATorgRequest.LoadMyRequestObjectXML(new RTSTender.RTSTenderRequest(), item);
                            break;

                        case "ArrestedLotOnlineRequest":
                            curReq = ATorgRequest.LoadMyRequestObjectXML(new LotOnline.ArrestedLotOnlineRequest(), item);
                            break;

                        case "ConfiscateLotOnlineRequest":
                            curReq = ATorgRequest.LoadMyRequestObjectXML(new LotOnline.ConfiscateLotOnlineRequest(), item);
                            break;

                        case "FishLotOnlineRequest":
                            curReq = ATorgRequest.LoadMyRequestObjectXML(new LotOnline.FishLotOnlineRequest(), item);
                            break;

                        case "LeaseLotOnlineRequest":
                            curReq = ATorgRequest.LoadMyRequestObjectXML(new LotOnline.LeaseLotOnlineRequest(), item);
                            break;

                        case "PrivatizationLotOnlineRequest":
                            curReq = ATorgRequest.LoadMyRequestObjectXML(new LotOnline.PrivatizationLotOnlineRequest(), item);
                            break;

                        case "RadLotOnlineRequest":
                            curReq = ATorgRequest.LoadMyRequestObjectXML(new LotOnline.RadLotOnlineRequest(), item);
                            break;

                        case "TradeLotOnlineRequest":
                            curReq = ATorgRequest.LoadMyRequestObjectXML(new LotOnline.TradeLotOnlineRequest(), item);
                            break;

                        case "ZalogLotOnlineRequest":
                            curReq = ATorgRequest.LoadMyRequestObjectXML(new LotOnline.ZalogLotOnlineRequest(), item);
                            break;

                        case "LotOnlineGzRequest":
                            curReq = ATorgRequest.LoadMyRequestObjectXML(new LotOnline.Gz.LotOnlineGzRequest(), item);
                            break;

                        case "LotOnlineSalesRequest":
                            curReq = ATorgRequest.LoadMyRequestObjectXML(new LotOnline.Sales.LotOnlineSalesRequest(), item);
                            break;

                        case "LotOnlineTenderRequest":
                            curReq = ATorgRequest.LoadMyRequestObjectXML(new LotOnline.Tender.LotOnlineTenderRequest(), item);
                            break;

                        default:
                            Console.WriteLine("Unknown request type: " + checkType + " of file: " + item + ". Check necessary DLLs!");
                            break;
                        }
                        if (curReq != null)
                        {
                            if (debug)
                            {
                                Console.WriteLine("Req.load: " + item);
                            }
                            Console.Write(checkType + " found! Get result..");
                            myReqObjects.Add(curReq);
                            IResponse newResp = curReq.MakeResponse();
                            //IResponse newResp = curReq.GetResponse;
                            Console.WriteLine(" SUCCESS");
                            //newResp.SaveToXml((newResp.SiteName + "_" + newResp.MyRequest.SearchString).Replace(" ", "") + ".resp");
                            if (!SFileIO.SaveMyResponse(newResp, responseDir + "\\" + (newResp.SiteName + "_" + newResp.MyRequest.SearchString).Replace(" ", "") + ".resp"))
                            {
                                Console.WriteLine("WARNING! Can't save response object");
                            }
                            if (newResp.ListResponse != null)
                            {
                                if (newResp.ListResponse.Count() > 0)
                                {
                                    SendMailRemind(newResp.NewRecordsOutput(null, true), "[" + newResp.SiteName + "] Предложения по новым запросам!", MailRecipients);
                                }
                                else // ответ есть, но пустой
                                {
                                    SendMailRemind("Ответ получен, но не содержит результатов! Возможно, по Вашему запросу теперь ничего не найдено. Если на сайте \""
                                                   + newResp.SiteName + "(" + newResp.MyRequest.GetSearchUrl() + ")" + "\" по запросу \"" + newResp.MyRequest.AllParametersInString("_")
                                                   + "\" есть результаты, тогда обратитесь к разработчику!" + Environment.NewLine
                                                   + "Сообщение об ошибке: " + Environment.NewLine
                                                   + "WARNING! \"" + newResp.SiteName + "\"", "[" + newResp.SiteName + "] ВНИМАНИЕ! Результаты для НОВОГО запроса не найдены.", MailRecipients);
                                }
                            }
                            else // ответ поломан
                            {
                                string msg = "ERROR! \"" + newResp.SiteName + "\"";
                                if (newResp.LastError() != null)
                                {
                                    msg += " : " + newResp.LastError().Message;
                                }
                                if (newResp.MyRequest.LastError() != null)
                                {
                                    msg += " : " + newResp.MyRequest.LastError().Message;
                                }
                                Console.WriteLine(msg);
                                SendMailRemind("Ошибка получения результатов НОВОГО запроса!" + Environment.NewLine +
                                               "Если на сайте " + newResp.SiteName + "(" + newResp.MyRequest.GetSearchUrl() + ")" + " выдаются результаты по запросу " + newResp.MyRequest.AllParametersInString("_") +
                                               ", тогда обратитесь к разработчику!" + Environment.NewLine
                                               + "Сообщение об ошибке: " + Environment.NewLine
                                               + msg, "[" + newResp.SiteName + "] ОШИБКА!", MailRecipients);
                            }

                            if (!noDelReq)
                            {
                                try
                                {
                                    File.Delete(item);
                                }
                                catch (Exception e)
                                {
                                    //throw;
                                    Console.WriteLine("ERROR: Couldn't delete unused request file: " + item);
                                }
                            }
                        }
                        else
                        {
                            if (debug)
                            {
                                Console.WriteLine("Req. NOT load: " + item);
                            }
                        }
                    }
                }
            }

            if ((myReqObjects.Count == 0) & (myRespObjects.Count == 0))
            {
                Console.WriteLine("I can't work without any Requests or Responses! Bye..");
                return;
            }
            //AREA requests check
            {
                foreach (IRequest item in myReqObjects)
                {
                }
            }
            // AREA responses re-check
            {
                foreach (IResponse oldItem in myRespObjects)
                //foreach (ATorgResponse oldItem in myRespObjects)
                {
                    if (debug)
                    {
                        Console.WriteLine("Checking " + oldItem.SiteName + "..");
                    }

                    IResponse newResp = oldItem.MakeFreshResponse;
                    //ATorgResponse newResp = oldItem.MakeFreshResponse;

                    if (newResp.ListResponse == null)
                    {
                        string msg = "ERROR! \"" + newResp.SiteName + "\"";
                        if (newResp.LastError() != null)
                        {
                            msg += " : " + newResp.LastError().Message;
                        }
                        if (newResp.MyRequest.LastError() != null)
                        {
                            msg += " : " + newResp.MyRequest.LastError().Message;
                        }
                        Console.WriteLine(msg);
                        // здесь надо сохранять ошибку, чтобы на случай повтора ошибки не забивать почту уведомлениями
                        // если ошибка была ранее, то не отправлять уведомление
                        // в случае получения нормального ответа в другом месте удалять файл-флаг ошибки
                        string myExMessage = "Произошла новая ошибка";
                        if (File.Exists(newResp.SiteName + ".err"))
                        {
                            MyException prevExc = MyException.LoadFromFile(newResp.SiteName + ".err");
                            if (prevExc != null)
                            {
                                if (prevExc.InnerException.Message == newResp.MyRequest.LastError().Message)
                                {
                                    continue;
                                }
                                myExMessage = "Произошла другая ошибка";
                            }
                        }

                        MyException myExc = new MyException(newResp, myExMessage, newResp.MyRequest.LastError());
                        myExc.SaveToFile(newResp.SiteName + ".err", true);

                        SendMailRemind("Ошибка получения результатов запроса от площадки! Возможно, сайт недоступен." + Environment.NewLine
                                       + "Если на сайте \"" + newResp.SiteName + "(" + newResp.MyRequest.GetSearchUrl() + ")"
                                       + "\" по запросу \"" + newResp.MyRequest.AllParametersInString("_")
                                       + "\" есть результаты, тогда обратитесь к разработчику!" + Environment.NewLine
                                       + "Сообщение об ошибке: " + Environment.NewLine
                                       + msg, "[" + newResp.SiteName + "] ОШИБКА!", MailRecipients);
                    }

                    /*
                     * else if (newResp.ListResponse.Count() < 1)
                     * {
                     *  string msg = "WARNING! \"" + newResp.SiteName + "\"";
                     *  if (newResp.LastError() != null)
                     *      msg += " : " + newResp.LastError().Message;
                     *  if (newResp.MyRequest.LastError() != null)
                     *      msg += " : " + newResp.MyRequest.LastError().Message;
                     *  Console.WriteLine(msg);
                     *  SendMailRemind("Ответ получен, но не содержит результатов! Возможно, по Вашему запросу теперь ничего не найдено. Если на сайте \""
                     + newResp.SiteName + "\" по запросу \"" + newResp.MyRequest.AllParametersInString("_")
                     + "\" есть результаты, тогда обратитесь к разработчику!" + Environment.NewLine
                     + "Сообщение об ошибке: " + Environment.NewLine
                     + msg, "[" + newResp.SiteName + "] ВНИМАНИЕ! Получен пустой ответ.", MailRecipients);
                     + }
                     */
                    else if (newResp.HaveNewRecords(oldItem))
                    {
                        if (File.Exists(newResp.SiteName + ".err"))
                        {
                            try
                            {
                                File.Delete(newResp.SiteName + ".err");
                            }
                            catch (Exception e)
                            {
                                Console.WriteLine("WARNING! Couldn't delete file \"" + newResp.SiteName + ".err ! Error message: " + e.Message);
                                //throw;
                            }
                        }


                        Console.WriteLine("Found changes for \"" + newResp.SiteName + "\"!");
                        newResp.SaveToXml(responseDir + "\\" + (newResp.SiteName + "_" + newResp.MyRequest.SearchString).Replace(" ", "") + ".resp", true);

                        if (newResp.ListResponse.Count() < 1)
                        {
                            // исчезли старые записи
                            SendMailRemind("Ответ получен, но не содержит результатов! Возможно, по Вашему запросу теперь ничего не найдено. Если на сайте \""
                                           + newResp.SiteName + "(" + newResp.MyRequest.GetSearchUrl() + ")" + "\" по запросу \"" + newResp.MyRequest.AllParametersInString("_")
                                           + "\" есть результаты, тогда обратитесь к разработчику!" + Environment.NewLine
                                           + "Сообщение об ошибке: " + Environment.NewLine
                                           + "WARNING! \"" + newResp.SiteName + "\"", "[" + newResp.SiteName + "] ВНИМАНИЕ! Получен пустой ответ.", MailRecipients);
                        }
                        else
                        {
                            // появились новые записи
                            SendMailRemind(newResp.NewRecordsOutput(oldItem, true), "[" + newResp.SiteName + "] Произошли изменения!", MailRecipients);
                        }
                    }
                    else
                    {
                        if (File.Exists(newResp.SiteName + ".err"))
                        {
                            try
                            {
                                File.Delete(newResp.SiteName + ".err");
                            }
                            catch (Exception e)
                            {
                                Console.WriteLine("WARNING! Couldn't delete file \"" + newResp.SiteName + ".err ! Error message: " + e.Message);
                                //throw;
                            }
                            SendMailRemind("Работа сайта \"" + newResp.SiteName + "\" восстановлена." + Environment.NewLine
                                           + "Однако, \" по запросу \"" + newResp.MyRequest.AllParametersInString("_")
                                           + "\" новых результатов не обнаружено!" + Environment.NewLine
                                           + "В случае появления новых результатов, Вы получите уведомление в обычном режиме.",
                                           "[" + newResp.SiteName + "] РАБОТА ВОЗОБНОВЛЕНА", MailRecipients);
                        }


                        if (debug)
                        {
                            Console.WriteLine("Recieved " + newResp.ListResponse.Count() + " items");
                        }
                        Console.WriteLine(newResp.SiteName + ": Nothing new..");
                    }
                }
            }
            Console.WriteLine("Well done!");
        }
 public override IResponse LoadFromXml(string fileName = "lastrequest.req")
 {
     return(SFileIO.LoadMyResponse(fileName));
 }
Esempio n. 3
0
        static void Main(string[] args)
        {
            string requestFileName = "lastrequest.req";

            string responseDir = Environment.CurrentDirectory;

            if (args.Length > 0)
            {
                foreach (string argItem in args)
                {
                    if (argItem == "test")
                    {
                        SendMailRemind("TEST body sending mail", "[TEST] subj", MailRecipients);
                        return;
                    }
                    else if (argItem.Contains("@")
                             & argItem.Contains(".")
                             & argItem.IndexOf('@') > 0
                             & argItem.IndexOf('@') + 1 < argItem.IndexOf('.', argItem.IndexOf('@')))
                    {
                        MailRecipients.Add(argItem);
                    }
                    else if (argItem.Contains("request="))
                    {
                        requestFileName = argItem.Substring(7);
                    }
                    else if (argItem.Contains("responsedir="))
                    {
                        responseDir = argItem.Substring(11);
                    }
                }
            }

            List <IRequest>  myReqObjects  = new List <IRequest>();
            List <IResponse> myRespObjects = new List <IResponse>();

            //string checkDate;

            if (File.Exists(requestFileName))
            {
                //myReqObjects.Add(FileIO.LoadMyRequestObjectXML(requestFileName));
                // здесь надо загружать объекты запросов из xml. однако, это не работает для интерфейсов.
                //myReqObjects.Add(myRequestObject.LoadFromXML(requestFileName));
            }
            else
            {
                if (Directory.Exists(responseDir))
                {
                    foreach (string item in Directory.GetFiles(responseDir, "*.resp"))
                    {
                        IResponse curResp = SFileIO.LoadMyResponse(item);
                        if (curResp != null)
                        {
                            myRespObjects.Add(curResp);
                        }
                    }

                    foreach (string item in Directory.GetFiles(responseDir, "*.req"))
                    {
                        IRequest curReq = null;
                        //IRequest curReq = myRequestObject.LoadFromXML(item);
                        // здесь надо загружать объекты запросов из xml. однако, это не работает для интерфейсов.
                        //IRequest curReq = FileIO.LoadMyRequestObjectXML(item);
                        if (curReq != null)
                        {
                            myReqObjects.Add(curReq);
                        }
                    }
                }
                // need looking for saved last responses
            }


            if (myRespObjects.Count == 0)
            {
                if (myReqObjects.Count == 0)
                {
                    Console.WriteLine("I can't work without any Requests or Responses! Bye..");
                    return;
                }
                else
                {
                    foreach (IRequest item in myReqObjects)
                    {
                        IResponse newResp = item.MakeResponse();
                        newResp.SaveToXml(newResp.SiteName.Replace(" ", "") + ".resp");
                        SendMailRemind(newResp.NewRecordsOutput(null, true), "[" + newResp.SiteName + "] Появились новые предложения!", MailRecipients);
                    }
                }
            }
            else
            {
                foreach (IResponse oldItem in myRespObjects)
                {
                    IResponse newResp = oldItem.MakeFreshResponse;
                    if (newResp.HaveNewRecords(oldItem))
                    {
                        newResp.SaveToXml(newResp.SiteName.Replace(" ", "") + ".resp");
                        SendMailRemind(newResp.NewRecordsOutput(oldItem, true), "[" + newResp.SiteName + "] Появились новые предложения!", MailRecipients);
                    }
                }
            }

            /*
             * // Сделать новый запрос по умолчанию, или сообщить об отсутствии запроса и выйти.
             * myRequestObject = new CenterrRequest();
             * //Запрос АСВ по имуществу ПРБ в отношении ПИРИТ
             * myRequestObject.ResetParameters();
             * myRequestObject.MyParameters["Party_contactName"] = "асв";
             * myRequestObject.MyParameters["vPurchaseLot_fullTitle"] = "";
             * myRequestObject.MyParameters["vPurchaseLot_lotTitle"] = "";
             * //myRequestObject.SaveToXml(myRequestObject.CreateFileName(true));
             * myRequestObject.SaveToXml(myRequestObject.ToString() + ".req");
             */

            //SaveMyRequestObjectXML(myRequestObject, "lastrequest.req");

            /*
             * myRequestObject.SaveToXml("lastrequest.req");
             *
             * IResponse curData;
             * IResponse checkData = null;// = LoadMyCenterrObject(GenerateFileName(myRequestObj));
             * if (File.Exists(myRequestObject.ToString() + ".obj"))
             *  checkData = checkData.LoadFromXml(myRequestObject.ToString() + ".obj");
             *
             * if (checkData is CenterrResponse)
             *  curData = new CenterrResponse((CenterrRequest)myRequestObject);
             * else if (checkData is ASVResponse)
             *  curData = new ASVResponse((ASVRequest)myRequestObject);
             * else
             *  curData = null;
             *
             * if (curData != null)
             *  if (curData.HaveNewRecords(checkData))
             *      SendMailRemind(curData.NewRecordsOutput(checkData, true), "[curData.SiteName] Появились новый предложения!");
             */
            Console.WriteLine("Well done!");
            //Console.ReadKey();
        }