restemplate/indy/Protocols/IdEcho.pas

129 lines
3.1 KiB
Plaintext

{
$Project$
$Workfile$
$Revision$
$DateUTC$
$Id$
This file is part of the Indy (Internet Direct) project, and is offered
under the dual-licensing agreement described on the Indy website.
(http://www.indyproject.org/)
Copyright:
(c) 1993-2005, Chad Z. Hower and the Indy Pit Crew. All rights reserved.
}
{
$Log$
}
{
Rev 1.8 2004.02.03 5:45:06 PM czhower
Name changes
Rev 1.7 1/21/2004 3:27:46 PM JPMugaas
InitComponent
Rev 1.6 1/3/2004 12:59:52 PM JPMugaas
These should now compile with Kudzu's change in IdCoreGlobal.
Rev 1.5 2003.11.29 10:18:52 AM czhower
Updated for core change to InputBuffer.
Rev 1.4 3/6/2003 5:08:48 PM SGrobety
Updated the read buffer methodes to fit the new core (InputBuffer ->
InputBufferAsString + call to CheckForDataOnSource)
Rev 1.3 2/24/2003 08:41:28 PM JPMugaas
Should compile with new code.
Rev 1.2 12/8/2002 07:26:34 PM JPMugaas
Added published host and port properties.
Rev 1.1 12/6/2002 05:29:32 PM JPMugaas
Now decend from TIdTCPClientCustom instead of TIdTCPClient.
Rev 1.0 11/14/2002 02:19:24 PM JPMugaas
}
unit IdEcho;
{*******************************************************}
{ }
{ Indy Echo Client TIdEcho }
{ }
{ Copyright (C) 2000 Winshoes Working Group }
{ Original author J. Peter Mugaas }
{ 2000-April-24 }
{ }
{*******************************************************}
interface
{$i IdCompilerDefines.inc}
uses
IdGlobal,
IdAssignedNumbers,
IdTCPClient;
type
TIdEcho = class(TIdTCPClient)
protected
FEchoTime: UInt32;
procedure InitComponent; override;
public
{This sends Text to the peer and returns the reply from the peer}
function Echo(const AText: String): String;
{Time taken to send and receive data}
property EchoTime: UInt32 read FEchoTime;
published
property Port default IdPORT_ECHO;
end;
implementation
uses
{$IFDEF USE_VCL_POSIX}
{$IFDEF DARWIN}
Macapi.CoreServices,
{$ENDIF}
{$ENDIF}
IdComponent,
IdTCPConnection,
IdIOHandler;
{ TIdEcho }
procedure TIdEcho.InitComponent;
begin
inherited InitComponent;
Port := IdPORT_ECHO;
end;
function TIdEcho.Echo(const AText: String): String;
var
LEncoding: IIdTextEncoding;
LBuffer: TIdBytes;
LLen: Integer;
StartTime: TIdTicks;
begin
LEncoding := IndyTextEncoding(
{$IFDEF STRING_IS_UNICODE}
encUTF16LE
{$ELSE}
encOSDefault
{$ENDIF}
);
{Send time monitoring}
LBuffer := ToBytes(AText, LEncoding);
LLen := Length(LBuffer);
{Send time monitoring}
StartTime := Ticks64;
IOHandler.Write(LBuffer);
IOHandler.ReadBytes(LBuffer, LLen, False);
{This is just in case the TickCount rolled back to zero}
FEchoTime := GetElapsedTicks(StartTime);
Result := BytesToString(LBuffer, LEncoding);
end;
end.