blob: 34ee08130027f714ccf9fcb3fddb76065b6791b3 [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 Multiplex.Client.Main;
{.$DEFINE StressTest} // activate to stress-test the server with frequent connects/disconnects
{.$DEFINE PerfTest} // activate to activate the performance test
interface
uses
Windows, SysUtils, Classes,
DateUtils,
Generics.Collections,
Thrift,
Thrift.Protocol,
Thrift.Protocol.Multiplex,
Thrift.Transport.Pipes,
Thrift.Transport,
Thrift.Stream,
Thrift.Collections,
Benchmark, // in gen-delphi folder
Aggr, // in gen-delphi folder
Multiplex.Test.Common;
type
TTestClient = class
protected
FProtocol : IProtocol;
procedure ParseArgs( const args: array of string);
procedure Setup;
procedure Run;
public
constructor Create( const args: array of string);
class procedure Execute( const args: array of string);
end;
implementation
type
IServiceClient = interface
['{7745C1C2-AB20-43BA-B6F0-08BF92DE0BAC}']
procedure Test;
end;
//--- TTestClient -------------------------------------
class procedure TTestClient.Execute( const args: array of string);
var client : TTestClient;
begin
client := TTestClient.Create(args);
try
client.Run;
finally
client.Free;
end;
end;
constructor TTestClient.Create( const args: array of string);
begin
inherited;
ParseArgs(args);
Setup;
end;
procedure TTestClient.ParseArgs( const args: array of string);
begin
if Length(args) <> 0
then raise Exception.Create('No args accepted so far');
end;
procedure TTestClient.Setup;
var trans : ITransport;
begin
trans := TSocketImpl.Create( 'localhost', 9090);
trans := TFramedTransportImpl.Create( trans);
trans.Open;
FProtocol := TBinaryProtocolImpl.Create( trans, TRUE, TRUE);
end;
procedure TTestClient.Run;
var bench : TBenchmarkService.Iface;
aggr : TAggr.Iface;
multiplex : IProtocol;
i : Integer;
begin
try
multiplex := TMultiplexedProtocol.Create( FProtocol, NAME_BENCHMARKSERVICE);
bench := TBenchmarkService.TClient.Create( multiplex);
multiplex := TMultiplexedProtocol.Create( FProtocol, NAME_AGGR);
aggr := TAggr.TClient.Create( multiplex);
for i := 1 to 10
do aggr.addValue( bench.fibonacci(i));
for i in aggr.getValues
do Write(IntToStr(i)+' ');
WriteLn;
except
on e:Exception do Writeln(#10+e.Message);
end;
end;
end.