>    NBuffer:= NBuffer + NSocket.ReceiveStr;

It is better to avoid ReceiveStr for performance reason.
ReceiveStr use long strings which are slow and conduce to memory fragmentation.
You'd better declare NBuffer as a PChar and use ReallocMem to allocate larger 
buffer when needed. It
is better to expand the buffer so that it's size if - for example - always a 
multiple of 4KB. That's
much better for the memory allocator.

--
[EMAIL PROTECTED]
http://www.overbyte.be

----- Original Message ----- 
From: "brian" <[EMAIL PROTECTED]>
To: "ICS support mailing" <twsocket@elists.org>
Sent: Tuesday, August 16, 2005 1:47 AM
Subject: Re: [twsocket] Twsocketserver


> 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

-- 
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

Reply via email to