]>
Commit | Line | Data |
---|---|---|
f67539c2 TL |
1 | (* |
2 | * Licensed to the Apache Software Foundation (ASF) under one | |
3 | * or more contributor license agreements. See the NOTICE file | |
4 | * distributed with this work for additional information | |
5 | * regarding copyright ownership. The ASF licenses this file | |
6 | * to you under the Apache License, Version 2.0 (the | |
7 | * "License"); you may not use this file except in compliance | |
8 | * with the License. You may obtain a copy of the License at | |
9 | * | |
10 | * http://www.apache.org/licenses/LICENSE-2.0 | |
11 | * | |
12 | * Unless required by applicable law or agreed to in writing, | |
13 | * software distributed under the License is distributed on an | |
14 | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | |
15 | * KIND, either express or implied. See the License for the | |
16 | * specific language governing permissions and limitations | |
17 | * under the License. | |
18 | *) | |
19 | ||
20 | unit TestServerEvents; | |
21 | ||
22 | interface | |
23 | ||
24 | uses | |
25 | SysUtils, | |
26 | Thrift, | |
27 | Thrift.Protocol, | |
28 | Thrift.Transport, | |
29 | Thrift.Server, | |
30 | ConsoleHelper; | |
31 | ||
32 | type | |
33 | TRequestEventsImpl = class( TInterfacedObject, IRequestEvents) | |
34 | protected | |
35 | FStart : TDateTime; | |
36 | // IRequestProcessingEvents | |
37 | procedure PreRead; | |
38 | procedure PostRead; | |
39 | procedure PreWrite; | |
40 | procedure PostWrite; | |
41 | procedure OnewayComplete; | |
42 | procedure UnhandledError( const e : Exception); | |
43 | procedure CleanupContext; | |
44 | public | |
45 | constructor Create; | |
46 | end; | |
47 | ||
48 | ||
49 | TProcessorEventsImpl = class( TInterfacedObject, IProcessorEvents) | |
50 | protected | |
51 | FReqs : Integer; | |
52 | // IProcessorEvents | |
53 | procedure Processing( const transport : ITransport); | |
54 | function CreateRequestContext( const aFunctionName : string) : IRequestEvents; | |
55 | procedure CleanupContext; | |
56 | public | |
57 | constructor Create; | |
58 | end; | |
59 | ||
60 | ||
61 | TServerEventsImpl = class( TInterfacedObject, IServerEvents) | |
62 | protected | |
63 | // IServerEvents | |
64 | procedure PreServe; | |
65 | procedure PreAccept; | |
66 | function CreateProcessingContext( const input, output : IProtocol) : IProcessorEvents; | |
67 | end; | |
68 | ||
69 | ||
70 | implementation | |
71 | ||
72 | { TServerEventsImpl } | |
73 | ||
74 | procedure TServerEventsImpl.PreServe; | |
75 | begin | |
76 | Console.WriteLine('ServerEvents: Server starting to serve requests'); | |
77 | end; | |
78 | ||
79 | ||
80 | procedure TServerEventsImpl.PreAccept; | |
81 | begin | |
82 | Console.WriteLine('ServerEvents: Server transport is ready to accept incoming calls'); | |
83 | end; | |
84 | ||
85 | ||
86 | function TServerEventsImpl.CreateProcessingContext(const input, output: IProtocol): IProcessorEvents; | |
87 | begin | |
88 | result := TProcessorEventsImpl.Create; | |
89 | end; | |
90 | ||
91 | ||
92 | { TProcessorEventsImpl } | |
93 | ||
94 | constructor TProcessorEventsImpl.Create; | |
95 | begin | |
96 | inherited Create; | |
97 | FReqs := 0; | |
98 | Console.WriteLine('ProcessorEvents: Client connected, processing begins'); | |
99 | end; | |
100 | ||
101 | procedure TProcessorEventsImpl.Processing(const transport: ITransport); | |
102 | begin | |
103 | Console.WriteLine('ProcessorEvents: Processing of incoming request begins'); | |
104 | end; | |
105 | ||
106 | ||
107 | function TProcessorEventsImpl.CreateRequestContext( const aFunctionName: string): IRequestEvents; | |
108 | begin | |
109 | result := TRequestEventsImpl.Create; | |
110 | Inc( FReqs); | |
111 | end; | |
112 | ||
113 | ||
114 | procedure TProcessorEventsImpl.CleanupContext; | |
115 | begin | |
116 | Console.WriteLine( 'ProcessorEvents: completed after handling '+IntToStr(FReqs)+' requests.'); | |
117 | end; | |
118 | ||
119 | ||
120 | { TRequestEventsImpl } | |
121 | ||
122 | ||
123 | constructor TRequestEventsImpl.Create; | |
124 | begin | |
125 | inherited Create; | |
126 | FStart := Now; | |
127 | Console.WriteLine('RequestEvents: New request'); | |
128 | end; | |
129 | ||
130 | ||
131 | procedure TRequestEventsImpl.PreRead; | |
132 | begin | |
133 | Console.WriteLine('RequestEvents: Reading request message ...'); | |
134 | end; | |
135 | ||
136 | ||
137 | procedure TRequestEventsImpl.PostRead; | |
138 | begin | |
139 | Console.WriteLine('RequestEvents: Reading request message completed'); | |
140 | end; | |
141 | ||
142 | procedure TRequestEventsImpl.PreWrite; | |
143 | begin | |
144 | Console.WriteLine('RequestEvents: Writing response message ...'); | |
145 | end; | |
146 | ||
147 | ||
148 | procedure TRequestEventsImpl.PostWrite; | |
149 | begin | |
150 | Console.WriteLine('RequestEvents: Writing response message completed'); | |
151 | end; | |
152 | ||
153 | ||
154 | procedure TRequestEventsImpl.OnewayComplete; | |
155 | begin | |
156 | Console.WriteLine('RequestEvents: Oneway message processed'); | |
157 | end; | |
158 | ||
159 | ||
160 | procedure TRequestEventsImpl.UnhandledError(const e: Exception); | |
161 | begin | |
162 | Console.WriteLine('RequestEvents: Unhandled exception of type '+e.classname); | |
163 | end; | |
164 | ||
165 | ||
166 | procedure TRequestEventsImpl.CleanupContext; | |
167 | var millis : Double; | |
168 | begin | |
169 | millis := (Now - FStart) * (24*60*60*1000); | |
170 | Console.WriteLine( 'Request processing completed in '+IntToStr(Round(millis))+' ms'); | |
171 | end; | |
172 | ||
173 | ||
174 | end. |