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
+
+
+
+ dfm
+ Unit1.h
+ 2
+
+
+
+ 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
+
+
+
+ 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