blob: 2208cd4ba6bef51f66c247258e57f684c920e689 [file] [log] [blame]
(*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*)
unit TestServerEvents;
interface
uses
SysUtils,
Thrift,
Thrift.Protocol,
Thrift.Transport,
Thrift.Server,
ConsoleHelper;
type
TRequestEventsImpl = class( TInterfacedObject, IRequestEvents)
protected
FStart : TDateTime;
// IRequestProcessingEvents
procedure PreRead;
procedure PostRead;
procedure PreWrite;
procedure PostWrite;
procedure OnewayComplete;
procedure UnhandledError( const e : Exception);
procedure CleanupContext;
public
constructor Create;
end;
TProcessorEventsImpl = class( TInterfacedObject, IProcessorEvents)
protected
FReqs : Integer;
// IProcessorEvents
procedure Processing( const transport : ITransport);
function CreateRequestContext( const aFunctionName : string) : IRequestEvents;
procedure CleanupContext;
public
constructor Create;
end;
TServerEventsImpl = class( TInterfacedObject, IServerEvents)
protected
// IServerEvents
procedure PreServe;
procedure PreAccept;
function CreateProcessingContext( const input, output : IProtocol) : IProcessorEvents;
end;
implementation
{ TServerEventsImpl }
procedure TServerEventsImpl.PreServe;
begin
Console.WriteLine('ServerEvents: Server starting to serve requests');
end;
procedure TServerEventsImpl.PreAccept;
begin
Console.WriteLine('ServerEvents: Server transport is ready to accept incoming calls');
end;
function TServerEventsImpl.CreateProcessingContext(const input, output: IProtocol): IProcessorEvents;
begin
result := TProcessorEventsImpl.Create;
end;
{ TProcessorEventsImpl }
constructor TProcessorEventsImpl.Create;
begin
inherited Create;
FReqs := 0;
Console.WriteLine('ProcessorEvents: Client connected, processing begins');
end;
procedure TProcessorEventsImpl.Processing(const transport: ITransport);
begin
Console.WriteLine('ProcessorEvents: Processing of incoming request begins');
end;
function TProcessorEventsImpl.CreateRequestContext( const aFunctionName: string): IRequestEvents;
begin
result := TRequestEventsImpl.Create;
Inc( FReqs);
end;
procedure TProcessorEventsImpl.CleanupContext;
begin
Console.WriteLine( 'ProcessorEvents: completed after handling '+IntToStr(FReqs)+' requests.');
end;
{ TRequestEventsImpl }
constructor TRequestEventsImpl.Create;
begin
inherited Create;
FStart := Now;
Console.WriteLine('RequestEvents: New request');
end;
procedure TRequestEventsImpl.PreRead;
begin
Console.WriteLine('RequestEvents: Reading request message ...');
end;
procedure TRequestEventsImpl.PostRead;
begin
Console.WriteLine('RequestEvents: Reading request message completed');
end;
procedure TRequestEventsImpl.PreWrite;
begin
Console.WriteLine('RequestEvents: Writing response message ...');
end;
procedure TRequestEventsImpl.PostWrite;
begin
Console.WriteLine('RequestEvents: Writing response message completed');
end;
procedure TRequestEventsImpl.OnewayComplete;
begin
Console.WriteLine('RequestEvents: Oneway message processed');
end;
procedure TRequestEventsImpl.UnhandledError(const e: Exception);
begin
Console.WriteLine('RequestEvents: Unhandled exception of type '+e.classname);
end;
procedure TRequestEventsImpl.CleanupContext;
var millis : Double;
begin
millis := (Now - FStart) * (24*60*60*1000);
Console.WriteLine( 'Request processing completed in '+IntToStr(Round(millis))+' ms');
end;
end.