| (* |
| * 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. |