Anton Sviridov wrote:

> 1) What's the meainng of SendBinString in Server, it is never used?

It's never used.

> What for do you use PutDataInSendBuffer? 

It puts data into the send buffer without actually sending the data,
it's not required, however saves on internal call to socket.send.  

2) I see alot of code to
> implement a data buffer which imho does the same things that socket
> buffer do. 

It's similar, however needs less data copies, IMO. 

> Isn't it necessary to construct such sophisticated logic
> every time when data parsing is needed? Moreover (maybe I haven't
> detected) what do you do, if FRcvBuf is going to be filled? That is, 
> 
> FRcvBuf: [_] [_] [_] [_] [D] [D] [D]
>                          |
> [_] - already parsed data
> [D] - data to be parsed
>> - current pointer
> 
> and there are some more bytes to be received, but buffer is over...
> I've found only one Move(), but it's located inside if FReceiveMode =
> rmLine section, but no copying is done when mode is binary.

In mode rmBinary OnBinaryReceived will trigger. Data move is left
to the component user. 

> 
> 3)  if FReceiveMode = rmLine then
>    begin
>      ...
>    end;
> 
>    if FReceiveMode <> rmBinary then
>        Exit;
> 
> strange construction, concerning that FReceiveMode could be only
> rmLine or rmBinary... maybe if..else ? 

It is because after TriggerLineReceived the receive mode may have 
changed to rmBinary and I did not want to call ParseReceiveBuffer
recursively after TriggerLineReceived, it could be optimized though.
 
> 
> 4)  while (Length(RcvdLine) > 0) and
>              (RcvdLine[Length(RcvdLine)] in [#13, #10]) do
>            RcvdLine := Copy(RcvdLine, 1, Length(RcvdLine) - 1);
> 
>    while (Length(RcvdLine) > 0) and
>              (RcvdLine[Length(RcvdLine)] in [#13, #10]) do
>            SetLength(RcvdLine, Length(RcvdLine) - 1); ?
> 

This code is from the (very old) TcpSrv demo which I did not
changed. 

BTW: I uploaded the BinCliDemo to the SVN repository last week with
a small fix in:

function FindCrLf(Buf: PAnsiChar; Count: Integer): Integer;
begin
    for Result := 0 to Count - 1 do
    begin
        if (Buf[Result] = #13) and (Result + 1 < Count) and
           (Buf[Result + 1] = #10) then
            Exit;
    end;
    Result := -1;
end; 

--
Arno Garrels [TeamICS]
http://www.overbyte.be/eng/overbyte/teamics.html
  

> --
> Best regards, Anton
-- 
To unsubscribe or change your settings for TWSocket mailing list
please goto http://lists.elists.org/cgi-bin/mailman/listinfo/twsocket
Visit our website at http://www.overbyte.be

Reply via email to