grendel-1.0.0a7/backup/
grendel-1.0.0a7/bin/
grendel-1.0.0a7/boards/
grendel-1.0.0a7/clans/
grendel-1.0.0a7/documentation/todo/
grendel-1.0.0a7/help/
grendel-1.0.0a7/logs/
grendel-1.0.0a7/players/
grendel-1.0.0a7/progs/
grendel-1.0.0a7/races/
grendel-1.0.0a7/src/contrib/
grendel-1.0.0a7/src/modules/speller/
grendel-1.0.0a7/src/modules/status/
grendel-1.0.0a7/src/tests/
grendel-1.0.0a7/src/tests/dunit/
{ 
	Summary:
		Webservice interface
		
	## $Id: GrendelWebServiceIntf.pas,v 1.2 2004/04/12 21:09:05 druid Exp $
}

unit GrendelWebServiceIntf;

interface

uses 
	SysUtils,
	InvokeRegistry, 
	Types, 
	Classes;

type
	TStringArray = array of string;

	IGrendelWebService = interface(IInvokable)
	['{C8B5F909-183B-4D12-9DE3-1BB4F1AD64E9}']
		function isOnline(const sessionHandle : string) : boolean; stdcall;
		function getConsoleHistory(const sessionHandle : string; var timestamp : integer) : TStringArray; stdcall;
	end;

	TGrendelWebService = class(TInvokableClass, IGrendelWebService)
	private

	public
		function isOnline(const sessionHandle : string) : boolean; stdcall;
		function getConsoleHistory(const sessionHandle : string; var timestamp : integer) : TStringArray; stdcall;
	end;

implementation

uses
	DateUtils,
	soapauth,
	mudsystem, race, dtypes, console, server;
	

type
	GConsoleStringListWriter = class(GConsoleWriter)
	public
		procedure write(timestamp : integer; const text : string; debugLevel : integer = 0); override;
	end;

	
var
	consoleList : TStringList;
	consoleStringListWriter : GConsoleStringListWriter;
	
	
procedure GConsoleStringListWriter.write(timestamp : integer; const text : string; debugLevel : integer = 0);
begin
	consoleList.add('[' + FormatDateTime('hh:nn:ss', UnixToDateTime(timestamp)) + '] ' + text);
end;


procedure TGrendelDataModuleCreateInstance(out obj: TObject);
begin
	obj := TGrendelWebService.Create();
end;

function TGrendelWebService.isOnline(const sessionHandle : string) : boolean; stdcall;
begin
	checkSession(sessionHandle);
	
	Result := serverBooted;
end;

function TGrendelWebService.getConsoleHistory(const sessionHandle : string; var timestamp : integer) : TStringArray; stdcall;
var
	console : GConsole;
	strings : TStringArray;
	idx : integer;
begin
	checkSession(sessionHandle);

	try
		console := GConsole.Create();
		
		timestamp := console.fetchHistoryTimestamp(consoleStringListWriter, timestamp);
		
		SetLength(strings, consoleList.Count);
		
		for idx := 0 to consoleList.Count - 1 do	
			strings[idx] := consoleList[idx];
			
		Result := strings;
		
		consoleList.Clear();
	finally
		console.Free();
	end;
end;

initialization
	InvRegistry.RegisterInvokableClass(TGrendelWebService);
	InvRegistry.RegisterInterface(TypeInfo(IGrendelWebService));

	consoleList := TStringList.Create();
	consoleStringListWriter := GConsoleStringListWriter.Create();

finalization
	consoleList.Free();
	consoleStringListWriter.Free();

end.