nachdem ich mit den visuelle Komponenten von lNet soweit klar komme, stellt sich für mich nun ein Problem bei der Nutzung der "consolen-Komponenten".
Ausgangslage:
- nur TCP wird benötigt
es werden einzelne Byte bzw Bytefolgen gesendet
darauf hin erfolgt eine Antwort der Gegenseite
Der Connect zur Gegenseite funktioniert, das anschließende Senden auch.
Nach meiner Ansicht wäre dann nur noch ein CallAction innerhalb einer Schleife notwendig, von dem dann OnReceive automatisch aufgerufen wird.
Code: Alles auswählen
{ TSolConn }
TSolConn = class
private
SolCon: TLTcp;
procedure OnDs(aSocket: TLSocket);
procedure OnRe(aSocket: TLSocket);
procedure OnEr(const msg: String; aSocket: TLSocket);
public
constructor Create;
destructor Destroy; override;
end;
var
BLConn :TSolConn;
EmpfangBuffer : PByte;
OnReOk : Boolean;
implementation
{ TSolConn }
procedure TSolConn.OnDs(aSocket: TLSocket);
begin
end;
procedure TSolConn.OnRe(aSocket: TLSocket);
var
EmpfangString : AnsiString;
erg : Integer;
empfangbyte : Byte;
OnReEmpfangBuffer: PByte;
begin
OnReEmpfangBuffer:=AllocMem(120); //Speicher anfordern
erg:=SolCon.Get(OnReEmpfangBuffer^,120);
if erg > 0 then begin
Move(OnReEmpfangBuffer,EmpfangBuffer,erg);
OnReOk:=True;
end;
Dispose(OnReEmpfangBuffer); //Speicher wieder freigeben
end;
procedure TSolConn.OnEr(const msg: String; aSocket: TLSocket);
begin
end;
constructor TSolConn.Create;
begin
SolCon := TLTCP.Create(nil);
SolCon.OnError := @OnEr;
SolCon.OnReceive := @OnRe;
SolCon.OnDisconnect := @OnDs;
SolCon.Timeout := 100;
end;
destructor TSolConn.Destroy;
begin
SolCon.Free;
inherited Destroy;
end;
...
function TSolDat.GetFirmware: Single;
var
TCPSol : TSolConn;
sendbyte : Single;
EmpfangString : AnsiString;
FW : Single;
erg : Integer;
begin
erg:=0;
FW:=-1;
sendbyte:=C_FIRMWARE;
TCPSol:=TSolConn.Create;
if TCPSol.SolCon.Connect(IPAdresse,IPPort) then begin // if connect went ok
repeat
TCPSol.SolCon.CallAction; // wait for "OnConnect"
until TCPSol.SolCon.Connected;
end;
erg:=TCPSol.SolCon.Send(sendbyte,1);
repeat
TCPSol.SolCon.CallAction; // wait for "OnReceive"
until OnReOk;
FW_Version:=EmpfangBuffer[0];
Result:=FW_Version;
TCPSol.Free;
end;
Was mache ich falsch?