> 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