restemplate/indy/Protocols/IdSystatServer.pas

122 lines
2.5 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.7 12/2/2004 4:23:58 PM JPMugaas
Adjusted for changes in Core.
Rev 1.6 10/26/2004 10:49:20 PM JPMugaas
Updated ref.
Rev 1.5 2004.02.03 5:44:30 PM czhower
Name changes
Rev 1.4 1/21/2004 4:04:04 PM JPMugaas
InitComponent
Rev 1.3 2/24/2003 10:29:50 PM JPMugaas
Rev 1.2 1/17/2003 07:10:58 PM JPMugaas
Now compiles under new framework.
Rev 1.1 1/8/2003 05:53:54 PM JPMugaas
Switched stuff to IdContext.
Rev 1.0 11/13/2002 08:02:28 AM JPMugaas
}
unit IdSystatServer;
{
Indy Systat Client TIdSystatServer
Copyright (C) 2002 Winshoes Working Group
Original author J. Peter Mugaas
2002-August-13
Based on RFC 866
Note that this protocol is officially called Active User
}
interface
{$i IdCompilerDefines.inc}
uses
Classes,
IdAssignedNumbers,
IdContext,
IdCustomTCPServer;
type
TIdSystatEvent = procedure (AThread: TIdContext; AResults : TStrings) of object;
Type
TIdSystatServer = class(TIdCustomTCPServer)
protected
FOnSystat : TIdSystatEvent;
//
function DoExecute(AThread: TIdContext): boolean; override;
procedure InitComponent; override;
published
property OnSystat : TIdSystatEvent read FOnSystat write FOnSystat;
property DefaultPort default IdPORT_SYSTAT;
end;
{
Note that no result parsing is done because RFC 866 does not specify a syntax for
a user list.
Quoted from RFC 866:
There is no specific syntax for the user list. It is recommended
that it be limited to the ASCII printing characters, space, carriage
return, and line feed. Each user should be listed on a separate
line.
}
implementation
uses
IdGlobal, SysUtils;
{ TIdSystatServer }
procedure TIdSystatServer.InitComponent;
begin
inherited;
DefaultPort := IdPORT_SYSTAT;
end;
function TIdSystatServer.DoExecute(AThread: TIdContext): boolean;
var
s : TStrings;
begin
Result := True;
if Assigned(FOnSystat) then
begin
s := TStringList.Create;
try
FOnSystat(AThread,s);
AThread.Connection.IOHandler.Write(s);
finally
FreeAndNil(s);
end;
end;
AThread.Connection.Disconnect;
end;
end.