Advertisement
Guest User

Untitled

a guest
Jun 23rd, 2017
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.68 KB | None | 0 0
  1. //--- ircdata.cpp
  2.  
  3.  
  4. #pragma hdrstop
  5.  
  6. #include "maindata.h"
  7.  
  8.  
  9. //---------------------------------------------------------------------------
  10. TIrc::TIrc()//### SettingsDaten laden und übergeben nach public sa_Settings ###
  11. {
  12.     b_isUserList = false;
  13.     sl_Text = new TStringList;
  14.  
  15.     F_Saft->M_Anzeige->Lines->Add("Settings laden...");
  16.     TStringList *sl_Datei = new TStringList;
  17.  
  18.     try
  19.     {
  20.         sl_Datei->LoadFromFile("settings.txt");
  21.  
  22.         for(int i = 0; i <= 7 - 1; i++)             // 5 = maxSettings
  23.         {
  24.             sa_Settings[i] = sl_Datei->Strings[i].c_str();
  25.         }
  26.  
  27.         F_Saft->M_Anzeige->Lines->Strings[F_Saft->M_Anzeige->Lines->Count - 1] =
  28.             F_Saft->M_Anzeige->Lines->Strings[F_Saft->M_Anzeige->Lines->Count - 1] + " fertig.";
  29.         delete sl_Datei;
  30.     }catch(...)
  31.         {
  32.             F_Saft->M_Anzeige->Lines->Strings[F_Saft->M_Anzeige->Lines->Count - 1] =
  33.                 F_Saft->M_Anzeige->Lines->Strings[F_Saft->M_Anzeige->Lines->Count - 1] + " Fehler!";
  34.             delete sl_Datei;
  35.         }
  36. };
  37.  
  38. TIrc::~TIrc ()
  39. {
  40.     _endthread();
  41.     WSACleanup();
  42.     delete sl_Text;
  43. };
  44.  
  45.  
  46. void TIrc::Connect()
  47. {
  48.     F_Saft->M_Anzeige->Lines->Add("Verbindung zu " + sa_Settings[IP] + " aufbauen...");
  49.  
  50.     String s_ServerDns = sa_Settings[IP];
  51.     int    i_Port = StrToInt(sa_Settings[PORT]);
  52.  
  53.     char        c_ServerIp[16];
  54.     sockaddr_in soa_SocketAddress;
  55.     WSADATA     wsa_Data;
  56.  
  57.     if(WSAStartup(MAKEWORD(2,0), &wsa_Data) != 0) //Windoof-Socket v2.0 starten
  58.         F_Saft->M_Anzeige->Lines->Add("WSA konnte nicht initialisiert werden!");
  59.  
  60.     hostent *h_Dns = gethostbyname(s_ServerDns.c_str());
  61.  
  62.     sprintf(c_ServerIp, "%u.%u.%u.%u",
  63.         (unsigned char) h_Dns->h_addr_list[0][0], (unsigned char) h_Dns->h_addr_list[0][1],
  64.         (unsigned char) h_Dns->h_addr_list[0][2], (unsigned char) h_Dns->h_addr_list[0][3]);
  65.  
  66.     soa_SocketAddress.sin_family        = AF_INET;
  67.     soa_SocketAddress.sin_port          = htons(i_Port);
  68.     soa_SocketAddress.sin_addr.s_addr   = inet_addr(c_ServerIp);
  69.  
  70.     so_IrcSocket = socket(AF_INET, SOCK_STREAM, 0);
  71.     if(so_IrcSocket == 0)
  72.         F_Saft->M_Anzeige->Lines->Add("Socket konnte nicht initialisiert werden!");
  73.  
  74.     if(connect(so_IrcSocket, (sockaddr *) &soa_SocketAddress, sizeof(soa_SocketAddress)) == -1)
  75.         F_Saft->M_Anzeige->Lines->Add("Verbindung konnte nicht hergestellt werden!");
  76.  
  77.     F_Saft->M_Anzeige->Lines->Strings[F_Saft->M_Anzeige->Lines->Count - 1] =
  78.             F_Saft->M_Anzeige->Lines->Strings[F_Saft->M_Anzeige->Lines->Count - 1] + " fertig.";
  79.     fastRecv();
  80.  
  81.     logToServer();
  82.  
  83. }
  84.  
  85. void recvText( void *v_dummy );
  86.  
  87. void TIrc::logToServer()
  88. {
  89.     F_Saft->M_Anzeige->Lines->Add("Sende " + sa_Settings[NICK] + " & " + sa_Settings[NAME] + " an Server...");
  90.     String s_Nick;
  91.     String s_User;
  92.     String s_Pass;
  93.  
  94.     s_Pass = "PASS " + sa_Settings[PW]   + "\r\n";
  95.     s_Nick = "NICK " + sa_Settings[NICK] + "\r\n";
  96.     s_User = "USER " + sa_Settings[NAME] + " localhost "
  97.                      + sa_Settings[IP] + " :" + sa_Settings[RLNAME] + "\r\n";
  98.     send(so_IrcSocket, s_Pass.c_str(), s_Pass.Length(), 0);
  99.     send(so_IrcSocket, s_Nick.c_str(), s_Nick.Length(), 0);
  100.     send(so_IrcSocket, s_User.c_str(), s_User.Length(), 0);
  101.  
  102.     F_Saft->M_Anzeige->Lines->Strings[F_Saft->M_Anzeige->Lines->Count - 1] =
  103.             F_Saft->M_Anzeige->Lines->Strings[F_Saft->M_Anzeige->Lines->Count - 1] + " fertig.";
  104.     F_Saft->M_Anzeige->Lines->Add(s_Nick + s_User);
  105.     fastRecv();
  106.     joinChannel();
  107.     _beginthread(recvText, 0, (void *)so_IrcSocket);
  108. }
  109.  
  110. void TIrc::Pong(String s_Ping)
  111. {
  112.     s_Ping = "PONG " + s_Ping.SubString(5, s_Ping.Length()) + "\r\n";
  113.     send(so_IrcSocket, s_Ping.c_str(), s_Ping.Length(), 0);
  114. }
  115.  
  116. void TIrc::fastRecv()
  117. {
  118.     char c_TempData[8172];
  119.     int i_RecvData = recv(so_IrcSocket, c_TempData, 8172, 0);
  120.     c_TempData[i_RecvData] = 0;
  121.  
  122.     F_Saft->Memo2->Lines->Add(c_TempData);    //----- blubb
  123.     makeLines(c_TempData, true);
  124. }
  125.  
  126. void TIrc::joinChannel()
  127. {
  128.     F_Saft->M_Anzeige->Lines->Add("Betrete Channel " + sa_Settings[CHANNEL] + "...");
  129.     String s_joinCh = "JOIN " + sa_Settings[CHANNEL] + "\r\n";
  130.     send(so_IrcSocket, s_joinCh.c_str(), s_joinCh.Length(), 0);
  131.  
  132.     F_Saft->M_Anzeige->Lines->Strings[F_Saft->M_Anzeige->Lines->Count - 1] =
  133.             F_Saft->M_Anzeige->Lines->Strings[F_Saft->M_Anzeige->Lines->Count - 1] + " fertig.";
  134.     fastRecv();
  135. }
  136.  
  137. void TIrc::sendText(String s_Text)
  138. {
  139.         String s_ausT = sa_Settings[NICK] + ": " + s_Text;
  140.         F_Saft->M_Anzeige->Lines->Add(s_ausT);
  141.         s_Text = "PRIVMSG " + sa_Settings[CHANNEL] + " " + s_Text + "\r\n";
  142.         send(so_IrcSocket, s_Text.c_str(), s_Text.Length(), 0);
  143. }
  144.  
  145. void /*TIrc::*/recvText(void *v_ircSocket)
  146. {
  147.     while(1)
  148.     {
  149.         char c_recvTemp[4096];
  150.         int i_recvData = 0;
  151.  
  152.         if(i_recvData = recv((SOCKET)v_ircSocket, c_recvTemp, 4096, 0))
  153.             if(i_recvData > 0)
  154.             {
  155.                 c_recvTemp[i_recvData] = 0;
  156.  
  157.                 F_Saft->Memo2->Lines->Add(c_recvTemp);    //----- blubb
  158.                 F_Saft->Irc->makeLines(c_recvTemp, false);
  159.             }
  160.     }
  161. }
  162.  
  163. void TIrc::makeLines(String s_Text, bool b_Startup)
  164. {
  165.     int i_prev = 1;
  166.     sl_Text->Clear();
  167.     for(int i = 0; i <= s_Text.Length() - 2; i++)
  168.     {
  169.         if(s_Text.SubString(i, 2) == "\r\n")
  170.         {
  171.             sl_Text->Add(s_Text.SubString(i_prev, i - i_prev));
  172.  
  173.             F_Saft->Memo1->Lines->Add(s_Text.SubString(i_prev, i - i_prev));
  174.  
  175.             i_prev = i + 2;
  176.             i += 2;
  177.         }
  178.     }
  179.     if(b_Startup == false)
  180.         analysText();
  181.         else
  182.         {
  183.             analysStartUp();
  184.         }
  185. }
  186.  
  187. void TIrc::analysStartUp()
  188. {
  189.     for(int i = 0; i <= sl_Text->Count - 1; i++)
  190.     {
  191.         String s_Text = sl_Text->Strings[i];
  192.         if(s_Text.SubString(0, 1) == ":")
  193.         {
  194.             for(int i = 0; i <= s_Text.Length() - 3; i++)
  195.             {
  196.                 if(s_Text.SubString(i, 3) == "353")
  197.                 {
  198.                     setUserList(s_Text.SubString(i, s_Text.Length() - i));
  199.                     b_isUserList = true;
  200.                     break;
  201.                 }
  202.             }
  203.         }
  204.             else if(s_Text.SubString(0, 5) == "ERROR")
  205.                 F_Saft->M_Anzeige->Lines->Add(s_Text);
  206.     }
  207. }
  208.  
  209. void TIrc::analysText()
  210. {
  211.     for(int i = 0; i <= sl_Text->Count - 1; i++)
  212.     {
  213.         String s_Text = sl_Text->Strings[i];
  214.         if(b_isUserList == false)
  215.             analysStartUp();
  216.  
  217.         if(s_Text.SubString(0, 4) == "PING")
  218.             Pong(s_Text);
  219.             else if(s_Text.SubString(0,1) == ":")
  220.                 {
  221.                     String s_Name;
  222.                     for(int i = 0; i <= s_Text.Length(); i++)
  223.                     {
  224.                         if(s_Text.SubString(i, 1) == "!")
  225.                         {
  226.                             s_Name = s_Text.SubString(1, i);
  227.                             break;
  228.                         }
  229.                     }
  230.  
  231.                     for(int i = 0; i <= s_Text.Length() - 7; i++)
  232.                     {
  233.                         if(s_Text.SubString(i, 7) == "PRIVMSG")
  234.                             {
  235.                                 F_Saft->M_Anzeige->Lines->Add("<" + s_Name + ">" + s_Text.SubString(i + 8 + sa_Settings[CHANNEL].Length() + 1, s_Text.Length() - (i + 7)));
  236.                                 break;
  237.                             }
  238.                     }
  239.                 }
  240.         else
  241.         {
  242.             F_Saft->M_Anzeige->Lines->Add(s_Text);
  243.         }
  244.     }
  245. }
  246.  
  247. void TIrc::setUserList(String s_Befehl)
  248. {
  249.     b_isUserList = true;
  250.     if(s_Befehl.SubString(0,3) == "353")
  251.     {
  252.         int i_Anfang = 0;
  253.         bool b_Start = false;
  254.         for(int i = 0; i <= s_Befehl.Length(); i++)
  255.         {
  256.             if(s_Befehl.SubString(i, 1) == ":")
  257.                 {
  258.                     b_Start = true;
  259.                     i_Anfang = i + 1;
  260.                 }
  261.                 else if(b_Start == true && s_Befehl.SubString(i, 1) == " " &&  i_Anfang == 0)
  262.                         i_Anfang = i + 1;
  263.                     else if(b_Start == true && s_Befehl.SubString(i, 1) == " " && i_Anfang != 0)
  264.                         {
  265.                             F_Saft->L_UserList->Items->Add(s_Befehl.SubString(i_Anfang, i - i_Anfang));
  266.                             i_Anfang = i + 1;
  267.                         }
  268.                         else
  269.                             {
  270.                                 F_Saft->L_UserList->Items->Add(s_Befehl.SubString(i_Anfang, i - i_Anfang));
  271.                             }
  272.         }
  273.     }
  274.     if(s_Befehl.SubString(0,1) == "-")
  275.     {
  276.         for(int i = 0; i <= F_Saft->L_UserList->Items->Count - 1; i++)
  277.         {
  278.             if(F_Saft->L_UserList->Items->Strings[i] == s_Befehl.SubString(2, s_Befehl.Length()))
  279.                 F_Saft->L_UserList->Items->Delete(i);
  280.         }
  281.     }
  282.     if(s_Befehl.SubString(0,1) == "+")
  283.     {
  284.         if(s_Befehl.SubString(2, s_Befehl.Length()) != sa_Settings[NICK])
  285.             F_Saft->L_UserList->Items->Add(s_Befehl.SubString(2, s_Befehl.Length()));
  286.     }
  287. }
  288.  
  289. #pragma package(smart_init)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement