PDA

View Full Version : سوال: آپدیت کلاینت Datasnap ؟



hp1361
جمعه 07 تیر 1392, 15:47 عصر
با سلام

من درکتاب آموزشی Bob روش زیر رو برای آپدیت کلاینت دیدم. روشش بدین صورته که اگه نسخه جدیدی از کلاینت طراحی شده بود، فایل اجرایی به سمت کلاینت منتقل شده و با فایل اونجا جابجا میشه.

با کد زیر فایل اجرایی در قالب Filestream منتقل میشه


function TServerMethods1.ClientStream: TStream;
var
Update: string;
begin
Result := nil;
Update := '';
with TIniFile.Create('E:\MyDocuments\RAD Studio\Projects\ProjGrp2.0\Win32\Debug\AutomaticUp dates.ini') do
try
Update := ReadString('Client', 'Client.exe', '');
if (Update <> '') then
Result := TFileStream.Create(Update, fmOpenRead or fmShareDenyWrite);
finally
Free;
end;
end;


و با کد زیر در سمت کلاینت عملیات جایگزینی انجام میشه

procedure TForm_Update.Btn_OkClick(Sender: TObject);
const
iBuffSize = 32 * 1024;
var
Stream: TStream;
FileStream: TFileStream;
Buffer: PByte;
iReadCnt: Integer;
begin
DeleteFile(ParamStr(0) + '.old');
RenameFile(ParamStr(0), ParamStr(0) + '.old');
Screen.Cursor := crHourGlass;
try
sProgressBar1.Align := alClient;
sProgressBar1.Max :=DataSnapServer.ClientStreamSize;
Caption := 'درحال دانلود' + IntToStr(sProgressBar1.Max) + 'بایت ...';
sProgressBar1.Min := 0;
Stream := DataSnapServer.ClientStream;
Application.ProcessMessages;
FileStream := TFileStream.Create(ParamStr(0), fmCreate);
Stream.Position := 0;

try
GetMem(Buffer, iBuffSize);
try
repeat
iReadCnt := Stream.Read(Pointer(Buffer)^, iBuffSize);
sProgressBar1.Position := sProgressBar1.Position + iReadCnt;
if (iReadCnt > 0) then
FileStream.WriteBuffer(Pointer(Buffer)^, iReadCnt);
until (iReadCnt < iBuffSize);
finally
FreeMem(Buffer, iBuffSize);
end;
finally
Stream.Position := 0;
FreeAndNil(FileStream);
FreeAndNil(Stream);
end;
finally
Screen.Cursor := crDefault;
end;
ModalResult:=mrOk;
end;


حالا سوال من اینه که اگر فایل اجرایی 8 مگابایت باشه و پهنای باند ما 256 باشه آیا از این روش میشه برای آپدیت کردن استفاده کرد؟یا نه پهنای بیشتری میخواد؟یا نه اصلا روشش اصولی نیست؟

ممنون

BORHAN TEC
جمعه 07 تیر 1392, 16:10 عصر
اگه ارتباط پایدار باشه روش خوبیه و اگه ارتباط ناپایدار باشه این روش به تنهایی کامل نیست. و از روشهایی باید برای بالا بردن پایداری استفاده کرد. به نظرم بهتره که این تاپیک رو هم مطالعه کنید:
http://barnamenevis.org/showthread.php?399773