| (* |
| * 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, |
| Thrift.Console; |
| |
| 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. |