An example on how I do it:
procedure TUser.SocketDataAvailable(Sender: TObject; Error: Word);
Var a: Integer;
abc,d: string;
begin
if ToRcv = 0 then // NEW PACKET INCLUDING HEADER
begin
NBuffer:= NBuffer + NSocket.ReceiveStr;
AnalyzePacket;
end
else
begin
if NSocket.RcvdCount < ToRcv then Exit; // THERES MORE DATA TO RECEIVE TO
COMPLETE PACKET
NBuffer:= NBuffer + NSocket.ReceiveStr;
abc:= funcs.Decr(Copy(NBuffer,1,PacketLnght),EncodePswd,True); //
dismiss, just decription of data
Delete(NBuffer,1,PacketLnght); // KEEP NEW PACKET DATA ON THE BUFFER IF
ANY
NewCommand(abc); // PROCESS A FULL RECEIVED PACKET
ToRcv:= 0;
AnalyzePacket; // CHECK IF REAMINING DATA ON THE BUFFER CONTAINS HEADER
FOR NEXT PACKET
end;
end;
Procedure TUser.AnalyzePacket;
Var a: Integer;
abc: String;
Label 1;
begin
1:
if NBuffer = '' then Exit;
a:= Pos(#0,NBuffer); // #0 = END OF PACKET HEADER
if (a < 1) or (a = length(NBuffer)) then Exit; // NO DATA AFTER THE HEADER
PacketLnght:= StrToInt(copy(NBuffer,1,a-1)); // PACKET LENGHT IN STRING
FORM (/blush, old code :p)
Delete(NBuffer,1,a); // DELETE HEADER
ToRcv:= PacketLnght - length(NBuffer); // SIZE OF REAMAINING DATA TO
COMPLETE PACKET
if ToRcv < 1 then // IF PACKET IS FULL PROCEED TO DECODE DATA AND PROCESS A
NEW COMMAND
begin
abc:= funcs.Decr(Copy(NBuffer,1,PacketLnght),EncodePswd,True);
Delete(NBuffer,1,PacketLnght);
NewCommand(abc);
end;
if ToRcv < 0 then goto 1;
end;
procedure TUser.SendCommand(Cmd: byte; params: string);
var q,r: string;
begin
q:= Funcs.Encr(chr(Cmd)+Params,EncodePswd,True);
r:= IntToStr(length(q))+#0;
NSocket.SendStr(r+q);
end;
--
To unsubscribe or change your settings for TWSocket mailing list
please goto http://www.elists.org/mailman/listinfo/twsocket
Visit our website at http://www.overbyte.be