Einzelnen Beitrag anzeigen

Kostas

Registriert seit: 14. Mai 2003
Ort: Gerstrhofen
1.058 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: TidBytes in ein File schreiben

  Alt 25. Sep 2018, 20:57
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
  Mit Zitat antworten Zitat