Smart CODE | |
生成済みコードに関するオンラインガイド
|
はじめての CGI アプリケーション。既製の例題を使った学習 |
この例題は、thin クライアントとしてa X-Designer で生成されたアプリケーションを構築する方法について説明しています。ここでは、コールバックは直接アプリケーションに書き込まずに、どこででも実行できる別個のサーバーアプリケーションに書き込みます。
サーバーにコールバックを記述する方法は、最初の例題で行なったように getter と setter を使用してスマートコードコールバックを記述する方法とほとんど同じです。唯一の相違点は、インタフェースとアプリケーションが明確に分割されていることです。 サーバー上のコールバックは、コントロールの値だけに注目します。実際に、コントロール自体についてはまったく認識しません。単純にデータ構造内のフィールドだけを認識します。 サーバープログラムは、それぞれ異なるインタフェースを使用している多数のクライアントに正しく応答する必要があります。 |
環境変数、ほか |
|
---|---|
通常どおり、パスには必ず $XDROOT/bin を指定します。
例題を使用した作業を始める前に設定が必要な変数は以下のものです。 |
|
XDROOT | |
LM_LICENSE_FILE |
手順 1 | 新しいディレクトリを作成し、ここでは仮に cgiexample という名前を付けます。 |
手順 2 | cgiexample ディレクトリに移動します。 |
手順 3 | xdreplay スクリプトの $XDROOT/src/examples/sc/myfirst.vcr
を使用して、xdesigner を実行します。次のように指定します。
$ xdreplay -f $XDROOT/src/examples/sc/myfirst.vcr xdesigner |
これを実行すると、アプリケーション例題が作成され、コードが生成され、ユーザが記述しておいたコールバックの標準バージョンが適切な箇所にコピーされて、プログラムを構築するための呼び出しが行われます。 | |
手順 4 | このスクリプトで作成されるのは、getter 関数 get_myURL()
を持つクライアント側のプログラムです。このプログラムは、使用しているシステム上で実行できるように設定されていなければならないので、次のファイルを編集する必要があります。
callouts_c/myURL.c 次に、make コマンドを再発行します。 サーバー側のプログラムは、内部の Web サーバー上の cgi-bin 領域にインストールして、このルーチンが正しい URL をプログラムに返すように設定するか、または IST の Web サーバーにすでに構築されているバージョンに設定することができます。 http://www.ist.co.uk/cgi-bin/xd5_cgiexample 構築済みバージョンを使用する場合、ファイアウォールを越えてアプリケーションを接続することが必要になる可能性もあります。特定のプロキシホストとプロキシポートを使用するようにアプリケーションをカスタマイズすることもできますが、環境変数 HTTP_PROXY を設定することで、同じ効果を得ることができます。たとえば、使用するプロキシホストが meinhost という名前で、そのポートが 8081 の場合、次のように設定します。 % setenv HTTP_PROXY meinhost:8081 |
まず、環境変数が設定されていることを確認します。問題がある場合は、正しく設定されているかチェックします。
$ ls $XDROOT |
次のように入力してアプリケーション例題を実行します。
$ ./untitledボタンを押すたびに、サーバーでコールバックが実行され、インタフェースが自動的に更新されます。これを検証するには、トグルを設定します。 |
インタフェースを作成する |
||
---|---|---|
このアプリケーションは、アプリケーションのコールバックをサーバーやその他の適切な場所に簡単に移動できることを説明するために設計されています。インタフェースは、コールバックに関連付けられたボタンが 1 つと、トグルとテキストフィールド各 1 つで構成されたグループを持つ基本的なものです。 | ||
手順 1 | アプリケーションシェルとフォームを作成し、その下にボタン、トグル、およびテキストフィールドを 1 つずつ作成します。 | |
手順 2 | トグルをクリックし、次にテキストフィールドを Shift キーを押しながらクリックして、両方を選択します。 | |
手順 3 | ツールバーから、「新規グループに追加」ボタンを選択します。グループエディタが表示されたら、それを閉じます。 | |
手順 4 | ボタンを選択して、「コールバック」ダイアログを開き、コールバックに doit_callback という名前を付けます。「スマートコード」のチェックボックスをオンにして、「スタイ ル」オプションメニューから「thin クライアント」を選択します。次に「グループ」ボタンを押し、グループエディタでそのグループが選択されていることを確認してから、「適用」ボタンを押します。 | |
手順 5 | この時点で、「カスタマイズ」ボタンが有効になります。このボタンを押して、thin クライアントの「カスタマイズ」ダイアログにアクセスします。このダイアログが表示されたら次の処理を行います。 | |
手順 6 | このダイアログでは、ファイアウォールが存在する場合にプロキシホストとプロキシポートのフィールドにだけ入力を行い、URL
フィールドの参照先が、サーバープログラムをインストールする予定の場所に正しく設定されていることを確認します。
構築済みバージョンを使用する場合は、参照先は、次のように設定する必要があります。 http://www.ist.co.uk/cgi-bin/xd5_cgiexample「プロキシ・ホスト」および「プロキシ・ポート」フィールドを設定する代わりに、環境変数の HTTP_PROXY を設定することもできます。たとえば、次のように設定します。 % setenv HTTP_PROXY meinhost:80 |
|
手順 7 | これらの変更を適用し、「カスタマイズ」ダイアログを閉じます。次に、「コールバック」ダイアログの「追加」ボタンを押します。
「コールバック」ダイアログを閉じます。 |
|
手順 8 | メニューバーの「生成」メニューから「生成」を選択し、「コード生成」ダイアログ
を開きます。言語に C
を選択していること、ディレクトリの指定が正しいこと、およびスタブを生成するための
トグルがオンに
なっていることを確認します。
「生成」ボタンを押します。 |
|
手順 9 | シェルに戻り、make を使用して thin クライアント用アプリケーションおよびサーバーを構築します。
$ make $ make server独自の Web サーバーで CGI プログラムを使用する場合は、コンパイル済みのサーバープログラムを使用しているサーバーの cgi-bin ディレクトリに移動するか、リンクする必要があります。 別のプラットフォームにサーバーを構築する必要がある場合は、メークファイルと server_c ディレクトリだけを移動します。server_c ディレクトリ内のコードは、完全に独立しています。 例題を使用する場合は、クライアントは一切変更しないでください。クライアントについては、プログラミングは不要です。単純に、 server_c/doit_callback.c ファイルを変更し、スタブコールバックを次のように置き換えてください。 |
|
int doit_callback ( sc_data_t * data) { group0_t * g = (group0_t*)data->group; if (SC_GET(g->toggle1)) SC_SET(g->text1, "Hallo World"); else SC_SET(g->text1, "Farewell Cruel World"); return 1; } |
||
コールバックは、最初の例題で記述したものとほとんど同じです。最初の例題では、インタフェースで直接
getter と setter を使用しましたが、ここでは 1 つだけ重要な相違点があります。
|