Система обміну зашифрованими текстовими повідомленнями (програма чат на С++ Builder)
85

Лістинг “UnitSave.cpp”

 

#include <vcl.h>

#pragma hdrstop

 

#include "UnitSave.h"

#include "UnitChat.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TSaveF *SaveF;

TMemoryStream *MSCl = new TMemoryStream ; // создаем поток под принимаемый файл

void Write( AnsiString Text );          // ф-я записи получаемой информации в поток

int Size ;                              // размер передаваемого файла

bool Receive ;                          // передаем ли мы на данный момент файл

AnsiString FileName ;

String Name;

 

//---------------------------------------------------------------------------

__fastcall TSaveF::TSaveF(TComponent* Owner)

: TForm(Owner)

{

}

void Write( AnsiString Text )

{

if(MSCl->Size < Size)  // если мы еще принимаем файл и размер потока меньше размера файла

{

MSCl->Write( Text.c_str() , Text.Length() );         // записываем в поток

SaveF->Memo1->Lines->Add( "Принимаем данные..." ); // пишем лог

}

if(MSCl->Size == Size) // если файл принят и размер потока соответствует размеру файла

{

Receive = false ;                         // останавливаем режим передачи

MSCl->Position = 0 ;                        // переводим каретку потока в начало

SaveF->Client->Socket->SendText( "end" ); // пишем серверу, что мы приняли файл

CreateDir( "Downloads" );                 // создаем папку для сохраненных файлов

MSCl->SaveToFile( "Downloads\\"+FileName ); // сохраняем туда наш файл

MSCl->Clear() ;                             // освобождаем поток

Size = 0 ;

SaveF->Memo1->Lines->Add("Файл принят !"); // пишем в лог что файл принят

}

}

 

//---------------------------------------------------------------------------

 

void __fastcall TSaveF::ClientRead(TObject *Sender,