【Delphi Sample】Delphi と Google App Engine と Thrift と Java その3
【Delphi Sample】Delphi と Google App Engine と Thrift と Java その3
Google App Engine(GAE/J)
とDelphi
間をApache Thrift
を使って通信するサンプルの第3回目です。今回はクライアント側の実装を進めます。
クライアントアプリケーション
クライアントはDelphiで作成します(Delphi 10.2 Community Editionを利用しています)
フォルダ構成
コマンドで出力したファイルをフォルダのままプロジェクトに追加します。フォルダを変更したいときは、IDL
のnamespace
を編集して、再度ファイルを自動生成してください。
「Thrift」
フォルダはThriftライブラリです。Apache ThriftのGitHubリポジトリからダウンロードすることができます。こちらもunit名にThriftとついていますから、Thriftフォルダに入れるとよいでしょう。
コーディング
今回は四則演算のうち、足し算の処理を呼び出してみます。
MainForm.fmx
足し算のインターフェイスはパラメータを二つ取り、整数値が戻ってくるという単純な形なので、
i32 add(1:i32 param1, 2:i32 param2)
画面にも同じようにパラメータ用と戻り値用のEditを配置します。処理を呼び出すトリガーとしてButtonも配置しておきます。Buttonを押すとパラメータの1と2をサーバーに送り、答えを返してもらうというわけです。
MainForm.pas
ポイントとなるのは次のことくらいでしょうか?
- usesにThriftのライブラリを追加
- HTTPを利用して通信するため、
THTTPClientImpl
を利用 - ServletにマッピングしたURLをTransportに与える
- 利用後はCloseを忘れないこと
unit MainForm;
interface
uses
System.SysUtils, System.Types, System.UITypes, System.Classes,
System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls, FMX.Edit, FMX.Controls.Presentation,
Thrift, Thrift.Transport, Thrift.Protocol,
ThriftInterface.Calculator;
type
TfrmMain = class(TForm)
Button1: TButton;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
procedure Button1Click(Sender: TObject);
private
{ private 宣言 }
public
{ public 宣言 }
end;
var
frmMain: TfrmMain;
implementation
{$R *.fmx}
procedure TfrmMain.Button1Click(Sender: TObject);
var
transport: ITransport;
protocol: IProtocol;
client: TCalculatorService.Iface;
p1, p2, answer: integer;
begin
try
transport := THTTPClientImpl.Create('http://localhost:8080/calculator');
protocol := TBinaryProtocolImpl.Create(transport);
client := TCalculatorService.TClient.Create(protocol);
p1 := StrToInt(Edit1.Text);
p2 := StrToInt(Edit2.Text);
transport.Open;
answer := client.add(p1, p2);
transport.Close;
Edit3.Text := IntToStr(answer);
except
on e: Exception do
WriteLn(e.ClassName + ': ' + e.Message);
end;
end;
end.
サーバー側のサービスが増えるたびに(=URLのマッピングが増える)Transportを作成するときのURLが変わるので、この辺りは抽象化できるポイントだと思います。
動作確認
最後に動作確認です。
まずは、サーバー側1を起動しておきます(ポート番号がDelphiで指定したURLと同じ番号で立ち上がっていることを確認してください)。
次にDelphi側でアプリケーションを実行し、パラメータ1とパラメータ2に適当な数値を入力し、ボタンを押してください。すると、答えに結果が表示されます。
サーバーと通信している最中は処理がブロッキングされますので、注意してください。
スポンサーリンク
今回はGoogle App Engineを利用しているので、もちろんApp Engineにデプロイしたアプリでも構いません。その場合はURLを適切に変更してください。SSLも利用できます。 ↩︎
コメント
コメントを投稿