Advertisement
Guest User

Untitled

a guest
Jun 10th, 2017
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 9.36 KB | None | 0 0
  1. * Schumix */
  2.  
  3. #include "StdAfx.h"
  4.  
  5.  
  6. HgInfo::HgInfo()
  7. {
  8.     string mySQLHost = Config.MainConfig.GetStringDefault("MySQL", "Host", "");
  9.     string mySQLUser = Config.MainConfig.GetStringDefault("MySQL", "User", "");
  10.     string mySQLPassword = Config.MainConfig.GetStringDefault("MySQL", "Password", "");
  11.     string mySQLDatabase = Config.MainConfig.GetStringDefault("MySQL", "Database", "");
  12.  
  13.     mSQLConn[0] = MySQLConnectionPointer(new MySQLConnection(mySQLHost, mySQLUser, mySQLPassword));
  14.     mSQLConn[0]->UseDatabase(mySQLDatabase);
  15.     mSQLConn[0]->kiiras = false;
  16.  
  17.     QueryResultPointer db = mSQLConn[0]->Query("SELECT MAX(id) FROM hginfo");
  18.     if(db)
  19.         Log.Debug("HgInfo", "%u Thread indult el.", db->Fetch()[0].GetUInt32());
  20.  
  21.     QueryResultPointer adatbazis = mSQLConn[0]->Query("SELECT * FROM hginfo");
  22.     if(adatbazis)
  23.     {
  24.         do
  25.         {
  26.             MultiThread Mt(this, adatbazis->Fetch()[0].GetUInt32());
  27.             boost::thread t(Mt);
  28.         } while(adatbazis->NextRow());
  29.     }
  30.  
  31.     string status;
  32.  
  33.     QueryResultPointer db1 = mSQLConn[0]->Query("SELECT funkcio_nev, funkcio_status FROM schumix WHERE funkcio_nev = 'hg'");
  34.     if(db)
  35.         status = db1->Fetch()[1].GetString();
  36.  
  37.     if(status == bekapcsol)
  38.         Log.Success("HgInfo", "A funkcio elindult.");
  39.     else
  40.         Log.Warning("HgInfo", "Az %s funkcio nem uzemel!", HG);
  41.  
  42.     printf("\n");
  43. }
  44.  
  45. HgInfo::~HgInfo()
  46. {
  47.  
  48. }
  49.  
  50. void HgInfo::ThreadHg(uint32 id)
  51. {
  52.     string mySQLHost = Config.MainConfig.GetStringDefault("MySQL", "Host", "");
  53.     string mySQLUser = Config.MainConfig.GetStringDefault("MySQL", "User", "");
  54.     string mySQLPassword = Config.MainConfig.GetStringDefault("MySQL", "Password", "");
  55.     string mySQLDatabase = Config.MainConfig.GetStringDefault("MySQL", "Database", "");
  56.  
  57.     mSQLConn[id] = MySQLConnectionPointer(new MySQLConnection(mySQLHost, mySQLUser, mySQLPassword));
  58.     mSQLConn[id]->UseDatabase(mySQLDatabase);
  59.  
  60.     string status;
  61.  
  62.     Hg("rev1", id);
  63.     while(sIRCSession.Running())
  64.     {
  65.         if(!sIRCSession.Running())
  66.             break;
  67.  
  68.         QueryResultPointer db = mSQLConn[id]->Query("SELECT funkcio_nev, funkcio_status FROM schumix WHERE funkcio_nev = 'hg'");
  69.         if(db)
  70.             status = db->Fetch()[1].GetString();
  71.  
  72.         if(status == bekapcsol)
  73.         {
  74.             Hg("rev", id);
  75.  
  76.             HgKiirasok(id);
  77.  
  78.             Hg("rev1", id);
  79.             lekerdezesi_ido();
  80.         }
  81.         else
  82.             Sleep(100);
  83.     }
  84.  
  85.     Log.Warning("HgInfo", "Thread leallt: %u", id);
  86.  
  87.     ThreadExit(0);
  88. }
  89.  
  90. int HgInfo::writer(char* data, size_t size, size_t nmemb, std::string *buffer)
  91. {
  92.     int result = NULL;
  93.  
  94.     if(buffer != NULL)
  95.     {
  96.         buffer->append(data, size* nmemb);
  97.         result = size* nmemb;
  98.     }
  99.     return result;
  100. }
  101.  
  102. string HgInfo::titleUrl(string url, uint32 id, string regex, uint8 engedely, string account, string password)
  103. {
  104.     curl[id] = curl_easy_init();
  105.     if(curl[id])
  106.     {
  107.         CURLcode result;
  108.         string bufferdata;
  109.  
  110.         if(engedely == 1)
  111.         {
  112.             curl_easy_setopt(curl[id], CURLOPT_URL, url.c_str());
  113.             curl_easy_setopt(curl[id], CURLOPT_USERNAME, account.c_str());
  114.             curl_easy_setopt(curl[id], CURLOPT_PASSWORD, password.c_str());
  115.             curl_easy_setopt(curl[id], CURLOPT_WRITEFUNCTION, HgInfo::writer);
  116.             curl_easy_setopt(curl[id], CURLOPT_WRITEDATA, &bufferdata);
  117.             result = curl_easy_perform(curl[id]);
  118.         }
  119.         else
  120.         {
  121.             curl_easy_setopt(curl[id], CURLOPT_URL, url.c_str());
  122.             curl_easy_setopt(curl[id], CURLOPT_WRITEFUNCTION, HgInfo::writer);
  123.             curl_easy_setopt(curl[id], CURLOPT_WRITEDATA, &bufferdata);
  124.             result = curl_easy_perform(curl[id]);
  125.         }
  126.  
  127.         curl_easy_cleanup(curl[id]);
  128.  
  129.         if(result == CURLE_OK)
  130.         {
  131.             boost::regex re(regex);
  132.             boost::cmatch matches;
  133.  
  134.             boost::regex_search(bufferdata.c_str(), matches, re);
  135.             string matched(matches[1].first, matches[1].second);
  136.             int szokoz = matched.find("</title>");
  137.  
  138.             return matched.substr(0, szokoz);
  139.         }
  140.         else
  141.         {
  142.             Log.Error("HgInfo", "Hiba a Http lekerdezesben.");
  143.             return "nincs adat";
  144.         }
  145.     }
  146.  
  147.     return "nincs adat";
  148. }
  149.  
  150. string HgInfo::revUrl(string url, uint32 id, string regex, uint8 engedely, string account, string password)
  151. {
  152.     curl[id] = curl_easy_init();
  153.     if(curl[id])
  154.     {
  155.         CURLcode result;
  156.         string bufferdata;
  157.  
  158.         if(engedely == 1)
  159.         {
  160.             curl_easy_setopt(curl[id], CURLOPT_URL, url.c_str());
  161.             curl_easy_setopt(curl[id], CURLOPT_USERNAME, account.c_str());
  162.             curl_easy_setopt(curl[id], CURLOPT_PASSWORD, password.c_str());
  163.             curl_easy_setopt(curl[id], CURLOPT_WRITEFUNCTION, HgInfo::writer);
  164.             curl_easy_setopt(curl[id], CURLOPT_WRITEDATA, &bufferdata);
  165.             result = curl_easy_perform(curl[id]);
  166.         }
  167.         else
  168.         {
  169.             curl_easy_setopt(curl[id], CURLOPT_URL, url.c_str());
  170.             curl_easy_setopt(curl[id], CURLOPT_WRITEFUNCTION, HgInfo::writer);
  171.             curl_easy_setopt(curl[id], CURLOPT_WRITEDATA, &bufferdata);
  172.             result = curl_easy_perform(curl[id]);
  173.         }
  174.  
  175.         curl_easy_cleanup(curl[id]);
  176.  
  177.         if(result == CURLE_OK)
  178.         {
  179.             boost::regex re(regex);
  180.             boost::cmatch matches;
  181.  
  182.             boost::regex_search(bufferdata.c_str(), matches, re);
  183.             string matched(matches[1].first, matches[1].second);
  184.             int szokoz = matched.find("</");
  185.  
  186.             return matched.substr(0, szokoz);
  187.         }
  188.         else
  189.         {
  190.             Log.Error("HgInfo", "Hiba a Http lekerdezesben.");
  191.             return "nincs adat";
  192.         }
  193.     }
  194.  
  195.     return "nincs adat";
  196. }
  197.  
  198. string HgInfo::authorUrl(string url, uint32 id, string regex, uint8 engedely, string account, string password)
  199. {
  200.     curl[id] = curl_easy_init();
  201.     if(curl[id])
  202.     {
  203.         CURLcode result;
  204.         string bufferdata;
  205.  
  206.         if(engedely == 1)
  207.         {
  208.             curl_easy_setopt(curl[id], CURLOPT_URL, url.c_str());
  209.             curl_easy_setopt(curl[id], CURLOPT_USERNAME, account.c_str());
  210.             curl_easy_setopt(curl[id], CURLOPT_PASSWORD, password.c_str());
  211.             curl_easy_setopt(curl[id], CURLOPT_WRITEFUNCTION, HgInfo::writer);
  212.             curl_easy_setopt(curl[id], CURLOPT_WRITEDATA, &bufferdata);
  213.             result = curl_easy_perform(curl[id]);
  214.         }
  215.         else
  216.         {
  217.             curl_easy_setopt(curl[id], CURLOPT_URL, url.c_str());
  218.             curl_easy_setopt(curl[id], CURLOPT_WRITEFUNCTION, HgInfo::writer);
  219.             curl_easy_setopt(curl[id], CURLOPT_WRITEDATA, &bufferdata);
  220.             result = curl_easy_perform(curl[id]);
  221.         }
  222.  
  223.         curl_easy_cleanup(curl[id]);
  224.  
  225.         if(result == CURLE_OK)
  226.         {
  227.             boost::regex re(regex);
  228.             boost::cmatch matches;
  229.  
  230.             boost::regex_search(bufferdata.c_str(), matches, re);
  231.             string matched(matches[1].first, matches[1].second);
  232.             int szokoz;
  233.  
  234.             if(regex == "<author>\s*<name>(.+)</name>")
  235.                 szokoz = matched.find("</name>");
  236.             else
  237.                 szokoz = matched.find("</author>");
  238.  
  239.             return matched.substr(0, szokoz);
  240.         }
  241.         else
  242.         {
  243.             Log.Error("HgInfo", "Hiba a Http lekerdezesben.");
  244.             return "nincs adat";
  245.         }
  246.     }
  247.  
  248.     return "nincs adat";
  249. }
  250.  
  251. void HgInfo::Hg(string revid, uint32 id)
  252. {
  253.     QueryResultPointer adatbazis = mSQLConn[id]->Query("SELECT * FROM hginfo WHERE id = '%u'", id);
  254.     if(adatbazis)
  255.     {
  256.         string nev = adatbazis->Fetch()[1].GetString();
  257.         string url = adatbazis->Fetch()[2].GetString();
  258.         string regex = adatbazis->Fetch()[7].GetString();
  259.         uint8 engedely = adatbazis->Fetch()[8].GetUInt8();
  260.         string account = adatbazis->Fetch()[9].GetString();
  261.         string password = adatbazis->Fetch()[10].GetString();
  262.  
  263.         string rev = revUrl(url, id, regex, engedely, account, password);
  264.         if(rev == "nincs adat")
  265.             return;
  266.  
  267.         mSQLConn[id]->Query("UPDATE hginfo SET %s = '%s' WHERE nev = '%s'", revid.c_str(), rev.c_str(), nev.c_str());
  268.     }
  269. }
  270.  
  271. void HgInfo::HgKiirasok(uint32 id)
  272. {
  273.     QueryResultPointer adatbazis = mSQLConn[id]->Query("SELECT * FROM hginfo WHERE id = '%u'", id);
  274.     if(adatbazis)
  275.     {
  276.         string a_rev = adatbazis->Fetch()[3].GetString();
  277.         string a_rev1 = adatbazis->Fetch()[4].GetString();
  278.  
  279.         if(a_rev == a_rev1)
  280.             return;
  281.  
  282.         string nev = adatbazis->Fetch()[1].GetString();
  283.         string url = adatbazis->Fetch()[2].GetString();
  284.         string regex = adatbazis->Fetch()[5].GetString();
  285.         string regex2 = adatbazis->Fetch()[6].GetString();
  286.         string regex3 = adatbazis->Fetch()[7].GetString();
  287.         uint8 engedely = adatbazis->Fetch()[8].GetUInt8();
  288.         string account = adatbazis->Fetch()[9].GetString();
  289.         string password = adatbazis->Fetch()[10].GetString();
  290.  
  291.         string title = titleUrl(url, id, regex, engedely, account, password);
  292.         string rev = revUrl(url, id, regex3, engedely, account, password);
  293.         string author = authorUrl(url, id, regex2, engedely, account, password);
  294.  
  295.         QueryResultPointer db = mSQLConn[id]->Query("SELECT channel FROM hginfo WHERE nev = '%s'", nev.c_str());
  296.         if(db)
  297.         {
  298.             string channel = db->Fetch()[0].GetString();
  299.             vector<string> reschannel(1);
  300.             sIRCSession.split(channel, ",", reschannel);
  301.  
  302.             if(reschannel.size() < 2)
  303.             {
  304.                 reschannel.clear();
  305.                 return;
  306.             }
  307.  
  308.             int resChannel = reschannel.size();
  309.  
  310.             for(int y = 1; y < resChannel; y++)
  311.             {
  312.                 if(regex == "/>\\s*<title>(.*)</title>")
  313.                 {
  314.                     uint8 szokoz = title.find(':');
  315.                     string adat = title.substr(szokoz+1);
  316.  
  317.                     sIRCSession.SendChatMessage(PRIVMSG, reschannel[y].c_str(), "3%s Revision: 10%s by %s", nev.c_str(), rev.substr(0, 7).c_str(), author.c_str());
  318.                     sIRCSession.SendChatMessage(PRIVMSG, reschannel[y].c_str(), "3%s Info:%s", nev.c_str(), adat.c_str());
  319.                 }
  320.                 else if(regex == "<item>\\s*<title>(.*)</title>")
  321.                 {
  322.                     sIRCSession.SendChatMessage(PRIVMSG, reschannel[y].c_str(), "3%s Revision: 10%s by %s", nev.c_str(), rev.substr(0, 7).c_str(), author.c_str());
  323.                     sIRCSession.SendChatMessage(PRIVMSG, reschannel[y].c_str(), "3%s Info: %s", nev.c_str(), title.c_str());
  324.                 }
  325.             }
  326.  
  327.             reschannel.clear();
  328.         }
  329.     }
  330. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement