Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //--- ircdata.cpp
- #pragma hdrstop
- #include "maindata.h"
- //---------------------------------------------------------------------------
- TIrc::TIrc()//### SettingsDaten laden und übergeben nach public sa_Settings ###
- {
- b_isUserList = false;
- sl_Text = new TStringList;
- F_Saft->M_Anzeige->Lines->Add("Settings laden...");
- TStringList *sl_Datei = new TStringList;
- try
- {
- sl_Datei->LoadFromFile("settings.txt");
- for(int i = 0; i <= 7 - 1; i++) // 5 = maxSettings
- {
- sa_Settings[i] = sl_Datei->Strings[i].c_str();
- }
- F_Saft->M_Anzeige->Lines->Strings[F_Saft->M_Anzeige->Lines->Count - 1] =
- F_Saft->M_Anzeige->Lines->Strings[F_Saft->M_Anzeige->Lines->Count - 1] + " fertig.";
- delete sl_Datei;
- }catch(...)
- {
- F_Saft->M_Anzeige->Lines->Strings[F_Saft->M_Anzeige->Lines->Count - 1] =
- F_Saft->M_Anzeige->Lines->Strings[F_Saft->M_Anzeige->Lines->Count - 1] + " Fehler!";
- delete sl_Datei;
- }
- };
- TIrc::~TIrc ()
- {
- _endthread();
- WSACleanup();
- delete sl_Text;
- };
- void TIrc::Connect()
- {
- F_Saft->M_Anzeige->Lines->Add("Verbindung zu " + sa_Settings[IP] + " aufbauen...");
- String s_ServerDns = sa_Settings[IP];
- int i_Port = StrToInt(sa_Settings[PORT]);
- char c_ServerIp[16];
- sockaddr_in soa_SocketAddress;
- WSADATA wsa_Data;
- if(WSAStartup(MAKEWORD(2,0), &wsa_Data) != 0) //Windoof-Socket v2.0 starten
- F_Saft->M_Anzeige->Lines->Add("WSA konnte nicht initialisiert werden!");
- hostent *h_Dns = gethostbyname(s_ServerDns.c_str());
- sprintf(c_ServerIp, "%u.%u.%u.%u",
- (unsigned char) h_Dns->h_addr_list[0][0], (unsigned char) h_Dns->h_addr_list[0][1],
- (unsigned char) h_Dns->h_addr_list[0][2], (unsigned char) h_Dns->h_addr_list[0][3]);
- soa_SocketAddress.sin_family = AF_INET;
- soa_SocketAddress.sin_port = htons(i_Port);
- soa_SocketAddress.sin_addr.s_addr = inet_addr(c_ServerIp);
- so_IrcSocket = socket(AF_INET, SOCK_STREAM, 0);
- if(so_IrcSocket == 0)
- F_Saft->M_Anzeige->Lines->Add("Socket konnte nicht initialisiert werden!");
- if(connect(so_IrcSocket, (sockaddr *) &soa_SocketAddress, sizeof(soa_SocketAddress)) == -1)
- F_Saft->M_Anzeige->Lines->Add("Verbindung konnte nicht hergestellt werden!");
- F_Saft->M_Anzeige->Lines->Strings[F_Saft->M_Anzeige->Lines->Count - 1] =
- F_Saft->M_Anzeige->Lines->Strings[F_Saft->M_Anzeige->Lines->Count - 1] + " fertig.";
- fastRecv();
- logToServer();
- }
- void recvText( void *v_dummy );
- void TIrc::logToServer()
- {
- F_Saft->M_Anzeige->Lines->Add("Sende " + sa_Settings[NICK] + " & " + sa_Settings[NAME] + " an Server...");
- String s_Nick;
- String s_User;
- String s_Pass;
- s_Pass = "PASS " + sa_Settings[PW] + "\r\n";
- s_Nick = "NICK " + sa_Settings[NICK] + "\r\n";
- s_User = "USER " + sa_Settings[NAME] + " localhost "
- + sa_Settings[IP] + " :" + sa_Settings[RLNAME] + "\r\n";
- send(so_IrcSocket, s_Pass.c_str(), s_Pass.Length(), 0);
- send(so_IrcSocket, s_Nick.c_str(), s_Nick.Length(), 0);
- send(so_IrcSocket, s_User.c_str(), s_User.Length(), 0);
- F_Saft->M_Anzeige->Lines->Strings[F_Saft->M_Anzeige->Lines->Count - 1] =
- F_Saft->M_Anzeige->Lines->Strings[F_Saft->M_Anzeige->Lines->Count - 1] + " fertig.";
- F_Saft->M_Anzeige->Lines->Add(s_Nick + s_User);
- fastRecv();
- joinChannel();
- _beginthread(recvText, 0, (void *)so_IrcSocket);
- }
- void TIrc::Pong(String s_Ping)
- {
- s_Ping = "PONG " + s_Ping.SubString(5, s_Ping.Length()) + "\r\n";
- send(so_IrcSocket, s_Ping.c_str(), s_Ping.Length(), 0);
- }
- void TIrc::fastRecv()
- {
- char c_TempData[8172];
- int i_RecvData = recv(so_IrcSocket, c_TempData, 8172, 0);
- c_TempData[i_RecvData] = 0;
- F_Saft->Memo2->Lines->Add(c_TempData); //----- blubb
- makeLines(c_TempData, true);
- }
- void TIrc::joinChannel()
- {
- F_Saft->M_Anzeige->Lines->Add("Betrete Channel " + sa_Settings[CHANNEL] + "...");
- String s_joinCh = "JOIN " + sa_Settings[CHANNEL] + "\r\n";
- send(so_IrcSocket, s_joinCh.c_str(), s_joinCh.Length(), 0);
- F_Saft->M_Anzeige->Lines->Strings[F_Saft->M_Anzeige->Lines->Count - 1] =
- F_Saft->M_Anzeige->Lines->Strings[F_Saft->M_Anzeige->Lines->Count - 1] + " fertig.";
- fastRecv();
- }
- void TIrc::sendText(String s_Text)
- {
- String s_ausT = sa_Settings[NICK] + ": " + s_Text;
- F_Saft->M_Anzeige->Lines->Add(s_ausT);
- s_Text = "PRIVMSG " + sa_Settings[CHANNEL] + " " + s_Text + "\r\n";
- send(so_IrcSocket, s_Text.c_str(), s_Text.Length(), 0);
- }
- void /*TIrc::*/recvText(void *v_ircSocket)
- {
- while(1)
- {
- char c_recvTemp[4096];
- int i_recvData = 0;
- if(i_recvData = recv((SOCKET)v_ircSocket, c_recvTemp, 4096, 0))
- if(i_recvData > 0)
- {
- c_recvTemp[i_recvData] = 0;
- F_Saft->Memo2->Lines->Add(c_recvTemp); //----- blubb
- F_Saft->Irc->makeLines(c_recvTemp, false);
- }
- }
- }
- void TIrc::makeLines(String s_Text, bool b_Startup)
- {
- int i_prev = 1;
- sl_Text->Clear();
- for(int i = 0; i <= s_Text.Length() - 2; i++)
- {
- if(s_Text.SubString(i, 2) == "\r\n")
- {
- sl_Text->Add(s_Text.SubString(i_prev, i - i_prev));
- F_Saft->Memo1->Lines->Add(s_Text.SubString(i_prev, i - i_prev));
- i_prev = i + 2;
- i += 2;
- }
- }
- if(b_Startup == false)
- analysText();
- else
- {
- analysStartUp();
- }
- }
- void TIrc::analysStartUp()
- {
- for(int i = 0; i <= sl_Text->Count - 1; i++)
- {
- String s_Text = sl_Text->Strings[i];
- if(s_Text.SubString(0, 1) == ":")
- {
- for(int i = 0; i <= s_Text.Length() - 3; i++)
- {
- if(s_Text.SubString(i, 3) == "353")
- {
- setUserList(s_Text.SubString(i, s_Text.Length() - i));
- b_isUserList = true;
- break;
- }
- }
- }
- else if(s_Text.SubString(0, 5) == "ERROR")
- F_Saft->M_Anzeige->Lines->Add(s_Text);
- }
- }
- void TIrc::analysText()
- {
- for(int i = 0; i <= sl_Text->Count - 1; i++)
- {
- String s_Text = sl_Text->Strings[i];
- if(b_isUserList == false)
- analysStartUp();
- if(s_Text.SubString(0, 4) == "PING")
- Pong(s_Text);
- else if(s_Text.SubString(0,1) == ":")
- {
- String s_Name;
- for(int i = 0; i <= s_Text.Length(); i++)
- {
- if(s_Text.SubString(i, 1) == "!")
- {
- s_Name = s_Text.SubString(1, i);
- break;
- }
- }
- for(int i = 0; i <= s_Text.Length() - 7; i++)
- {
- if(s_Text.SubString(i, 7) == "PRIVMSG")
- {
- F_Saft->M_Anzeige->Lines->Add("<" + s_Name + ">" + s_Text.SubString(i + 8 + sa_Settings[CHANNEL].Length() + 1, s_Text.Length() - (i + 7)));
- break;
- }
- }
- }
- else
- {
- F_Saft->M_Anzeige->Lines->Add(s_Text);
- }
- }
- }
- void TIrc::setUserList(String s_Befehl)
- {
- b_isUserList = true;
- if(s_Befehl.SubString(0,3) == "353")
- {
- int i_Anfang = 0;
- bool b_Start = false;
- for(int i = 0; i <= s_Befehl.Length(); i++)
- {
- if(s_Befehl.SubString(i, 1) == ":")
- {
- b_Start = true;
- i_Anfang = i + 1;
- }
- else if(b_Start == true && s_Befehl.SubString(i, 1) == " " && i_Anfang == 0)
- i_Anfang = i + 1;
- else if(b_Start == true && s_Befehl.SubString(i, 1) == " " && i_Anfang != 0)
- {
- F_Saft->L_UserList->Items->Add(s_Befehl.SubString(i_Anfang, i - i_Anfang));
- i_Anfang = i + 1;
- }
- else
- {
- F_Saft->L_UserList->Items->Add(s_Befehl.SubString(i_Anfang, i - i_Anfang));
- }
- }
- }
- if(s_Befehl.SubString(0,1) == "-")
- {
- for(int i = 0; i <= F_Saft->L_UserList->Items->Count - 1; i++)
- {
- if(F_Saft->L_UserList->Items->Strings[i] == s_Befehl.SubString(2, s_Befehl.Length()))
- F_Saft->L_UserList->Items->Delete(i);
- }
- }
- if(s_Befehl.SubString(0,1) == "+")
- {
- if(s_Befehl.SubString(2, s_Befehl.Length()) != sa_Settings[NICK])
- F_Saft->L_UserList->Items->Add(s_Befehl.SubString(2, s_Befehl.Length()));
- }
- }
- #pragma package(smart_init)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement