diff --git a/ChatClient/1.ico b/ChatClient/1.ico new file mode 100644 index 0000000..8bd8475 Binary files /dev/null and b/ChatClient/1.ico differ diff --git a/ChatClient/2.ico b/ChatClient/2.ico new file mode 100644 index 0000000..f8a37a5 Binary files /dev/null and b/ChatClient/2.ico differ diff --git a/ChatClient/Project1.cbproj b/ChatClient/Project1.cbproj new file mode 100644 index 0000000..9d8ea91 --- /dev/null +++ b/ChatClient/Project1.cbproj @@ -0,0 +1,620 @@ + + + {BD0DE8F9-5FAE-4BDF-B85B-1ABF830B4C5D} + 18.1 + VCL + Application + Project1.cpp + True + Debug + Win32 + 1 + + + true + + + true + Base + true + + + true + Base + true + + + true + Cfg_1 + true + true + + + true + Base + true + + + true + Cfg_2 + true + true + + + <_TCHARMapping>wchar_t + rtl.lib;vcl.lib + System;Xml;Data;Datasnap;Web;Soap;Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;$(DCC_Namespace) + Project1 + C:\Users\Slava_Villa\Documents\ОбщийЧат\;D:\Работы\Чат\;..\Работы\;..\ОбщийЧат\;..\СоединениеЧата\;..\..\..\Работа\;$(ILINK_LibraryPath) + $(BDS)\bin\cbuilder_PROJECTICON.ico + C:\Users\Slava_Villa\Documents\ОбщийЧат\;D:\Работы\Чат\;..\Работы\;..\ОбщийЧат\;..\СоединениеЧата\;..\..\..\Работа\;$(IncludePath) + true + CppVCLApplication + JPHNE + true + true + .\$(Platform)\$(Config) + .\$(Platform)\$(Config) + false + true + true + $(BDSLIB)\$(PLATFORM)\release\$(LANGDIR);$(ILINK_TranslatedLibraryPath) + + + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) + appanalytics;bcbsmp;bindcomp;bindcompfmx;bindcompvcl;bindengine;dbrtl;dsnap;fmx;fmxase;fmxdae;fmxobj;IndyCore;IndyProtocols;IndySystem;rtl;svn;tethering;vcl;vclactnband;vcldb;vcldsnap;vclimg;VclSmp;vcltouch;vclwinx;vclx;xmlrtl;$(PackageImports) + $(BDS)\bin\default_app.manifest + CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments= + true + 1033 + $(BDSINCLUDE)\windows\vcl;$(IncludePath) + + + false + true + false + true + _DEBUG;$(Defines) + false + None + DEBUG + true + true + true + true + Full + true + true + true + true + true + $(BDSLIB)\$(PLATFORM)\debug;$(ILINK_LibraryPath) + $(BDSLIB)\$(PLATFORM)\debug\$(LANGDIR);$(ILINK_TranslatedLibraryPath) + + + false + rtl.lib;vcl.lib + false + 1033 + true + true + true + + + NDEBUG;$(Defines) + None + + + true + true + + + + 0 + + + 1 + true + + +
Form1
+ dfm + Unit1.h + 2 +
+ +
Form3
+ dfm + Unit3.h + 4 +
+ + + + Cfg_2 + Base + + + Base + + + Cfg_1 + Base + +
+ + CPlusPlusBuilder.Personality.12 + CppVCLApplication + + + + False + True + True + False + + + Project1.cpp + + + + True + + + + + true + + + + + true + + + + + true + + + + + true + + + + + true + + + + + true + + + + + true + + + + + true + + + + + Project1.tds + true + + + + + true + + + + + true + + + + + Project1.exe + true + + + + + 1 + + + 1 + + + + + Contents\Resources + 1 + + + + + classes + 1 + + + + + Contents\MacOS + 0 + + + 1 + + + Contents\MacOS + 1 + + + + + 1 + + + 1 + + + 1 + + + + + res\drawable-xxhdpi + 1 + + + + + library\lib\mips + 1 + + + + + 1 + + + 1 + + + 0 + + + 1 + + + Contents\MacOS + 1 + + + library\lib\armeabi-v7a + 1 + + + 1 + + + + + 0 + + + Contents\MacOS + 1 + .framework + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + library\lib\armeabi + 1 + + + + + 0 + + + 1 + + + Contents\MacOS + 1 + + + + + 1 + + + 1 + + + 1 + + + + + res\drawable-normal + 1 + + + + + res\drawable-xhdpi + 1 + + + + + res\drawable-large + 1 + + + + + 1 + + + 1 + + + 1 + + + + + ..\ + 1 + + + ..\ + 1 + + + + + res\drawable-hdpi + 1 + + + + + library\lib\armeabi-v7a + 1 + + + + + Contents + 1 + + + + + ..\ + 1 + + + + + 1 + + + 1 + + + 1 + + + + + res\values + 1 + + + + + res\drawable-small + 1 + + + + + res\drawable + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + + + res\drawable + 1 + + + + + 0 + + + 0 + + + Contents\Resources\StartUp\ + 0 + + + 0 + + + 0 + + + 0 + + + + + library\lib\armeabi-v7a + 1 + + + + + 0 + .bpl + + + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + 1 + .dylib + + + 1 + .dylib + + + + + res\drawable-mdpi + 1 + + + + + res\drawable-xlarge + 1 + + + + + res\drawable-ldpi + 1 + + + + + 0 + .dll;.bpl + + + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + 1 + .dylib + + + 1 + .dylib + + + + + + + + + + + + + 12 + + + + +
diff --git a/ChatClient/Project1.cbproj.local b/ChatClient/Project1.cbproj.local new file mode 100644 index 0000000..1ea07b7 --- /dev/null +++ b/ChatClient/Project1.cbproj.local @@ -0,0 +1,26 @@ + + + + 1899.12.30 00:00:00.000.380,C:\Users\Slava_Villa\Documents\Работа\Unit2.cpp=C:\Users\Slava_Villa\Documents\Embarcadero\Studio\Projects\Unit2.cpp + 1899.12.30 00:00:00.000.895,C:\Users\Slava_Villa\Documents\Работа\Project1PCH1.h=C:\Users\Slava_Villa\Documents\Embarcadero\Studio\Projects\Project1PCH1.h + 1899.12.30 00:00:00.000.380,C:\Users\Slava_Villa\Documents\Работа\Unit2.h=C:\Users\Slava_Villa\Documents\Embarcadero\Studio\Projects\Unit2.h + 1899.12.30 00:00:00.000.147,=C:\Users\Slava_Villa\Documents\Embarcadero\Studio\Projects\Project1PCH1.h + 1899.12.30 00:00:00.000.100,=C:\Users\Slava_Villa\Documents\Embarcadero\Studio\Projects\Project1PCH1.h + 1899.12.30 00:00:00.000.061,D:\Работы\Чат\Project1.cbproj=D:\Работы\Чат\Project1.cbproj + 1899.12.30 00:00:00.000.476,C:\Users\Slava_Villa\Documents\Работа\Unit1.dfm=C:\Users\Slava_Villa\Documents\Embarcadero\Studio\Projects\Unit1.dfm + 1899.12.30 00:00:00.000.570,D:\Работы\Чат\Project1.cbproj=C:\Users\Slava_Villa\Documents\ОбщийЧат\Project1.cbproj + 1899.12.30 00:00:00.000.968,C:\Users\Slava_Villa\Documents\Работа\Project1.cbproj=C:\Users\Slava_Villa\Documents\Embarcadero\Studio\Projects\Project1.cbproj + 1899.12.30 00:00:00.000.380,C:\Users\Slava_Villa\Documents\Работа\Unit2.dfm=C:\Users\Slava_Villa\Documents\Embarcadero\Studio\Projects\Unit2.dfm + 1899.12.30 00:00:00.000.775,C:\Users\Slava_Villa\Documents\ОбщийЧат\Project1.cbproj=C:\Users\Slava_Villa\Documents\Работы\Project1.cbproj + 1899.12.30 00:00:00.000.375,C:\Users\Slava_Villa\Documents\Работы\Project1.cbproj=C:\Users\Slava_Villa\Documents\СоединениеЧата\Project1.cbproj + 1899.12.30 00:00:00.000.759,=C:\Users\miste\Desktop\ОбщийЧат (1)\ОбщийЧат(не закончено)\ОбщийЧат\Unit3.cpp + 1899.12.30 00:00:00.000.109,=C:\Users\Slava_Villa\Documents\Embarcadero\Studio\Projects\Unit1.cpp + 1899.12.30 00:00:00.000.483,C:\Users\Slava_Villa\Documents\СоединениеЧата\Project1.cbproj=C:\Users\Slava_Villa\Documents\ОбщийЧат\Project1.cbproj + 1899.12.30 00:00:00.000.685,=C:\Users\Slava_Villa\Documents\Embarcadero\Studio\Projects\Unit1.cpp + 1899.12.30 00:00:00.000.901,=C:\Users\Slava_Villa\Documents\Embarcadero\Studio\Projects\Unit2.cpp + 1899.12.30 00:00:00.000.948,C:\Users\Slava_Villa\Documents\ОбщийЧат\Project1.cbproj=D:\Работы\Чат\Project1.cbproj + 1899.12.30 00:00:00.000.282,C:\Users\miste\Desktop\ОбщийЧат (1)\ОбщийЧат(не закончено)\ОбщийЧат\Unit2.cpp= + 1899.12.30 00:00:00.000.476,C:\Users\Slava_Villa\Documents\Работа\Unit1.h=C:\Users\Slava_Villa\Documents\Embarcadero\Studio\Projects\Unit1.h + 1899.12.30 00:00:00.000.476,C:\Users\Slava_Villa\Documents\Работа\Unit1.cpp=C:\Users\Slava_Villa\Documents\Embarcadero\Studio\Projects\Unit1.cpp + + diff --git a/ChatClient/Project1.cpp b/ChatClient/Project1.cpp new file mode 100644 index 0000000..816cdfb --- /dev/null +++ b/ChatClient/Project1.cpp @@ -0,0 +1,37 @@ +//--------------------------------------------------------------------------- + +#include +#pragma hdrstop +#include +//--------------------------------------------------------------------------- +USEFORM("Unit3.cpp", Form3); +USEFORM("Unit1.cpp", Form1); +//--------------------------------------------------------------------------- +int WINAPI _tWinMain(HINSTANCE, HINSTANCE, LPTSTR, int) +{ + try + { + Application->Initialize(); + //Application->MainFormOnTaskBar = true; + Application->CreateForm(__classid(TForm1), &Form1); + Application->CreateForm(__classid(TForm3), &Form3); + Application->Run(); + } + catch (Exception &exception) + { + Application->ShowException(&exception); + } + catch (...) + { + try + { + throw Exception(""); + } + catch (Exception &exception) + { + Application->ShowException(&exception); + } + } + return 0; +} +//--------------------------------------------------------------------------- diff --git a/ChatClient/Project1.res b/ChatClient/Project1.res new file mode 100644 index 0000000..9e7982f Binary files /dev/null and b/ChatClient/Project1.res differ diff --git a/ChatClient/Project1.stat b/ChatClient/Project1.stat new file mode 100644 index 0000000..1e1f3f2 --- /dev/null +++ b/ChatClient/Project1.stat @@ -0,0 +1,10 @@ +[Stats] +EditorSecs=4551 +DesignerSecs=1549 +InspectorSecs=558 +CompileSecs=303553 +OtherSecs=744 +StartTime=22.05.2017 13:38:11 +RealKeys=0 +EffectiveKeys=0 +DebugSecs=18 diff --git a/ChatClient/Project1PCH1.h b/ChatClient/Project1PCH1.h new file mode 100644 index 0000000..d540360 --- /dev/null +++ b/ChatClient/Project1PCH1.h @@ -0,0 +1,3 @@ +#include +#include + diff --git a/ChatClient/Project1_Icon.ico b/ChatClient/Project1_Icon.ico new file mode 100644 index 0000000..ee42675 Binary files /dev/null and b/ChatClient/Project1_Icon.ico differ diff --git a/ChatClient/Project1_Icon1.ico b/ChatClient/Project1_Icon1.ico new file mode 100644 index 0000000..c8a55de Binary files /dev/null and b/ChatClient/Project1_Icon1.ico differ diff --git a/ChatClient/Project1_Icon2.ico b/ChatClient/Project1_Icon2.ico new file mode 100644 index 0000000..02f64ce Binary files /dev/null and b/ChatClient/Project1_Icon2.ico differ diff --git a/ChatClient/Project1_Icon3.ico b/ChatClient/Project1_Icon3.ico new file mode 100644 index 0000000..02f64ce Binary files /dev/null and b/ChatClient/Project1_Icon3.ico differ diff --git a/ChatClient/Project1_Icon4.ico b/ChatClient/Project1_Icon4.ico new file mode 100644 index 0000000..8bd8475 Binary files /dev/null and b/ChatClient/Project1_Icon4.ico differ diff --git a/ChatClient/Unit1.cpp b/ChatClient/Unit1.cpp new file mode 100644 index 0000000..25bbc0c --- /dev/null +++ b/ChatClient/Unit1.cpp @@ -0,0 +1,350 @@ +//--------------------------------------------------------------------------- + +#include +#pragma hdrstop + +#include "Unit1.h" +#include "Unit3.h" +#include +//--------------------------------------------------------------------------- +#pragma package(smart_init) +#pragma resource "*.dfm" +TForm1 *Form1; +int n=0;// n - непрочитанные сообщения +String userID; +//--------------------------------------------------------------------------- +__fastcall TForm1::TForm1(TComponent* Owner) + : TForm(Owner) +{ + +TrayIcon1->Icons = new TImageList(this); + TIcon *MyIcon = new TIcon; + if(n!=0) //проверка на пришедшие сообщения + { + //смена иконка в tray + MyIcon->LoadFromFile("2.ico"); + TrayIcon1->Icon->Assign(MyIcon); + TrayIcon1->Icons->AddIcon(MyIcon); + //сами уведомления + TrayIcon1->BalloonTimeout = 3000; // Ставлю на 3 секунды + TrayIcon1->BalloonTitle = "Вам сообщение"; + TrayIcon1->BalloonHint ="Кол-во непрочитанных сообщений: "+IntToStr(n); + TrayIcon1->ShowBalloonHint(); // Вызов + } + else + { + MyIcon->LoadFromFile("1.ico"); + TrayIcon1->Icon->Assign(MyIcon); + TrayIcon1->Icons->AddIcon(MyIcon); + } + +} +//--------------------------------------------------------------------------- +void __fastcall TForm1::Button1Click(TObject *Sender) +{ +Form1->Caption = "Осьминожка"; +// проверка на заполненость Edit +if (LogIN->Text == "") + +{ShowMessage("Вы не ввели логин");} + +else + +if (IP->Text == "") + +{ShowMessage ("Вы не ввели IP-сервера");} + +else + if(Port->Text=="") + { + ShowMessage("Введите Порт"); + return; + } +else +{ +//Подключение к серверу + + // ПО нажатию + ClientSocket1->Address = IP->Text; // IP + ClientSocket1->Port = StrToInt(Port->Text); // Порт + ClientSocket1->Active = true; + //JSON + TJSONObject *o = new TJSONObject(); + o->AddPair( new TJSONPair("type","connect") ); + o->AddPair( new TJSONPair("login",LogIN->Text) ); + //Отправка на сервер инф. о подключении клиента + ClientSocket1->Socket->SendText(o->ToString()); + +Form1->Timer1->Enabled=true; +BitBtn1->Visible = true; +Disconnect->Visible = true; +Button3->Visible = true; +Button5->Visible = true; +Chat->Visible = true; +Message->Visible = true; +Label5->Visible = true; + +Label1->Visible = false; +Label2->Visible = false; +Label3->Visible = false; +Label4->Visible = false; +LogIN->Visible = false; +IP->Visible = false; +Port->Visible = false; +Button1->Visible = false; +Button2->Visible = false; +Button4->Visible = false; + +} +} +//--------------------------------------------------------------------------- + + +void __fastcall TForm1::ClientSocket1Connect(TObject *Sender, TCustomWinSocket *Socket) + +{ + Chat->Lines->Add("Мы подключились"); + //JSON + TJSONObject *o = new TJSONObject(); + o->AddPair( new TJSONPair("type","connect") ); + o->AddPair( new TJSONPair("login",LogIN->Text) ); + //Отправка на сервер инф. о подключении клиента + ClientSocket1->Socket->SendText(o->ToString()); + Timer1->Enabled=true; +} +//--------------------------------------------------------------------------- + +void __fastcall TForm1::ClientSocket1Read(TObject *Sender, TCustomWinSocket *Socket) + +{ + +// Строка пришедшая от пользователя +String text = Socket->ReceiveText(); + +// Разбираем пришедшие данные +TJSONObject *bustStr = (TJSONObject*) TJSONObject::ParseJSONValue(TEncoding::UTF8->GetBytes( text ),0); + + + + + //Уведомляем клиента о входе в сеть других пользователей + if( transferText( bustStr->Pairs[0]->JsonValue->ToString() ) == "infoConnect"){ + + Chat->Lines->Add(transferText(bustStr->Pairs[1]->JsonValue->ToString())+" появился в сети"); + } + + //Уведомляем клиента о входе в сеть других пользователей + if( transferText( bustStr->Pairs[0]->JsonValue->ToString() ) == "infoDisonnect"){ + + Chat->Lines->Add(transferText(bustStr->Pairs[1]->JsonValue->ToString())+" вышел из сети"); + } + + //Сообщения + if( transferText( bustStr->Pairs[0]->JsonValue->ToString() ) == "message"){ + + Chat->Lines->Add(transferText(bustStr->Pairs[1]->JsonValue->ToString())+" : "+transferText(bustStr->Pairs[2]->JsonValue->ToString())); + } + + + /* + //Уведомляем клиента о входе в сеть других пользователей + if( transferText( bustStr->Pairs[0]->JsonValue->ToString() ) == "infoConnect"){ + + Chat->Lines->Add(transferText(bustStr->Pairs[1]->JsonValue->ToString()))+" появился в сети"; + } + */ + + // Если нет типа, то выкидываем + if( transferText( bustStr->Pairs[0]->JsonString->ToString() ) != "type") + return; + + + //Memo1->Lines->Add(Socket->ReceiveText()); + //Memo1->Text=Socket->ReceiveText(); +} +//--------------------------------------------------------------------------- + String TForm1::transferText(String text) + { + + text.Delete(1,1); + text.Delete(text.Length(),1); + + return text; + } +//---------------------------------------------------------------------------- + +void __fastcall TForm1::ClientSocket1Connecting(TObject *Sender, TCustomWinSocket *Socket) + +{ + Chat->Lines->Add("Попытка присоединиться..."); +} +//--------------------------------------------------------------------------- + +void __fastcall TForm1::ClientSocket1Disconnect(TObject *Sender, TCustomWinSocket *Socket) + +{ + Chat->Lines->Add("Мы отключились"); +} +//--------------------------------------------------------------------------- + +void __fastcall TForm1::ClientSocket1Error(TObject *Sender, TCustomWinSocket *Socket, + TErrorEvent ErrorEvent, int &ErrorCode) +{ +Chat->Lines->Add("Ошибка"); +} +//--------------------------------------------------------------------------- + +void __fastcall TForm1::PortKeyPress(TObject *Sender, System::WideChar &Key) +{ + // Ввод только чисел и backspace + if( Key != 8 && ( (Key < '0' || Key > '9' ) ) ) Key = NULL; + else if( Key == 8 && Port->Text.Length() == 1 && Port->Text[1] == '+') + Key = NULL; + return; +} +//--------------------------------------------------------------------------- + +void __fastcall TForm1::FormCloseQuery(TObject *Sender, bool &CanClose) +{ + CanClose = false; + TrayIcon1->Visible = true; + ShowWindow(Form1->Handle, SW_HIDE); +} +//--------------------------------------------------------------------------- + +void __fastcall TForm1::TrayIcon1Click(TObject *Sender) +{ + TrayIcon1->Visible = false; + ShowWindow(Form1->Handle, SW_SHOW); +} +//--------------------------------------------------------------------------- + +void __fastcall TForm1::TrayIcon1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, + int X, int Y) +{ + if(Button==mbRight) +TrayIcon1->PopupMenu = PopupMenu1; + +} +//--------------------------------------------------------------------------- + +void __fastcall TForm1::CloseClick(TObject *Sender) +{ + TrayIcon1->Visible = false; + Application->Terminate(); + //Form1->Close(); +} +//--------------------------------------------------------------------------- + +void __fastcall TForm1::DisconnectClick(TObject *Sender) +{ +Form1->Caption = "Вход"; +Chat->Lines->Clear(); +Message->Text = ""; +IP->Text = ""; +Port->Text = ""; +//Скрытие всего что находилось на форме +Form1->Timer1->Enabled=false; +BitBtn1->Visible = false; +Disconnect->Visible = false; +Button3->Visible = false; +Chat->Visible = false; +Message->Visible = false; +Label5->Visible = false; + //Открытие нужных элементов +Label1->Visible = true; +Label2->Visible = true; +Label3->Visible = true; +Label4->Visible = true; +LogIN->Visible = true; +IP->Visible = true; +Port->Visible = true; +Button1->Visible = true; +Button2->Visible = true; +Button4->Visible = true; +Button5->Visible = false; + + TJSONObject *o = new TJSONObject(); + o->AddPair( new TJSONPair("type","disconnect") ); + o->AddPair( new TJSONPair("login",LogIN->Text) ); + //Отправка на сервер инф. о подключении клиента + ClientSocket1->Socket->SendText(o->ToString()); + Timer1->Enabled=false; + ClientSocket1->Active = false; + Chat->Lines->Clear(); +} +//--------------------------------------------------------------------------- + +void __fastcall TForm1::BitBtn1Click(TObject *Sender) +{ +Application->Terminate(); +} +//--------------------------------------------------------------------------- + +void __fastcall TForm1::Timer1Timer(TObject *Sender) +{ + /* + TJSONObject *o = new TJSONObject(); + o->AddPair( new TJSONPair("type","online") ); + o->AddPair( new TJSONPair("login",LogIN->Text) ); + //Отправка на сервер инф. о состоянии клиента + ClientSocket1->Socket->SendText(o->ToString()); + */ +} +//--------------------------------------------------------------------------- + +void __fastcall TForm1::Button3Click(TObject *Sender) +{ + if(Message->Text==""){ + ShowMessage("Введите текст который надо отправить"); + return; + } + + // Отправка текста + // AnsiString Time = Now().FormatString("hh:nn"); + // Memo1->Lines->Add(Time); + + //JSON + TJSONObject *o = new TJSONObject(); + o->AddPair( new TJSONPair("type","message") ); + o->AddPair( new TJSONPair("login",LogIN->Text) ); + o->AddPair( new TJSONPair("text",Message->Text) ); + + //Отправка на сервер + // Chat->Lines->Add(LogIN->Text+" : "+Message->Text); + ClientSocket1->Socket->SendText(o->ToString()); + + Message->Text=""; +} +//--------------------------------------------------------------------------- + +void __fastcall TForm1::Button4Click(TObject *Sender) +{ + Application->Terminate(); +} +//--------------------------------------------------------------------------- + + + + +void __fastcall TForm1::MessageKeyPress(TObject *Sender, System::WideChar &Key) +{ +if(Key == VK_RETURN){ + Button3Click(Sender); + } +} +//--------------------------------------------------------------------------- + +void __fastcall TForm1::Button5Click(TObject *Sender) +{ +Form1->Visible=false; +Form3->Visible=true; +} +//--------------------------------------------------------------------------- + +void __fastcall TForm1::FormCreate(TObject *Sender) +{ +Button5->Visible=false; +} +//--------------------------------------------------------------------------- + diff --git a/ChatClient/Unit1.dfm b/ChatClient/Unit1.dfm new file mode 100644 index 0000000..f364459 --- /dev/null +++ b/ChatClient/Unit1.dfm @@ -0,0 +1,755 @@ +object Form1: TForm1 + Left = 0 + Top = 0 + Caption = #1042#1093#1086#1076 + ClientHeight = 415 + ClientWidth = 611 + Color = clBtnFace + Constraints.MaxHeight = 454 + Constraints.MaxWidth = 627 + Constraints.MinHeight = 454 + Constraints.MinWidth = 627 + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'Tahoma' + Font.Style = [] + Icon.Data = { + 0000010001004040000001002000284200001600000028000000400000008000 + 0000010020000000000000420000130B0000130B000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000DCDCDC04B0B0B0338A8A8A5B7272 + 72746060608763636383717171748E8E8E56B4B4B42EDBDBDB04000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000DDDDDD02B5B5B52C9191915274747472636363835F5F5F87717171748B8B + 8B59B2B2B230DADADA0600000000000000000000000000000000000000000000 + 00000000000000000000BDBDBD24505050960F0F0FDB000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF0F0F0FDB404040A68C8C + 8C59DBDBDB040000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000DBDBDB04919191524343 + 43A40F0F0FDB000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF101010D951515196BCBCBC260000000000000000000000000000 + 0000000000007D7D7D67020202E8000000FF000000FF010101FF010101FF0101 + 01FF010101FF000000FF010101FF010101FF000000FF000000FF000000FF0000 + 00FF0F0F0FDB6868687ED2D2D20F000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000D1D1D10F6B6B6B7A101010D9000000FF0000 + 00FF000000FF010101FF010101FF000000FF000000FF010101FF010101FF0101 + 01FF000000FF000000FF000000FF010101EA7D7D7D6700000000000000000000 + 000084848461000000EA000000FF010101FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF010101FF010101FF010101FF010101FF0101 + 01FF000000FF000000FF080808E1727272740000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000808080650E0E0EDB000000FF000000FF010101FF0101 + 01FF010101FF010101FF010101FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF020202FF000000FF000000EA8383836100000000D3D3 + D30D080808E1000000FF000000FF000000FF050505FF0D0D0DFF101010FF1010 + 10FF0B0B0BFF030303FF000000FF000000FF010101FF010101FF010101FF0101 + 01FF010101FF010101FF000000FF000000EA272727C2B3B3B32E000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000BEBEBE24333333B5000000EA000000FF000000FF000000FF010101FF0101 + 01FF010101FF010101FF000000FF000000FF030303FF0B0B0BFF101010FF1010 + 10FF0D0D0DFF060606FF000000FF020202FF000000FF090909E1D3D3D30D8080 + 80FF000000FF000000FF020202FF1D1D1DD767676785ABABAB3ACCCCCC16C9C9 + C9189C9C9C4B4C4C4CA2101010E4020202FF000000FF020202FF010101FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF090909E18686865F0000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000009898 + 984C101010D9000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF020202FF000000FF020202FF101010E44C4C4CA29C9C9C4BC9C9C918CACA + CA18AEAEAE37696969831E1E1ED5030303FF010101FF000000FF838383FF4040 + 40FF000000FF040404F2474747A9DCDCDC040000000000000000000000000000 + 00000000000000000000BDBDBD26494949A60A0A0AEB000000FF010101FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF010101EA7373 + 7372000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000008585855F0808 + 08E1000000FF010101FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF0A0A0AEB484848A6BBBBBB280000000000000000000000000000 + 00000000000000000000DDDDDD024B4B4BA4040404F2000000FF474747FF2B2B + 2BFF000000FF414141AF00000000000000000000000000000000000000000000 + 00000000000000000000000000000000000085858564121212E2000000FF0202 + 02FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0202 + 02E8747474720000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000007878786E010101EA0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF010101FF0000 + 00FF121212E28585856400000000000000000000000000000000000000000000 + 000000000000000000000000000000000000444444AB010101FF2A2A2AFF1313 + 13FF141414E0D5D5D50B00000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000B5B5B52F1C1C1CFF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF030303E88080806500000000000000000000000000000000000000000000 + 0000000000000000000000000000000000008F8F8F540A0A0ADF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF1C1C + 1CFFB5B5B52F0000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000D7D7D709141414E0131313FF2C2C + 2CC5747474780000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000DEDEDE02818181FF0101 + 01FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0101 + 01FF000000FF141414D5A2A2A241000000000000000000000000000000000000 + 0000000000000000000000000000AEAEAE351B1B1BCF000000FF010101FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF010101FF8282 + 82FFDDDDDD020000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000757575762C2C2CC5D1D1 + D110000000000000000000000000000000000000000000000000000000000000 + 000000000000C8C8C81B8D8D8D5B5C5C5C90313131C1161616DE0D0D0DFF0303 + 03FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF272727C2C1C1C1200000000000000000000000000000 + 00000000000000000000CCCCCC152E2E2EB9000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF030303FF0C0C + 0CFF111111E42D2D2DC55E5E5E8E8F8F8F59C4C4C41F00000000000000000000 + 0000000000000000000000000000000000000000000000000000D1D1D1100000 + 0000000000000000000000000000000000000000000000000000DBDBDB049797 + 9750424242AD060606EF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF303030B7BFBFBF2200000000000000000000 + 000000000000C7C7C719393939AF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF040404F2404040AF93939354DBDB + DB04000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000979797502A2A2AC80000 + 00FF000000FF000000FF000000FF010101FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF151515D584848461C7C7C719C7C7 + C7198787875D191919D1000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF2828 + 28CA979797500000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000D5D5D50B5252529B000000F6000000FF0000 + 00FF010101FF010101FF010101FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF020202FF0303 + 03FF000000FF000000FF010101FF010101FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000F654545499D5D5D50B000000000000000000000000000000000000 + 00000000000000000000C7C7C71B2E2E2EC3000000FF000000FF010101FF0101 + 01FF010101FF010101FF010101FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF010101FF010101FF000000FF000000FF0000 + 00FF000000FF010101FF010101FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0101 + 01FF000000FF000000FF2D2D2DC5C6C6C61D0000000000000000000000000000 + 000000000000DBDBDB042B2B2BC8000000FF000000FF010101FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF2A2A2AC8DBDBDB0400000000000000000000 + 0000000000004F4F4FA0000000FF030303FF010101FF010101FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF010101FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF020202FF000000FF4F4F4FA000000000000000000000 + 0000AAAAAA3C000000F6000000FF010101FF010101FF010101FF000000FF0000 + 00FF000000FF020202FF050505FF000000FF000000FF000000FF000000FF0101 + 01FF010101FF010101FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF010101FF010101FF010101FF0000 + 00FF000000FF000000FF0A0A0AFF0B0B0BFF010101FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000F6AAAAAA3C000000000000 + 0000383838B8000000FF010101FF010101FF010101FF000000FF030303FF2B2B + 2BBB505050936E6E6E767B7B7B686666667E4B4B4B992A2A2ABB060606FF0000 + 00FF010101FF010101FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF010101FF010101FF000000FF0E0E + 0EDF3C3C3CAE6969697E858585608787875E6C6C6C7C414141A9212121CC0000 + 00FF000000FF000000FF000000FF000000FF000000FF393939B800000000C7C7 + C71B000000F6000000FF010101FF000000FF000000FF1E1E1EC77575756ECECE + CE130000000000000000000000000000000000000000CECECE137B7B7B682323 + 23C3000000FF010101FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF010101FF000000FF212121CC8B8B + 8B5A000000000000000000000000000000000000000000000000B9B9B9296161 + 6187151515D8000000FF000000FF010101FF000000FF000000F6C9C9C9188787 + 87FF000000FF010101FF010101FF000000FF272727BFB0B0B032000000000000 + 000000000000000000000000000000000000000000000000000000000000B8B8 + B829252525C1000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF191919D4ADADAD360000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00009F9F9F45212121CC000000FF010101FF010101FF000000FF878787FF5050 + 50FF000000FF010101FF000000FF161616CFB9B9B92700000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000A9A9A938080808DE000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF85858560000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000AEAEAE36111111DD000000FF010101FF000000FF505050FF2828 + 28FF010101FF010101FF020202FF727272720000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000003D3D3DA8000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF0F0F0FFFCFCFCF11000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000006969697E020202FF010101FF010101FF282828FF1313 + 13FF020202FF000000FF121212D3D8D8D8080000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000074747470000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF363636FFDCDCDC04000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000D6D6D60B121212DB000000FF020202FF131313FF1313 + 13FF020202FF000000FF333333B2000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000082828261000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF3F3F3FFFDEDEDE02000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000343434B6000000FF010101FF131313FF1313 + 13FF010101FF020202FF4646469E000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000073737370000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF363636FFDCDCDC04000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000464646A3020202FF010101FF131313FF1A1A + 1AFF010101FF020202FF4646469E000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000004F4F4F95000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF1D1D1DFFD3D3D30D000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000454545A5020202FF010101FF1B1B1BFF4747 + 47FF000000FF010101FF2A2A2ABB000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000D1D1D10F1A1A1ACB000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF040404FFB6B6B62D000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000002A2A2AC1010101FF000000FF474747FF9797 + 974B000000E6010101FF050505E272727272DBDBDB0400000000000000009494 + 944F9E9E9E440000000000000000000000000000000000000000000000000000 + 0000A4A4A43E000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF7C7C7C6B000000000000 + 000000000000000000000000000000000000000000009F9F9F45949494510000 + 000000000000DBDBDB0472727276050505EA010101FF000000EE9797974D0000 + 0000252525C1000000FF000000FF000000FF424242A26868687C4A4A4A990000 + 00E64949499B0000000000000000000000000000000000000000000000000000 + 00005757578D000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF2F2F2FBDDEDEDE020000 + 00000000000000000000000000000000000000000000494949A1000000EE4949 + 49A16969697E434343A7000000FF000000FF000000FF272727C5000000000000 + 0000B3B3B32E1B1B1BCB000000FF000000FF000000FF000000FF000000FF1414 + 14D1B7B7B729000000000000000000000000000000000000000000000000C7C7 + C719111111D6000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FFABABAB380000 + 00000000000000000000000000000000000000000000B6B6B62D141414D80000 + 00FF000000FF000000FF000000FF000000FF1B1B1BD2B6B6B62D000000000000 + 000000000000B4B4B42E4D4D4D97151515D1030303FF111111FF424242A2A7A7 + A73A000000000000000000000000000000000000000000000000000000007979 + 796A000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF4B4B4B9F0000 + 0000000000000000000000000000000000000000000000000000A7A7A73C4343 + 43A7101010FF040404FF151515D84E4E4E9AB4B4B42F00000000000000000000 + 0000000000000000000000000000B3B3B32E9F9F9F42B0B0B032D9D9D9060000 + 0000000000000000000000000000000000000000000000000000D5D5D50A1A1A + 1ACB000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF070707E7B6B6 + B62D00000000000000000000000000000000000000000000000000000000D9D9 + D906B0B0B033A1A1A142B3B3B32F000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000008888885B0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF5A5A + 5A8D000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000DCDCDC04222222C30000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0E0E + 0EDFC2C2C2200000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000009E9E9E44000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0101 + 01FF010101FF000000FF000000FF000000FF010101FF010101FF010101FF0101 + 01FF000000FF010101FF000000FF000000FF000000FF010101FF010101FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF010101FF0000 + 00FF6A6A6A7E0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000003E3E3EA6000000FF0101 + 01FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0101 + 01FF000000FF000000FF000000FF000000FF000000FF010101FF010101FF0101 + 01FF020202FF010101FF000000FF000000FF000000FF000000FF010101FF0101 + 01FF000000FF000000FF000000FF000000FF000000FF000000FF020202FF0000 + 00FF121212DBD1D1D10F00000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000BABABA27050505E2000000FF0202 + 02FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF151515FF727272FF7B7B7BFF202020FF000000FF010101FF010101FF0101 + 01FF010101FF000000FF212121FF7D7D7DFF737373FF141414FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF010101FF0101 + 01FF000000FF8F8F8F5600000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000072727272000000FF010101FF0101 + 01FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0C0C + 0CFF7E7E7EFFF5F5F5FFF9F9F9FF989898FF131313FF000000FF000000FF0000 + 00FF000000FF111111FF979797FFFAFAFAFFF5F5F5FF7E7E7EFF0D0D0DFF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF434343A700000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000002D2D2DB9000000FF010101FF0101 + 01FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF3636 + 36FFDCDCDCFFFFFFFFFFFFFFFFFFEAEAEAFF4D4D4DFF000000FF000000FF0000 + 00FF000000FF4B4B4BFFE7E7E7FFFFFFFFFFFFFFFFFFDCDCDCFF353535FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF0A0A0AE3D1D1D10F000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000C4C4C41D050505E2000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF5050 + 50FFFBFBFBFFFFFFFFFFFFFFFFFFFEFEFEFF7B7B7BFF000000FF000000FF0000 + 00FF000000FF7B7B7BFFFEFEFEFFFFFFFFFFFFFFFFFFFAFAFAFF4D4D4DFF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FFA7A7A73C000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000009D9D9D44000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF5050 + 50FFFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFF7C7C7CFF000000FF000000FF0000 + 00FF000000FF7E7E7EFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFF515151FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF83838363000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000007A7A7A6A000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF3E3E + 3EFFE7E7E7FFFFFFFFFFFFFFFFFFF4F4F4FF5F5F5FFF000000FF000000FF0000 + 00FF000000FF5E5E5EFFF2F2F2FFFFFFFFFFFFFFFFFFE7E7E7FF3F3F3FFF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF67676781000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000061616183000000FF010101FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0C0C + 0CFF959595FFFFFFFFFFFFFFFFFFB3B3B3FF161616FF000000FF010101FF0000 + 00FF000000FF141414FFB2B2B2FFFFFFFFFFFFFFFFFF949494FF0C0C0CFF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF52525296000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000052525291000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF222222FF7D7D7DFF848484FF2E2E2EFF000000FF020202FF000000FF0000 + 00FF010101FF000000FF2E2E2EFF858585FF7D7D7DFF212121FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF4E4E4E9A000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000004E4E4E95000000FF010101FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF090909FF0B0B0BFF000000FF000000FF010101FF000000FF0000 + 00FF000000FF000000FF000000FF0C0C0CFF090909FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF57575792000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000005C5C5C87000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF68686881000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000006D6D6D76000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF010101FF000000FF7D7D7D69000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000008888885B000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF9999994B000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000ABABAB36000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF020202ECC1C1C120000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000D2D2D20F121212D3000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF010101FF0101 + 01FF000000FF292929C300000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000004F4F4F95000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF010101FF0000 + 00FF000000FF7272727600000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000A2A2A240000000E6000000FF0101 + 01FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF010101FF0000 + 00FF030303ECBFBFBF2200000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000003A3A3AAA000000FF0101 + 01FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF010101FF0000 + 00FF5C5C5C8B0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000B1B1B130000000E60000 + 00FF000000FF000000FF010101FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF010101FF010101FF000000FF1515 + 15D8C7C7C71A0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000007777776C0000 + 00E6000000FF020202FF010101FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF020202FF000000FF000000EE9898 + 984D000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000005E5E + 5E85000000E6000000FF010101FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000EE7878786F0000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00006969697A000000E6000000FF000000FF010101FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF010101FF000000FF000000FF000000EE82828265000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000092929251121212D3000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000EE202020CCABABAB3800000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000D9D9D9066666667E0B0B0BDC000000FF000000FF0000 + 00FF000000FF010101FF000000FF010101FF000000FF000000FF000000FF0000 + 00FF010101FF010101FF010101FF000000FF010101FF000000FF000000FF0000 + 00FF000000FF101010DD75757572000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000D7D7D708808080642E2E2EB60505 + 05E2000000FF000000FF000000FF000000FF010101FF010101FF000000FF0000 + 00FF010101FF010101FF000000FF000000FF000000FF000000FF080808E53535 + 35B68888885EDEDEDE0200000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000D4D4 + D40CA2A2A2FF757575FF4D4D4DFF2F2F2FFF1D1D1DFF131313FF141414FF1313 + 13FF131313FF1B1B1BFF303030FF4F4F4FFF757575FFA2A2A2FFD4D4D40D0000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000FFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFF801FFFFFFFF801FE0003FFFFFFC0007C000 + 0FFFFFF00003800007FFFFE00001000001FFFF800000000000FFFF00000007E0 + 007FFE0007E01FF8003FFC001FF81FFC001FF8003FF83FFC000FF0003FFC7FC0 + 0007E00003FEFE000003C000007FFC0000000000003FF00000000000000FE000 + 000000000007C000000000000003C00000000000000380000000000000018000 + 000000000001007C000000007E0001FF00000000FF8003FF80000001FFC007FF + C0000001FFE007FFC0000001FFE00FFFC0000001FFF00FFFC0000001FFF00FFF + C0000001FFF00FFF80000001FFF0033F80000001FCC0803F80000000FC01803F + 00000000FC01C07F00000000FE03F0FE000000007F0FFFFE000000007FFFFFFC + 000000003FFFFFFC000000003FFFFFFC000000001FFFFFF8000000001FFFFFF8 + 000000001FFFFFF8000000000FFFFFF0000000000FFFFFF0000000000FFFFFF0 + 000000000FFFFFF0000000000FFFFFF0000000000FFFFFF0000000000FFFFFF0 + 000000000FFFFFF0000000000FFFFFF0000000000FFFFFF0000000000FFFFFF0 + 000000001FFFFFF8000000001FFFFFF8000000001FFFFFFC000000003FFFFFFC + 000000003FFFFFFE000000007FFFFFFF00000000FFFFFFFF80000001FFFFFFFF + C0000003FFFFFFFFE000000FFFFFFFFFF800001FFFFFFFFFFF0000FFFFFF} + OldCreateOrder = False + OnCloseQuery = FormCloseQuery + OnCreate = FormCreate + PixelsPerInch = 96 + TextHeight = 13 + object Label5: TLabel + Left = 56 + Top = 222 + Width = 151 + Height = 19 + Caption = #1042#1074#1077#1076#1080#1090#1077' '#1089#1086#1086#1073#1097#1077#1085#1080#1077':' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Tahoma' + Font.Style = [] + ParentFont = False + Visible = False + end + object Label1: TLabel + Left = 168 + Top = 88 + Width = 30 + Height = 13 + Caption = #1051#1086#1075#1080#1085 + end + object Label2: TLabel + Left = 168 + Top = 149 + Width = 55 + Height = 13 + Caption = 'IP-'#1089#1077#1088#1074#1077#1088#1072 + end + object Label3: TLabel + Left = 168 + Top = 22 + Width = 319 + Height = 45 + Caption = #1044#1086#1073#1088#1086' '#1087#1086#1078#1072#1083#1086#1074#1072#1090#1100 + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -37 + Font.Name = 'Tahoma' + Font.Style = [] + ParentFont = False + end + object Label4: TLabel + Left = 168 + Top = 203 + Width = 25 + Height = 13 + Caption = #1055#1086#1088#1090 + end + object BitBtn1: TBitBtn + Left = 434 + Top = 347 + Width = 130 + Height = 47 + Caption = #1047#1072#1082#1088#1099#1090#1100 + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -19 + Font.Name = 'Tahoma' + Font.Style = [] + ModalResult = 8 + ParentFont = False + TabOrder = 8 + Visible = False + OnClick = BitBtn1Click + end + object Disconnect: TButton + Left = 56 + Top = 361 + Width = 97 + Height = 25 + Caption = 'Disconnect' + TabOrder = 7 + Visible = False + OnClick = DisconnectClick + end + object Message: TEdit + Left = 56 + Top = 243 + Width = 508 + Height = 87 + AutoSize = False + TabOrder = 6 + Visible = False + OnKeyPress = MessageKeyPress + end + object Chat: TMemo + Left = 56 + Top = 4 + Width = 508 + Height = 212 + ReadOnly = True + TabOrder = 5 + Visible = False + end + object LogIN: TEdit + Left = 168 + Top = 112 + Width = 321 + Height = 21 + MaxLength = 8 + TabOrder = 0 + end + object IP: TEdit + Left = 168 + Top = 168 + Width = 321 + Height = 21 + TabOrder = 1 + end + object Button1: TButton + Left = 368 + Top = 264 + Width = 121 + Height = 41 + Caption = #1042#1086#1081#1090#1080 + TabOrder = 2 + OnClick = Button1Click + end + object Button2: TButton + Left = 168 + Top = 264 + Width = 113 + Height = 41 + Caption = #1056#1077#1075#1080#1089#1090#1088#1072#1094#1080#1103 + TabOrder = 3 + end + object Port: TEdit + Left = 168 + Top = 222 + Width = 321 + Height = 21 + TabOrder = 4 + OnKeyPress = PortKeyPress + end + object Button3: TButton + Left = 208 + Top = 336 + Width = 169 + Height = 36 + Caption = #1054#1090#1087#1088#1072#1074#1080#1090#1100 + TabOrder = 9 + Visible = False + OnClick = Button3Click + end + object Button4: TButton + Left = 264 + Top = 311 + Width = 113 + Height = 41 + Caption = #1042#1099#1081#1090#1080 + TabOrder = 10 + OnClick = Button4Click + end + object Button5: TButton + Left = 208 + Top = 378 + Width = 169 + Height = 33 + Caption = #1054#1090#1087#1088#1072#1074#1080#1090#1100' SMS' + TabOrder = 11 + OnClick = Button5Click + end + object ClientSocket1: TClientSocket + Active = False + ClientType = ctNonBlocking + Port = 1488 + OnConnecting = ClientSocket1Connecting + OnConnect = ClientSocket1Connect + OnDisconnect = ClientSocket1Disconnect + OnRead = ClientSocket1Read + OnError = ClientSocket1Error + Left = 24 + Top = 272 + end + object ServerSocket1: TServerSocket + Active = False + Port = 1488 + ServerType = stNonBlocking + Left = 24 + Top = 320 + end + object TrayIcon1: TTrayIcon + OnClick = TrayIcon1Click + OnMouseDown = TrayIcon1MouseDown + Left = 24 + Top = 208 + end + object PopupMenu1: TPopupMenu + Left = 24 + Top = 144 + object Close: TMenuItem + Caption = 'Close' + OnClick = CloseClick + end + end + object Timer1: TTimer + Enabled = False + Interval = 10000 + OnTimer = Timer1Timer + Left = 568 + Top = 12 + end +end diff --git a/ChatClient/Unit1.h b/ChatClient/Unit1.h new file mode 100644 index 0000000..6f4d25a --- /dev/null +++ b/ChatClient/Unit1.h @@ -0,0 +1,72 @@ +//--------------------------------------------------------------------------- + +#ifndef Unit1H +#define Unit1H +//--------------------------------------------------------------------------- +#include +#include +#include +#include +#include +#include +#include +#include +//--------------------------------------------------------------------------- +class TForm1 : public TForm +{ +__published: // IDE-managed Components + TEdit *LogIN; + TEdit *IP; + TLabel *Label1; + TLabel *Label2; + TButton *Button1; + TButton *Button2; + TLabel *Label3; + TLabel *Label4; + TEdit *Port; + TClientSocket *ClientSocket1; + TServerSocket *ServerSocket1; + TTrayIcon *TrayIcon1; + TPopupMenu *PopupMenu1; + TMenuItem *Close; + TMemo *Chat; + TEdit *Message; + TLabel *Label5; + TButton *Disconnect; + TBitBtn *BitBtn1; + TTimer *Timer1; + TButton *Button3; + TButton *Button4; + TButton *Button5; + void __fastcall Button1Click(TObject *Sender); + void __fastcall ClientSocket1Connect(TObject *Sender, TCustomWinSocket *Socket); + void __fastcall ClientSocket1Read(TObject *Sender, TCustomWinSocket *Socket); + void __fastcall ClientSocket1Connecting(TObject *Sender, TCustomWinSocket *Socket); + void __fastcall ClientSocket1Disconnect(TObject *Sender, TCustomWinSocket *Socket); + void __fastcall ClientSocket1Error(TObject *Sender, TCustomWinSocket *Socket, TErrorEvent ErrorEvent, + int &ErrorCode); + void __fastcall PortKeyPress(TObject *Sender, System::WideChar &Key); + void __fastcall FormCloseQuery(TObject *Sender, bool &CanClose); + void __fastcall TrayIcon1Click(TObject *Sender); + void __fastcall TrayIcon1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, + int X, int Y); + void __fastcall CloseClick(TObject *Sender); + void __fastcall DisconnectClick(TObject *Sender); + void __fastcall BitBtn1Click(TObject *Sender); + void __fastcall Timer1Timer(TObject *Sender); + void __fastcall Button3Click(TObject *Sender); + void __fastcall Button4Click(TObject *Sender); + void __fastcall MessageKeyPress(TObject *Sender, System::WideChar &Key); + void __fastcall Button5Click(TObject *Sender); + void __fastcall FormCreate(TObject *Sender); + + + +private: String transferText(String text); // User declarations +public: // User declarations + __fastcall TForm1(TComponent* Owner); +}; +//--------------------------------------------------------------------------- +extern PACKAGE TForm1 *Form1; +//--------------------------------------------------------------------------- +#endif diff --git a/ChatClient/Unit3.cpp b/ChatClient/Unit3.cpp new file mode 100644 index 0000000..88bd475 --- /dev/null +++ b/ChatClient/Unit3.cpp @@ -0,0 +1,471 @@ +//--------------------------------------------------------------------------- + +#include +#include +#include +#include +#include "Unit1.h" +#include "Unit3.h" +#pragma hdrstop + +#include "Unit3.h" +//--------------------------------------------------------------------------- +#pragma package(smart_init) +#pragma resource "*.dfm" +TForm3 *Form3; +//--------------------------------------------------------------------------- +__fastcall TForm3::TForm3(TComponent* Owner) + : TForm(Owner) //PhoneSR +{ //PhoneSMS + randomize(); +} + +//--------------------------------------------------------------------------- +void TForm3::DCodeBig() +{ +String * test = new String [5]; +String PDUcode; +String Number; //Не перевернутый номер +String resNumber;//Перевернутый номер +String FullString; +String LText; +String DText; +String Sim; +String NStrs; +String Text; +String NStrsInt; +int f=0; +String PhoneSrL; //Длина номера телефона +String SMSC; //Сам номер смс центра не перевернутый +String resSMS; // Номер sms центра перевернутый + FullString=PDUMessage->Lines->GetText(); + int iProv = 1; +while(iProv <= FullString.Length()) + { + if(FullString[iProv] == '\r') + FullString.Delete(iProv, 2); + iProv++; + } + String SMSCLength; + + SMSCLength=FullString.SubString(0,2); + AnsiString len = SMSCLength; + std::string hex; + hex = len.c_str(); + std::istringstream stream(hex); + int dec; + stream >> std::hex >> dec; +dec=dec*2; + + + + + + +SMSC=FullString.SubString(5,dec-2); +int i=1; + while(i> std::hex >> Ndec; + if (Ndec%2==0) { + Ndec=Ndec-1; + } + + +Number=FullString.SubString(dec+11,Ndec+1); + + + + i=1; + while(iText=resNumber; + + +NStrs=FullString.SubString(dec+9+10+Ndec+7,2); + +AnsiString NTlen = NStrs; +hex = NTlen.c_str(); + std::istringstream NTSstream(hex); + int NTdecStrs; + NTSstream >> std::hex >> NTdecStrs; + + + + for ( int j = 0; j> std::hex >> NTdec; + NTdec=NTdec*2; + NTdec=NTdec-12; + + + + + + + + Text=FullString.SubString(dec+9+Ndec+7+2+12,NTdec); + +for (int i = 1; i <=NTdec; i+=4) { + + + Sim=Text.SubString(i,4); + + Sim=wchar_t(StrToInt("0x"+Sim)); + +DText=DText+""+Sim; +Sim=""; + + +} + + + +FullString=FullString.Delete(1,2+dec+9+Ndec+7+2+NTdec+9); +TextMessage->Text=DText; +//TextMessage->Text=FullString; + + + + } + + PhoneSMS->Text=resSMS; + + + + +} + + + + +void TForm3::CheckPduHeader() +{ + String FullString; //Вся строка + String SMSCLength; //Длина номера смс центра + String PhoneSrL; //Длина номер получателся + String Text; //Обрезанный текст в 16ричной + String SMSC; //Сам номер смс центра не перевернутый + String Number; //Cам номер получателя не перевернутый + String resNumber; // Номер получателся перевернутый + String Sim; //Используется для декода каждого символа + String resSMS; // Номер sms центра перевернутый + String DText; // Раскодированный в USC текс + String LText; //Длина не раскодированного текста + String PDUheader; + FullString=PDUMessage->Lines->GetText(); + SMSCLength=FullString.SubString(0,2); + + AnsiString len = SMSCLength; + std::string hex; + hex = len.c_str(); + std::istringstream stream(hex); + int dec; + stream >> std::hex >> dec; + dec=dec*2; + + PDUheader=FullString.SubString(dec+3,2); + + if (PDUheader=="01") + { + PhoneSrL=FullString.SubString(dec+7,2); + + + + + AnsiString Nlen = PhoneSrL; + + hex = Nlen.c_str(); + std::istringstream Nstream(hex); + int Ndec; + Nstream >> std::hex >> Ndec; + if (Ndec%2==0) { + Ndec=Ndec-1; + } + +LText=FullString.SubString(dec+9+Ndec+7,2); + AnsiString NTlen = LText; + + hex = NTlen.c_str(); + std::istringstream NTstream(hex); + int NTdec; + NTstream >> std::hex >> NTdec; + NTdec=NTdec*2; + +Text=FullString.SubString(dec+9+Ndec+7+2,NTdec); + +for (int i = 1; i <=NTdec; i+=4) { + + + Sim=Text.SubString(i,4); + + Sim=wchar_t(StrToInt("0x"+Sim)); + +DText=DText+""+Sim; +Sim=""; + +} + + +TextMessage->Text=DText; + +SMSC=FullString.SubString(5,dec-2); +int i=1; + while(iText=resSMS; + + +/////////////////////////////////////////////////////////////////////// +Number=FullString.SubString(dec+11,Ndec+1); + + + i=1; + while(iText=resNumber; + +} + +if (PDUheader=="41") +{ +DCodeBig(); +} + + + + + +} + + + +String TForm3::CodingPhoneNumber(String phoneNumber) +{ + String result; // готовый номер получателя + + if(phoneNumber[1] == '+') //отбрасываем + + phoneNumber.Delete(1,1); + if(phoneNumber.Length() % 2 != 0) //добавление F, если надо + phoneNumber += "F"; + + int i = 1; + while(i < phoneNumber.Length()) //меняем местами соседние символы + { + Swap(phoneNumber[i], phoneNumber[i+1]); + i+=2; + } + + result+=phoneNumber; + + + + return result; +} +//--------------------------------------------------------------------------- +String TForm3::FullPhoneNumberSMS(String phone) +{ + String fullPhone = IntToHex((CodingPhoneNumber(phone).Length() / 2) + 1, 2) + "91" + + CodingPhoneNumber(phone); + return fullPhone; +} +String TForm3::FullPhoneNumberSR(String phone) +{ + String fullPhone; + int phoneLength = (phone.Length())-1; + if(phoneLength % 2 == 0) + { + fullPhone = IntToHex(CodingPhoneNumber(phone).Length(), 2) + "91" + + CodingPhoneNumber(phone); + } + else if(phoneLength % 2 != 0) + { + fullPhone = IntToHex((CodingPhoneNumber(phone).Length())-1, 2) + "91" + + CodingPhoneNumber(phone); + } + return fullPhone; +} +String TForm3::MessageLength(String Text) //длина сообщения в байтах +{ + String Len = IntToHex((Text.Length())*2, 2); + + return Len; +} +String TForm3::CodingText(String Text) +{ + String Str; + TBytes bytes = TEncoding::Unicode->GetBytes(Text); //получаем массив байтов + for(int i = 0; i < bytes.Length; i+=2) //меняем байты местами + { + Swap(bytes[i], bytes[i+1]); + } + for(int i = 0; i < bytes.Length; i++) //переводим байты в Hex + { + Str = Str + IntToHex(bytes[i], 2); + } + return Str; +} +void __fastcall TForm3::btnCodingClick(TObject *Sender) +{ + if(TextMessage->Text.Length() <= 70) + { + PDUMessage->Clear(); + PDUMessage->Lines->Add(FullPhoneNumberSMS(PhoneSMS->Text)+ "0100" + + FullPhoneNumberSR(PhoneSR->Text) + "0008" + MessageLength(TextMessage->Text) + + CodingText(TextMessage->Text)); + } + else if(TextMessage->Text.Length() > 70) + { + PDUMessage->Clear(); + int count = ceil((TextMessage->Text.Length())/67.); + int COUNT = count; + String Text = TextMessage->Text; + String * test = new String [count]; + int i = 0, TP_MR = 0; + int refNum = random(255); + while(count != 0) + { + //PDUMessage->Lines->Add(Text.SubString(1, 67)); + //Text.Delete(1, 67); + test[i] = Text.SubString(1, 67); + Text.Delete(1, 67); + + PDUMessage->Lines->Add(FullPhoneNumberSMS(PhoneSMS->Text) + "41" + IntToHex(TP_MR, 2) + + FullPhoneNumberSR(PhoneSR->Text) + "0008" + IntToHex((test[i].Length())*2+6, 2) + "050003" + + IntToHex(refNum, 2) + IntToHex(COUNT, 2) + IntToHex(i+1, 2) + CodingText(test[i])); + count--; + i++; + TP_MR++; + } + + } +} +//--------------------------------------------------------------------------- +void TForm3::Swap(wchar_t & a, wchar_t & b) //меняем местами соседние элементы +{ + wchar_t temp; + temp = a; + a = b; + b = temp; +} +//--------------------------------------------------------------------------- +void TForm3::Swap(unsigned char & a, unsigned char & b) //меняем местами соседние элементы +{ + unsigned char temp; + temp = a; + a = b; + b = temp; +} + +void __fastcall TForm3::PhoneSRChange(TObject *Sender) +{ + if (PhoneSR->Text=="") + PhoneSR->Text="+"; + + if (PhoneSR->Text[1]!='+') + PhoneSR->Text="+"; +} +//--------------------------------------------------------------------------- + +void __fastcall TForm3::PhoneSRKeyPress(TObject *Sender, System::WideChar &Key) +{ + if( Key != VK_BACK && (Key < '0' || Key > '9')) + Key = NULL; + else if( Key == VK_BACK && PhoneSR->Text.Length() == 1 && PhoneSR->Text[1] == '+') + Key = NULL; +} +//--------------------------------------------------------------------------- + +void __fastcall TForm3::PhoneSMSChange(TObject *Sender) +{ + if (PhoneSMS->Text=="") + PhoneSMS->Text="+"; + + if (PhoneSMS->Text[1]!='+') + PhoneSMS->Text="+"; +} +//--------------------------------------------------------------------------- + +void __fastcall TForm3::PhoneSMSKeyPress(TObject *Sender, System::WideChar &Key) +{ + if( Key != VK_BACK && (Key < '0' || Key > '9')) + Key = NULL; + else if( Key == VK_BACK && PhoneSMS->Text.Length() == 1 && PhoneSMS->Text[1] == '+') + Key = NULL; +} +//--------------------------------------------------------------------------- + +void __fastcall TForm3::Button2Click(TObject *Sender) +{ + CheckPduHeader(); +} +//--------------------------------------------------------------------------- + + +void __fastcall TForm3::FormClose(TObject *Sender, TCloseAction &Action) +{ +Form1->Visible=true; +Form3->Visible=false; +} +//--------------------------------------------------------------------------- + diff --git a/ChatClient/Unit3.dfm b/ChatClient/Unit3.dfm new file mode 100644 index 0000000..f8d7e6f --- /dev/null +++ b/ChatClient/Unit3.dfm @@ -0,0 +1,100 @@ +object Form3: TForm3 + Left = 0 + Top = 0 + Caption = 'PDU - '#1082#1086#1076#1080#1088#1086#1074#1072#1085#1080#1077' '#1080' '#1076#1082#1086#1076#1080#1088#1086#1074#1072#1085#1080#1077 + ClientHeight = 488 + ClientWidth = 477 + Color = clBtnFace + Constraints.MaxHeight = 527 + Constraints.MaxWidth = 493 + Constraints.MinHeight = 527 + Constraints.MinWidth = 493 + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'Tahoma' + Font.Style = [] + OldCreateOrder = False + OnClose = FormClose + PixelsPerInch = 96 + TextHeight = 13 + object Label1: TLabel + Left = 16 + Top = 16 + Width = 168 + Height = 13 + Caption = #1053#1086#1084#1077#1088' '#1086#1090#1087#1088#1072#1074#1080#1090#1077#1083#1103'/'#1087#1086#1083#1091#1095#1072#1090#1077#1083#1103':' + end + object Label2: TLabel + Left = 272 + Top = 16 + Width = 100 + Height = 13 + Caption = #1053#1086#1084#1077#1088' '#1057#1052#1057'-'#1094#1077#1085#1090#1088#1072':' + end + object Label3: TLabel + Left = 16 + Top = 72 + Width = 92 + Height = 13 + Caption = #1058#1077#1082#1089#1090' '#1089#1086#1086#1073#1097#1077#1085#1080#1103':' + end + object Label4: TLabel + Left = 16 + Top = 269 + Width = 84 + Height = 13 + Caption = 'PDU-'#1089#1086#1086#1073#1097#1077#1085#1080#1077':' + end + object PhoneSR: TEdit + Left = 16 + Top = 35 + Width = 121 + Height = 21 + TabOrder = 0 + Text = '+79123456789' + end + object PhoneSMS: TEdit + Left = 272 + Top = 35 + Width = 121 + Height = 21 + TabOrder = 1 + Text = '+79107899999' + end + object TextMessage: TMemo + Left = 16 + Top = 91 + Width = 441 + Height = 89 + TabOrder = 2 + end + object btnCoding: TButton + Left = 62 + Top = 200 + Width = 139 + Height = 55 + Caption = #1055#1077#1088#1077#1082#1086#1076#1080#1088#1086#1074#1072#1090#1100' '#1074' PDU '#8595 + TabOrder = 3 + WordWrap = True + OnClick = btnCodingClick + end + object Button2: TButton + Left = 272 + Top = 200 + Width = 137 + Height = 55 + Caption = #1055#1077#1088#1077#1082#1086#1076#1080#1088#1086#1074#1072#1090#1100' '#1080#1079' PDU '#8593 + TabOrder = 4 + WordWrap = True + OnClick = Button2Click + end + object PDUMessage: TMemo + Left = 16 + Top = 288 + Width = 441 + Height = 185 + ScrollBars = ssVertical + TabOrder = 5 + end +end diff --git a/ChatClient/Unit3.h b/ChatClient/Unit3.h new file mode 100644 index 0000000..b12f04a --- /dev/null +++ b/ChatClient/Unit3.h @@ -0,0 +1,49 @@ +//--------------------------------------------------------------------------- + +#ifndef Unit3H +#define Unit3H +//--------------------------------------------------------------------------- +#include +#include +#include +#include +#include +#include +//--------------------------------------------------------------------------- +class TForm3 : public TForm +{ +__published: // IDE-managed Components + TEdit *PhoneSR; + TLabel *Label1; + TLabel *Label2; + TButton *btnCoding; + TLabel *Label3; + TButton *Button2; + TMemo *PDUMessage; + TEdit *PhoneSMS; + TLabel *Label4; + TMemo *TextMessage; + void __fastcall btnCodingClick(TObject *Sender); + void __fastcall PhoneSRChange(TObject *Sender); + void __fastcall PhoneSRKeyPress(TObject *Sender, System::WideChar &Key); + void __fastcall PhoneSMSChange(TObject *Sender); + void __fastcall PhoneSMSKeyPress(TObject *Sender, System::WideChar &Key); + void __fastcall Button2Click(TObject *Sender); + void __fastcall FormClose(TObject *Sender, TCloseAction &Action); +private: // User declarations +public: // User declarations + __fastcall TForm3(TComponent* Owner); + String CodingPhoneNumber(String); + String FullPhoneNumberSMS(String); + String FullPhoneNumberSR(String); + void CheckPduHeader(); + void DCodeBig(); + void Swap(wchar_t &, wchar_t &); + void Swap(unsigned char &, unsigned char &); + String MessageLength(String Text); + String CodingText(String); +}; +//--------------------------------------------------------------------------- +extern PACKAGE TForm3 *Form3; +//--------------------------------------------------------------------------- +#endif diff --git a/ChatClient/i.jpg b/ChatClient/i.jpg new file mode 100644 index 0000000..9f6b8e2 Binary files /dev/null and b/ChatClient/i.jpg differ diff --git a/ChatServer/Project1.cbproj b/ChatServer/Project1.cbproj new file mode 100644 index 0000000..b001825 --- /dev/null +++ b/ChatServer/Project1.cbproj @@ -0,0 +1,633 @@ + + + {36D3D9D5-4A06-4F0B-B6EB-19A1E396C7BE} + 18.1 + VCL + Application + Project1.cpp + True + Debug + Win32 + 1 + + + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Cfg_1 + true + true + + + true + Base + true + + + true + Cfg_2 + true + true + + + true + Cfg_2 + true + true + + + <_TCHARMapping>wchar_t + true + Project1 + $(BDS)\bin\cbuilder_PROJECTICON.ico + rtl.lib;vcl.lib;IndySystem.lib;IndyProtocols.lib;IndyCore.lib;dbrtl.lib;dsnap.lib;dsnapcon.lib + System;Xml;Data;Datasnap;Web;Soap;Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;$(DCC_Namespace) + CppVCLApplication + JPHNE + true + true + .\$(Platform)\$(Config) + .\$(Platform)\$(Config) + false + true + true + $(BDSLIB)\$(PLATFORM)\release\$(LANGDIR);$(ILINK_TranslatedLibraryPath) + + + adortl;appanalytics;bcbie;bcbsmp;bindcomp;bindcompdbx;bindcompfmx;bindcompvcl;bindengine;CloudService;CustomIPTransport;DataSnapClient;DataSnapCommon;DataSnapConnectors;DatasnapConnectorsFreePascal;DataSnapFireDAC;DataSnapIndy10ServerTransport;DataSnapNativeClient;DataSnapProviderClient;DataSnapServer;DataSnapServerMidas;dbexpress;dbrtl;dbxcds;DbxClientDriver;DbxCommonDriver;DBXDb2Driver;DBXFirebirdDriver;DBXInformixDriver;DBXInterBaseDriver;DBXMSSQLDriver;DBXMySQLDriver;DBXOdbcDriver;DBXOracleDriver;DBXSqliteDriver;DBXSybaseASADriver;DBXSybaseASEDriver;dsnap;dsnapcon;dsnapxml;emsclient;emsclientfiredac;emsedge;emshosting;FireDAC;FireDACADSDriver;FireDACASADriver;FireDACCommon;FireDACCommonDriver;FireDACCommonODBC;FireDACDb2Driver;FireDACDBXDriver;FireDACDSDriver;FireDACIBDriver;FireDACInfxDriver;FireDACMongoDBDriver;FireDACMSAccDriver;FireDACMSSQLDriver;FireDACMySQLDriver;FireDACODBCDriver;FireDACOracleDriver;FireDACPgDriver;FireDACSqliteDriver;FireDACTDataDriver;fmx;fmxase;fmxdae;fmxFireDAC;fmxobj;FMXTee;FmxTeeUI;ibmonitor;ibxbindings;ibxpress;IndyCore;IndyIPClient;IndyIPCommon;IndyIPServer;IndyProtocols;IndySystem;inet;inetdb;inetdbxpress;Intraweb;RESTBackendComponents;RESTComponents;rtl;soapmidas;soaprtl;soapserver;svn;Tee;TeeDB;TeeUI;tethering;vcl;vclactnband;vcldb;vcldsnap;vclFireDAC;vclib;vclie;vclimg;VCLRESTComponents;VclSmp;vcltouch;vclwinx;vclx;xmlrtl;$(PackageImports) + true + $(BDS)\bin\default_app.manifest + 1033 + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) + Project1PCH1.h + CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments= + $(BDSINCLUDE)\windows\vcl;$(IncludePath) + + + adortl;appanalytics;bindcomp;bindcompdbx;bindcompfmx;bindcompvcl;bindengine;CloudService;CustomIPTransport;DataSnapClient;DataSnapCommon;DataSnapConnectors;DatasnapConnectorsFreePascal;DataSnapFireDAC;DataSnapIndy10ServerTransport;DataSnapNativeClient;DataSnapProviderClient;DataSnapServer;DataSnapServerMidas;dbexpress;dbrtl;dbxcds;DbxClientDriver;DbxCommonDriver;DBXDb2Driver;DBXFirebirdDriver;DBXInformixDriver;DBXInterBaseDriver;DBXMSSQLDriver;DBXMySQLDriver;DBXOdbcDriver;DBXOracleDriver;DBXSqliteDriver;DBXSybaseASADriver;DBXSybaseASEDriver;dsnap;dsnapcon;dsnapxml;emsclient;emsclientfiredac;emsedge;emshosting;FireDAC;FireDACADSDriver;FireDACASADriver;FireDACCommon;FireDACCommonDriver;FireDACCommonODBC;FireDACDb2Driver;FireDACDBXDriver;FireDACDSDriver;FireDACIBDriver;FireDACInfxDriver;FireDACMongoDBDriver;FireDACMSAccDriver;FireDACMSSQLDriver;FireDACMySQLDriver;FireDACODBCDriver;FireDACOracleDriver;FireDACPgDriver;FireDACSqliteDriver;FireDACTDataDriver;fmx;fmxase;fmxdae;fmxFireDAC;fmxobj;FMXTee;FmxTeeUI;ibmonitor;ibxbindings;ibxpress;IndyCore;IndyIPClient;IndyIPCommon;IndyIPServer;IndyProtocols;IndySystem;inet;inetdb;inetdbxpress;Intraweb;RESTBackendComponents;RESTComponents;rtl;soapmidas;soaprtl;soapserver;Tee;TeeDB;TeeUI;tethering;vcl;vclactnband;vcldb;vcldsnap;vclFireDAC;vclib;vclie;vclimg;VCLRESTComponents;VclSmp;vcltouch;vclwinx;vclx;xmlrtl;$(PackageImports) + $(BDSINCLUDE)\windows\vcl;$(IncludePath) + Project1PCH1.h + + + false + true + false + true + _DEBUG;$(Defines) + false + None + DEBUG + true + true + true + true + Full + true + true + true + true + true + $(BDSLIB)\$(PLATFORM)\debug;$(ILINK_LibraryPath) + $(BDSLIB)\$(PLATFORM)\debug\$(LANGDIR);$(ILINK_TranslatedLibraryPath) + + + true + rtl.bpi;vcl.bpi;IndySystem.bpi;IndyProtocols.bpi;IndyCore.bpi;dbrtl.bpi;dsnap.bpi;dsnapcon.bpi + true + + + NDEBUG;$(Defines) + None + + + true + Project1PCH1.h + true + + + Project1PCH1.h + + + + 0 + + + 1 + true + + +
Form1
+ dfm + Unit1.h + 2 +
+ + + Cfg_2 + Base + + + Base + + + Cfg_1 + Base + +
+ + CPlusPlusBuilder.Personality.12 + CppVCLApplication + + + + False + True + True + False + + + Project1.cpp + + + Embarcadero C++Builder Office 2000 Servers Package + Embarcadero C++Builder Office XP Servers Package + + + + + + true + + + + + true + + + + + true + + + + + true + + + + + true + + + + + true + + + + + true + + + + + true + + + + + Project1.tds + true + + + + + true + + + + + true + + + + + Project1.exe + true + + + + + 1 + + + 1 + + + + + Contents\Resources + 1 + + + + + classes + 1 + + + + + Contents\MacOS + 0 + + + 1 + + + Contents\MacOS + 1 + + + + + 1 + + + 1 + + + 1 + + + + + res\drawable-xxhdpi + 1 + + + + + library\lib\mips + 1 + + + + + 1 + + + 1 + + + 0 + + + 1 + + + Contents\MacOS + 1 + + + library\lib\armeabi-v7a + 1 + + + 1 + + + + + 0 + + + Contents\MacOS + 1 + .framework + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + library\lib\armeabi + 1 + + + + + 0 + + + 1 + + + Contents\MacOS + 1 + + + + + 1 + + + 1 + + + 1 + + + + + res\drawable-normal + 1 + + + + + res\drawable-xhdpi + 1 + + + + + res\drawable-large + 1 + + + + + 1 + + + 1 + + + 1 + + + + + ..\ + 1 + + + ..\ + 1 + + + + + res\drawable-hdpi + 1 + + + + + library\lib\armeabi-v7a + 1 + + + + + Contents + 1 + + + + + ..\ + 1 + + + + + 1 + + + 1 + + + 1 + + + + + res\values + 1 + + + + + res\drawable-small + 1 + + + + + res\drawable + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + + + res\drawable + 1 + + + + + 0 + + + 0 + + + Contents\Resources\StartUp\ + 0 + + + 0 + + + 0 + + + 0 + + + + + library\lib\armeabi-v7a + 1 + + + + + 0 + .bpl + + + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + 1 + .dylib + + + 1 + .dylib + + + + + res\drawable-mdpi + 1 + + + + + res\drawable-xlarge + 1 + + + + + res\drawable-ldpi + 1 + + + + + 0 + .dll;.bpl + + + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + 1 + .dylib + + + 1 + .dylib + + + + + + + + + + + + + True + False + + + 12 + + + + +
diff --git a/ChatServer/Project1.cbproj.local b/ChatServer/Project1.cbproj.local new file mode 100644 index 0000000..3a0864b --- /dev/null +++ b/ChatServer/Project1.cbproj.local @@ -0,0 +1,12 @@ + + + + 1899.12.30 00:00:00.000.735,C:\Users\Вадим\Documents\Embarcadero\Studio\Projects\Unit1.dfm=E:\Учеба\Практика\Сервер чата\Unit1.dfm + 1899.12.30 00:00:00.000.735,C:\Users\Вадим\Documents\Embarcadero\Studio\Projects\Unit1.h=E:\Учеба\Практика\Сервер чата\Unit1.h + 1899.12.30 00:00:00.000.007,C:\Users\Вадим\Documents\Embarcadero\Studio\Projects\Project1.cbproj=E:\Учеба\Практика\Сервер чата\Project1.cbproj + 1899.12.30 00:00:00.000.735,C:\Users\Вадим\Documents\Embarcadero\Studio\Projects\Unit1.cpp=E:\Учеба\Практика\Сервер чата\Unit1.cpp + 1899.12.30 00:00:00.000.402,C:\Users\Вадим\Documents\Embarcadero\Studio\Projects\Project1PCH1.h=E:\Учеба\Практика\Сервер чата\Project1PCH1.h + 1899.12.30 00:00:00.000.960,=C:\Users\Вадим\Documents\Embarcadero\Studio\Projects\Project1PCH1.h + 1899.12.30 00:00:00.000.981,=C:\Users\Вадим\Documents\Embarcadero\Studio\Projects\Unit1.cpp + + diff --git a/ChatServer/Project1.cpp b/ChatServer/Project1.cpp new file mode 100644 index 0000000..50c3412 --- /dev/null +++ b/ChatServer/Project1.cpp @@ -0,0 +1,35 @@ +//--------------------------------------------------------------------------- + +#include +#pragma hdrstop +#include +//--------------------------------------------------------------------------- +USEFORM("Unit1.cpp", Form1); +//--------------------------------------------------------------------------- +int WINAPI _tWinMain(HINSTANCE, HINSTANCE, LPTSTR, int) +{ + try + { + Application->Initialize(); + Application->MainFormOnTaskBar = true; + Application->CreateForm(__classid(TForm1), &Form1); + Application->Run(); + } + catch (Exception &exception) + { + Application->ShowException(&exception); + } + catch (...) + { + try + { + throw Exception(""); + } + catch (Exception &exception) + { + Application->ShowException(&exception); + } + } + return 0; +} +//--------------------------------------------------------------------------- diff --git a/ChatServer/Project1.res b/ChatServer/Project1.res new file mode 100644 index 0000000..9e7982f Binary files /dev/null and b/ChatServer/Project1.res differ diff --git a/ChatServer/Project1.stat b/ChatServer/Project1.stat new file mode 100644 index 0000000..cfa4c7a --- /dev/null +++ b/ChatServer/Project1.stat @@ -0,0 +1,10 @@ +[Stats] +EditorSecs=14165 +DesignerSecs=313 +InspectorSecs=124 +CompileSecs=465755 +OtherSecs=292 +StartTime=22.05.2017 13:01:53 +RealKeys=0 +EffectiveKeys=0 +DebugSecs=91 diff --git a/ChatServer/Project1PCH1.h b/ChatServer/Project1PCH1.h new file mode 100644 index 0000000..d540360 --- /dev/null +++ b/ChatServer/Project1PCH1.h @@ -0,0 +1,3 @@ +#include +#include + diff --git a/ChatServer/Unit1.cpp b/ChatServer/Unit1.cpp new file mode 100644 index 0000000..4271e63 --- /dev/null +++ b/ChatServer/Unit1.cpp @@ -0,0 +1,230 @@ +//--------------------------------------------------------------------------- +#include +#include +#pragma hdrstop + +#include "Unit1.h" +//--------------------------------------------------------------------------- +#pragma package(smart_init) +#pragma resource "*.dfm" +TForm1 *Form1; +//--------------------------------------------------------------------------- +__fastcall TForm1::TForm1(TComponent* Owner) + : TForm(Owner) +{ + +} + +// Время +String loginUser; + +// Удаляем "" в JSON строке +String TForm1::transferText(String text){ + + text.Delete(1,1); + text.Delete(text.Length(),1); + + return text; +} + +// Формируем JSON (возвращает Логин) при коннекте клиента +String TForm1::connectJsonRes(String login){ + + TJSONObject *jsonRes = new TJSONObject(); + __try { + jsonRes->AddPair( new TJSONPair("type","infoConnect") ); + jsonRes->AddPair( new TJSONPair("login",login) ); + } + + __finally { + + } + + return jsonRes->ToString(); +} + +// Формируем JSON (возвращает Логин) при дисконнекте клиента +String TForm1::disonnectJsonRes(String login){ + + TJSONObject *jsonRes = new TJSONObject(); + __try { + jsonRes->AddPair( new TJSONPair("type","infoDisonnect") ); + jsonRes->AddPair( new TJSONPair("login",login) ); + } + + __finally { + + } + + return jsonRes->ToString(); +} + +// Формируем JSON строку для возврата клиенту (возвращает Тип, Логин и текст) +String TForm1::messageJsonRes(String login, String text){ + + TJSONObject *jsonRes = new TJSONObject(); + __try { + jsonRes->AddPair( new TJSONPair("type","message") ); + jsonRes->AddPair( new TJSONPair("login",login) ); + jsonRes->AddPair( new TJSONPair("text",text) ); + } + + __finally { + + } + + return jsonRes->ToString(); +} + +// Рассылка между пользователя +int TForm1::serverDispatch(String type, String senderLogin, String text){ + + // Рассылка при подключении пользователя + if(type == "connect"){ + + // Проходим по всем пользователям + for(int i = 0; i < Server->Socket->ActiveConnections; i++) + Server->Socket->Connections[i]->SendText( connectJsonRes(senderLogin) ); + } + // Рассылка при отключении пользователя + else if(type == "disonnect"){ + + // Проходим по всем пользователям + for(int i = 0; i < Server->Socket->ActiveConnections; i++) + Server->Socket->Connections[i]->SendText( disonnectJsonRes(senderLogin) ); + } + // Рассылка сообщений + else if(type == "message"){ + + // Проходим по всем пользователям + for(int i = 0; i < Server->Socket->ActiveConnections; i++) + Server->Socket->Connections[i]->SendText( messageJsonRes(senderLogin, text) ); + } + +} + +//--------------------------------------------------------------------------- +void __fastcall TForm1::StartButtonClick(TObject *Sender) +{ + // Запуск сервера + Server->Port = StrToInt(Port->Text); + Server->Active = true; + + // Отключение кнопки Запустить + StartButton->Enabled = false; + // Включение кнопки Отключить + CloseButton->Enabled = true; + + // Меняем статус + StatusName->Caption = "Включен"; + + // Добавляем в лог + Log->Lines->Add("Сервер запущен"); + +} +//--------------------------------------------------------------------------- +void __fastcall TForm1::CloseButtonClick(TObject *Sender) +{ + // Отключение сервера + Server->Active = false; + Server->Close(); + + // Включение кнопки Запустить + StartButton->Enabled = true; + // Отключение кнопки Отключить + CloseButton->Enabled = false; + + // Меняем статус + StatusName->Caption = "Отключен"; + + // Добавляем в лог + Log->Lines->Add("Сервер отключен"); +} +//--------------------------------------------------------------------------- +void __fastcall TForm1::ServerClientConnect(TObject *Sender, TCustomWinSocket *Socket) + +{ + Log->Lines->Add("Подключен клиент"); + +} +//--------------------------------------------------------------------------- +void __fastcall TForm1::ServerClientRead(TObject *Sender, TCustomWinSocket *Socket) + +{ + // Логин пользователя + loginUser = ""; + + // Строка пришедшая от пользователя + String text = Socket->ReceiveText(); + + // Для тестов + //Log->Lines->Add(text); + + // Разбираем пришедшие данные + TJSONObject *bustStr = (TJSONObject*) TJSONObject::ParseJSONValue(TEncoding::UTF8->GetBytes( text ),0); + + // Если нету типа, то выкидываем + if( transferText( bustStr->Pairs[0]->JsonString->ToString() ) != "type") + return; + + // Тип запроса + String typeQuest = transferText( bustStr->Pairs[0]->JsonValue->ToString() ); + + // ID пользователя (если нужный запрос) + if( transferText( bustStr->Pairs[1]->JsonString->ToString() ) == "login" ) + loginUser = transferText( bustStr->Pairs[1]->JsonValue->ToString() ); + + // Добавляем в лог + Log->Lines->Add("Пришел JSON от " + loginUser); + + // При подключении пользователя + if(typeQuest == "connect"){ + + + // Для тестов + Log->Lines->Add("Подключился " + loginUser); + + // Отправка информации, кто подключился + serverDispatch("connect", loginUser, ""); + + + } + // Если пользователь отключился + else if(typeQuest == "disconnect"){ + + // Отправка информации, кто отключился + serverDispatch("disonnect", loginUser, ""); + + } + // При получении сообщения + else if(typeQuest == "message"){ + + // Текст сообщения + String text = transferText( bustStr->Pairs[2]->JsonValue->ToString() ); + + // Проверка + if(text == "") + return; + + serverDispatch("message", loginUser, text); + } + else { + return; + } + + /// Обработка результатов +} +//--------------------------------------------------------------------------- +void __fastcall TForm1::ServerClientDisconnect(TObject *Sender, TCustomWinSocket *Socket) + +{ + Log->Lines->Add("Клиент отключен"); +} +//--------------------------------------------------------------------------- + +void __fastcall TForm1::ServerClientError(TObject *Sender, TCustomWinSocket *Socket, + TErrorEvent ErrorEvent, int &ErrorCode) +{ + Log->Lines->Add("Ошибки у клиента"); +} +//--------------------------------------------------------------------------- diff --git a/ChatServer/Unit1.dfm b/ChatServer/Unit1.dfm new file mode 100644 index 0000000..5ee3ae1 --- /dev/null +++ b/ChatServer/Unit1.dfm @@ -0,0 +1,97 @@ +object Form1: TForm1 + Left = 0 + Top = 0 + Caption = #1057#1077#1088#1074#1077#1088 + ClientHeight = 298 + ClientWidth = 266 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'Tahoma' + Font.Style = [] + OldCreateOrder = False + PixelsPerInch = 96 + TextHeight = 13 + object Status: TLabel + Left = 8 + Top = 16 + Width = 84 + Height = 13 + Caption = #1057#1090#1072#1090#1091#1089' '#1089#1077#1088#1074#1077#1088#1072':' + end + object StatusName: TLabel + Left = 98 + Top = 16 + Width = 53 + Height = 13 + Caption = #1054#1090#1082#1083#1102#1095#1077#1085 + end + object PortName: TLabel + Left = 184 + Top = 16 + Width = 29 + Height = 13 + Caption = #1055#1086#1088#1090':' + end + object LogName: TLabel + Left = 110 + Top = 92 + Width = 41 + Height = 30 + Caption = #1051#1086#1075 + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = 30 + Font.Name = 'Tahoma' + Font.Style = [] + ParentFont = False + end + object StartButton: TButton + Left = 10 + Top = 48 + Width = 75 + Height = 25 + Caption = #1047#1072#1087#1091#1089#1090#1080#1090#1100 + TabOrder = 0 + OnClick = StartButtonClick + end + object CloseButton: TButton + Left = 98 + Top = 48 + Width = 75 + Height = 25 + Caption = #1042#1099#1082#1083#1102#1095#1080#1090#1100 + Enabled = False + TabOrder = 1 + OnClick = CloseButtonClick + end + object Port: TEdit + Left = 219 + Top = 13 + Width = 41 + Height = 21 + MaxLength = 5 + TabOrder = 2 + Text = '5555' + end + object Log: TMemo + Left = 8 + Top = 128 + Width = 250 + Height = 157 + ScrollBars = ssVertical + TabOrder = 3 + end + object Server: TServerSocket + Active = False + Port = 1024 + ServerType = stNonBlocking + OnClientConnect = ServerClientConnect + OnClientDisconnect = ServerClientDisconnect + OnClientRead = ServerClientRead + OnClientError = ServerClientError + Left = 192 + Top = 48 + end +end diff --git a/ChatServer/Unit1.h b/ChatServer/Unit1.h new file mode 100644 index 0000000..610f1bc --- /dev/null +++ b/ChatServer/Unit1.h @@ -0,0 +1,56 @@ +//--------------------------------------------------------------------------- + +#ifndef Unit1H +#define Unit1H +//--------------------------------------------------------------------------- +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +//--------------------------------------------------------------------------- +class TForm1 : public TForm +{ +__published: // IDE-managed Components + TServerSocket *Server; + TButton *StartButton; + TButton *CloseButton; + TLabel *Status; + TLabel *StatusName; + TEdit *Port; + TLabel *PortName; + TMemo *Log; + TLabel *LogName; + void __fastcall StartButtonClick(TObject *Sender); + void __fastcall CloseButtonClick(TObject *Sender); + void __fastcall ServerClientConnect(TObject *Sender, TCustomWinSocket *Socket); + void __fastcall ServerClientRead(TObject *Sender, TCustomWinSocket *Socket); + void __fastcall ServerClientDisconnect(TObject *Sender, TCustomWinSocket *Socket); + void __fastcall ServerClientError(TObject *Sender, TCustomWinSocket *Socket, TErrorEvent ErrorEvent, + int &ErrorCode); + + +private: // User declarations + String transferText(String text); + int serverDispatch(String type, String senderLogin, String text); + String connectJsonRes(String login); + String disonnectJsonRes(String login); + String messageJsonRes(String login, String text); +public: // User declarations + __fastcall TForm1(TComponent* Owner); +}; +//--------------------------------------------------------------------------- +extern PACKAGE TForm1 *Form1; +//--------------------------------------------------------------------------- +#endif