Hallo himitsu,
ich noch eine Frage in diesem Zusammenhang.
Ich habe einen TIdTCPServer. Sobald sich ein Client connected wird dem AContext.Data eine Object erzeugt und übergeben. Dieses Object hat einen Buffer vom Type TIdBytes.
Sobald der Event TCPServerExecute feuert, werden alle Bytes abgerufen und erst einmal in einen Buffer geschrieben. Es geht mir um das schreiben des Buffers.
Kann man das so machen oder gibt es einen besseren Weg? Es scheint soweit zu funktionieren.
TFahrzeug(AContext.Data).FReceiveBuffer := TFahrzeug(AContext.Data).FReceiveBuffer + LBuffer;
Delphi-Quellcode:
function ReceiveBuffer(AContext: TIdContext;
var ABuffer: TIdBytes)
: Boolean;
overload;
var
LSize: LongInt;
begin
Result := True;
try
LSize := AContext.Connection.IOHandler.ReadLongInt();
AContext.Connection.IOHandler.ReadBytes(ABuffer, LSize, False);
except
Result := False;
end;
end;
procedure Tdm1.IdTCPServer1Execute(AContext: TIdContext);
var
LBuffer: TIdBytes;
var Fahrzeug : TFahrzeug;
begin
with AContext.Connection.IOHandler
do
try
// ReadTimeout := 90000;
if not(ReceiveBuffer(AContext, LBuffer))
then
begin
TIdNotify.NotifyMethod(ShowCannotGetDataErrorMessage);
Exit;
end else
begin
try
Fahrzeug := TFahrzeug(AContext.Data);
except
TIdNotify.NotifyMethod(ShowCannotGetDataErrorMessage);
Fahrzeug :=
nil;
end;
if Assigned(Fahrzeug)
then
begin
TFahrzeug(AContext.Data).FReceiveBuffer := TFahrzeug(AContext.Data).FReceiveBuffer + LBuffer;
end;
end;
except
on E:
Exception do begin
WriteLn('
500-Unknown Internal Error');
WriteLn('
500 ' + StringReplace(E.
Message, EOL, '
', [rfReplaceAll]));
raise;
end;
end;
end;
Gruß Kostas