Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
sending stringlist as chunks
#3
(03-18-2018, 03:52 PM)kudzu Wrote: I'm quite sure an overload exists already for TStrings.

Indeed, there is. TIdIOHandler has two methods for sending a TStrings:
  • Write(TStrings)

    Code:
    procedure Write(AValue: TStrings; AWriteLinesCount: Boolean = False;  AByteEncoding: IIdTextEncoding = nil
      {$IFDEF STRING_IS_ANSI}; ASrcEncoding: IIdTextEncoding = nil{$ENDIF}); overload; virtual;

    If AWriteLinesCount=True, the TStrings.Count value will be sent first as a 32-bit integer in network byte order using TIdIOHandler.Write(Int32). Then the strings will be sent individually using TIdIOHandler.WriteLn().

    If the receiver is also using Indy, the strings can be read using TIdIOHandler.ReadStrings():

    Code:
    procedure ReadStrings(ADest: TStrings; AReadLinesCount: Integer = -1;
      AByteEncoding: IIdTextEncoding = nil
      {$IFDEF STRING_IS_ANSI}; ADestEncoding: IIdTextEncoding = nil{$ENDIF} );

    If AReadLinesCount=-1, the count will be read from the socket as a 32-bit integer in network byte order using TIdIOHandler.ReadInt32(). The specified number of strings will be read using TIdIOHandler.ReadLn().

  • WriteRFCStrings()

    Code:
    procedure WriteRFCStrings(AStrings: TStrings; AWriteTerminator: Boolean = True;
      AByteEncoding: IIdTextEncoding = nil
      {$IFDEF STRING_IS_ANSI}; ASrcEncoding: IIdTextEncoding = nil{$ENDIF});

    The strings will be sent individually using TIdIOHandler.WriteLnRFC() (which escapes a leading '.' character as '..'). Then, if AWriteTerminator=True, '.' will be sent using TIdIOHandler.WriteLn().

    If the receiver is also using Indy, the strings can be read using one of the TStrings overloaded versions of TIdIOHandler.Capture():

    Code:
    procedure Capture(ADest: TStrings; AByteEncoding: IIdTextEncoding = nil
      {$IFDEF STRING_IS_ANSI}; ADestEncoding: IIdTextEncoding = nil{$ENDIF}); overload; // .Net overload

    procedure Capture(ADest: TStrings; const ADelim: string;
      AUsesDotTransparency: Boolean = True; AByteEncoding: IIdTextEncoding = nil
      {$IFDEF STRING_IS_ANSI}; ADestEncoding: IIdTextEncoding = nil{$ENDIF}); overload;

    procedure Capture(ADest: TStrings; out VLineCount: Integer;
      const ADelim: string = '.'; AUsesDotTransparency: Boolean = True;
      AByteEncoding: IIdTextEncoding = nil
      {$IFDEF STRING_IS_ANSI}; ADestEncoding: IIdTextEncoding = nil{$ENDIF}); overload;

    The strings will be read from the socket using TIdIOHandler.ReadLn(), unescaping leading '..' to '.' if AUsesDotTransparency=True, until the specified ADelim string ('.' by default) is reached.
Reply


Messages In This Thread
sending stringlist as chunks - by Madammar - 03-18-2018, 11:11 AM
RE: sending stringlist as chunks - by kudzu - 03-18-2018, 03:52 PM
RE: sending stringlist as chunks - by rlebeau - 03-21-2018, 11:42 PM

Forum Jump:


Users browsing this thread: 1 Guest(s)