Motif と MFC のアプリケーションは、通常は大規模なアプリケーションです。最新のインターネット技術では、 thin クライアント方式を推奨しています。この方式は、以下の要素が完全に分割されたアプリケーション構造を 採用しています。
注 - Sun WorkShop Visual によってデフォルトで生成されるサーバーアプリケーションは、Web サーバーを使用してクライアントと交信する CGI プログラムです。
本章では、Sun WorkShop Visual を使用して、大規模なアプリケーションから上述の構造にきわめて簡単に移行する方法について説明します 。これを行うには、まずウィジェットを「グループ化する」ことによって移植可能なデータ構造を作成し、 コールバックを「機能拡張」することによってリモートに実行したり、リモートサーバーと交信できるよう にします。デザインに対しては、この他の変更は必要ありません。
Sun WorkShop Visual を使用すれば、「コードを生成する前に」、クライアントとサーバー間の接続を動的に試すこともできます 。thin クライアントやインターネットのコールバックの「試行」トグルをオンにすると、指定した URL に接続することによって、そのコールバックが起動されます。これについては、「試行」を参照してください。
グループは、その getter や setter とともに、あらゆる種類のスマートコードの基本となります。したがって、thin クライアント (またはインターネット) 用スマートコードを使用するには、グループと取得と設定用のスマートコードの両方の使い方を理解する必 要があります。これらの内容については、以下を参照してください。
1. ウィジェットをグループ化する方法については、第 15 章「グループ」を参照してください。
2. 第 16 章「取得と設定用のスマートコード」では、デザイン内のウィジェットに対してツールキットに依存し ないラッパーを提供する取得と設定用のスマートコードについて説明します。
デザインから thin クライアントおよびサーバーアプリケーションを作成するには、特別なスマートコードのコールバックを設 定します。そのためには、以下の操作を行う必要があります。
グループの説明と作成方法については、第 15 章「グループ」を参照してください。
スマートコードにより、コールバックは (言語独立ではなく) ツールキット独立となります。生成したい言語は、これまでどおり選択できます。スマートコードは、指定 の言語を使用してグループ内のウィジェットを「包み込む」コード階層です。
1. 取得と設定
これにより、ウィジェットのグループに対する一連の「getter」関数と「setter」関数が使用できます。第 16
章「取得と設定用のスマートコード」を参照してください。
2. thin クライアント
これにより、getter 関数と setter 関数が使用可能になるだけでなく、Sun WorkShop Visual
が、ユーザーインタフェースを含んだ別個の thin
クライアントアプリケーションと、ユーザーが定義するコールバックを含んだサーバーアプリケーションを
生成可能になります。さらに、この 2 つの間の通信を処理するコードも生成されます。本章では、thin
クライアント用スマートコードの使い方を説明します。
3. インターネット
getter 関数と setter 関数が使用可能になり、Sun WorkShop Visual
がリモートサーバーといつでも通信できるクライアントアプリケーションを生成します。サーバーと通信す
るためのコードも生成されます。インターネット用スマートコードについては、第 18
章「インターネット用スマートコード」を参照してください。
「thin クライアント」用と「インターネット」用のスマートコードでは、コールバックに渡すグループの名前が必 要になります。リモートサーバーでコールバックが実行されていても、グループによって、ユーザーインタ フェースでコールバックにアクセスできるようになります。グループの名前を「グループ」テキストフィー ルドに直接入力するか、「グループ」ボタンを押してください。これによって、グループエディタが表示さ れます。必要なグループを選択して「適用」ボタンを押すと、エディタが消えて、グループの名前がテキス トフィールドに入力されます。
「thin クライアント」または「インターネット」が選択された状態で、Sun WorkShop Visual によって生成されたすべてのスタブは、指定のグループに対して「getter」と「setter」のルーチンの機能 をすべて使用できます。取得と設定用のスマートコードについては、第 16 章「取得と設定用のスマートコード」を参照してください。サーバー内のコールバックの場合には、グ ループコンポーネントに対するアクセスが若干異なります。このコールバックは、デフォルトの「値」にア クセスする単独の get ルーチンまたは set ルーチンを呼び出します。この「値」は、ウィジェットの種類によって異なります。たとえば、テキストフ ィールドには文字列値 (その内容) があり、トグルにはブール値 (その状態) があります。
Sun WorkShop Visual は、「コールバック」ダイアログのスマートコード「スタイル」オプションメニューから「thin クライアント」や「インターネット」を選択すると、「カスタマイズ」ボタンが有効になります。このボタ ンを押すと表示される「カスタマイズ」ダイアログにより、サーバーとの間でデータの送受信方法を設定で きます。Sun WorkShop Visual は、目的にかなったデフォルトを提供します。しかし、ユーザーは通信に使用するサーバーの URL アドレスを必ず変更する必要があります。
「カスタマイズ」ダイアログは、オプションメニューから「thin クライアント」を選択した場合と「インターネット」を選択した場合とでは、その表示が若干異なります。 唯一の相違点は、送信カスタムデータハンドラ・テキストボックスのラベルです。その理由は、Sun WorkShop Visual が、2 種類のアプリケーションに対して異なる HTTP メソッドを使用するためです。「thin クライアント」が選択されると、Sun WorkShop Visual は POST プロトコルを使用します。デフォルトでは、「インターネット」が選択されると、Web ページだけを取り出すものと想定して、Sun WorkShop Visual は GET プロトコルを使用します。これを変更して POST を使用するには、カスタム送信データハンドラを使用します。詳細については 「カスタムデータハンドラ」を参照してください。
「カスタマイズ」ダイアログについては、「サーバー接続のカスタマイズ」を参照してください。
スタブファイルのリストも含めて、サーバーコールバックの定義時に生成されるコ ードの詳細については、「thin クライアントとインターネットの生成コード」を参照してください。
thin クライアントやインターネットのコールバックが定義された場合には、「試行」トグルが有効になります。 このトグルをオンにすると、コードを生成する前に、Sun WorkShop Visual の内部からクライアントとサーバー間の接続をテストすることができます。詳細については、「試行」を参照してください。
thin クライアント用とインターネット用のスマートコードでは、生成されたクライアントアプリケーションとサ ーバー間の通信手段として、WWW の規格を使用します。生成およびコンパイルされたアプリケーションを実行し、「試行」機能を使用するた めには、以下の条件が必要となります。
これらの詳細については、システム管理者に相談するか、または Sun WorkShop Visual のご購入先にご連絡ください。
この簡単な学習例では、「thin クライアント」スタイルのスマートコードを試すことができます。以下の手順に従えば、図 17-1 に示すユーザーインタフェースを含んだ thin クライアントと、トグルのオン/オフ状態に応じてテキストフィールドの内容を設定するサーバーを簡単に 生成できます。このサーバーは、独自のイントラネット上でリモートに実行したり、Web 上の任意の場所で実行できます。
読者はすでに Sun WorkShop Visual の一般的な使い方を熟知しているものと想定して、最初の手順は手短かに説明しています。使い方に不慣れ な方は、第 2 章から始まる主要な Sun WorkShop Visual 学習例をお試しください。
1. Sun WorkShop Visual を起動します。
2. アプリケーションシェル、フォーム、ボタン、ラベル、トグル、テキストフィールドという簡単な階層を作 成します。
これを図 17-2 に示します。
3. ボタンには「Go」、トグルには「Check me」、ラベルには「Text:」というラベルを付けます。
4. シェルに「Tutorial Example」というタイトルを付けます。
5. フォームの配置エディタを表示し、図 17-3 に示すようにウィジェットを配置します。
6. トグルとテキストフィールドを「MyGroup」というグループにします。
この操作を忘れた場合には、第 15 章「グループ」を参照してください。
グループの詳細については、第 15 章「グループ」を参照してください。グループの作成と使用についての簡単な例は、「取得と設定の学習」を参照してください。
7. ボタンウィジェットを選択して、「コールバック」ダイアログを表示します。
8. 関数名テキストボックスに「doGoButton」と入力します。
このコールバックは、実際には、アプリケーションのサーバー側に移動します。 P>
10. スマートコードのスタイルを「thin クライアント」に変更します。
参照 - 「thin クライアント」の使い方と意味の詳細については、「thin クライアントのサーバーコールバック」を参照してください。
11. 「カスタマイズ」ボタンを押して「カスタマイズ」ダイアログを表示します。
このダイアログを図 17-4 に示します。
参照 - 「カスタマイズ」ダイアログの各種フィールドについては、「サーバー接続のカスタマイズ」を参照してください。
12. ファイアウォールの保護下にある場合には、「プロキシ・ホスト」フィールドと「プロシキ・ポート」フィ ールドに入力してください。
入力内容がわからない場合には、システム管理者に問い合わせるか、Web ブラウザの設定を確認してください。
参照 - プロキシの調べ方については、「プロキシの詳細」を参照してください。
http://localhost/cgi-bin/untitled
では、イントラネットの「cgi-bin」ディレクトリにある「untitled」というサーバ ーを表します。この学習に従った場合、サーバーアプリケーションの名前は「tutorial」となるため、ここ ではこの名前を使用します。「untitled」を「tutorial」に変更してください。「cgi-bin」は標準のディ レクトリ名ですが、「localhost」はイントラネットの名前に変更してください。
注 - サーバーをファイルシステム上のどこに置くか決めるには、サーバーの「cgi-bin」 領域の物理位置に関して Web サーバーがどのように構成されているかを確認してください。
この学習ではデフォルトのデータハンドラを使用するため、変更の必要はありませ ん。「了解」を押すとダイアログが閉じます。
15. 「コールバック」ダイアログに戻り、「グループ」ボタンを押し、グループエディタから「MyGroup」を選 択します。
グループの名前は、テキストボックスに直接入力できますが、グループエディタか ら選択すれば入力ミスを防止できます。
16. 「追加」を押して「doGoButton」関数をコールバックのリストに追加します。
18. デザインを「 tutorial.xd 」として保存します。
19. 「生成」メニューから「生成」を選択して、「コード生成」ダイアログを表示します。
22. 「スタブ」、「コード」、「外部宣言」、「メインプログラム」、および「メークファイル」の生成トグル がオンになっていることを確認します。
デフォルトでは、「スタブ」ファイルは選択されません。したがって、生成する前 に「スタブ」がオンになっていることを確認してください。
23. 「コード生成」ダイアログの下部にある「オプション」ボタンを押して、「コードオプション」ダイアログ を表示します。
このダイアログは、「コード」フィールドの横にある「オプション」ボタンを押し たときに表示される基本ソースファイルオプションダイアログとは違います。
24. 「コードオプション」ダイアログで、「文字列」オプションメニューを「コード」に変更します。
デフォルトでは、これには「リソースファイル」が設定されています。この簡単な 学習では、文字列 (設定したすべてのラベル) をコード内に生成する方が簡単です。これは最終的なインタフェースの外見にのみ影響を与えます。
25. 「コードオプション」ダイアログで「了解」を押すと、変更内容が保存され、ダイアログが消えます。
メインコードファイル、メークファイル、および HTML インデックスが最上位ディレクトリに生成される他に、Sun WorkShop Visual によって以下のサブディレクトリも生成されます。
生成されるすべてのファイルを図 17-5 に示します。スタブを含んでいるファイルは強調表示されています。
この学習例の残りの部分は、Sun WorkShop Visual の外部で行われます。この時点で、Sun WorkShop Visual を終了してもかまいません。
生成されたファイルのうち、次の 3 つのファイルについて説明します。
参照 - thin クライアント用に Sun WorkShop Visual が生成するコードとインターネット用のスマートコードの詳細については、「生成コード」を参照してください。
28. 「server_c」ディレクトリ内のファイル doGoButton.c を編集します。
これには、スマートコードのコールバックスタブが含まれています。サーバーにそ の機能を実行させるには、ここにコードを追加する必要があります。
int
doGoButton ( sc_data_t * data)
{
MyGroup_t * g = (MyGroup_t*)data->group;
if (SC_GET(g->toggle1)) /* ここから else の次の文までを追加します */
SC_SET(g->text1, "Server says: toggle is set");
else
SC_SET(g->text1, "Server says: toggle is NOT set");
return 1;
}
30. 環境変数 VISUROOT には Sun WorkShop Visual のインストールディレクトリが設定され、C コンパイラが PATH に含まれていることを確認します。
make
make server
「server_c」ディレクトリ全体を他の場所に移動してコンパイルすることもできま す。その際はメークファイルもコピーしてください。メークファイルでは、ディレクトリ「server_c」がメ ークファイルの下のディレクトリにあるものと想定しています。
32. Sun WorkShop Visual 再現機能を使用する際のように、サーバーアプリケーション (「server_c」ディレクトリの「 tutorial 」という名前) を URL フィールドで指定された位置に移動します。
33. クライアントアプリケーション (生成ディレクトリ内の「 tutorial 」という名前) を実行します。
トグルをオンにした状態と、オフにした状態でボタンを押してみてください。テキ ストボックスにメッセージが表示されます。このメッセージはサーバーによって生成されます。サーバーは 、最初にトグルの値を検査しています。これは簡単な例ですが、ここで示す構造は簡単に拡張できます。 P>
「thin クライアント」用スマートコードのコールバックを含んでいるデザインからコードを生成すると、Sun WorkShop Visual は、その生成コードを、すべてのユーザーインタフェースコードを含む thin クライアントアプリケーションと、スマートコードのコールバックを含むサーバーに分割します。このサー バーは CGI スクリプトであるため、通信の手段として WWW の規格を使用します。HTTP を使用してクライアントとサーバー間で交信するコードも生成されます。
「thin クライアント」コールバックが定義された場合に Sun WorkShop Visual が生成するアプリケーションの構造図を図 17-6 に示します。サーバー内のスマートコードのコールバックに加えて、アプリケーションのクライアント側に はスタブも生成されるため、データがサーバーに送信される直前と直後に必要な操作を実行することができ ます。
サーバー内にあるスマートコードのコールバックには、グループへのハンドルがあ ります。これは、コールバックの定義時に指定されたグループです。グループによって、クライアントとサ ーバー間でデータを受け渡す手段が設けられ、サーバーにインタフェースコンポーネントへのアクセス権が 与えられます。
thin クライアント用スマートコードが要求されたときに Sun WorkShop Visual が生成するサーバーアプリケーションは、 CGI スクリプトです。つまり、これはどんな言語 (またはシェルスクリプト) でも記述でき、HTTP 規格によってアクセスされるプログラムです。サーバーアプリケーションの URL は、クライアントアプリケーションから Web サーバーに渡されて、Web サーバーがサーバーアプリケーションを起動します。サーバーアプリケーションからの出力は、クライアン トに返されます。このサーバーアプリケーションは、「コード生成」ダイアログで指定した言語で生成され ます。
動作中の Web サーバーが存在しない場合には、クライアントとサーバーのアプリケーションは交信できません。インター ネット用スマートコードでも、インターネット上の Web ページにアクセスするには、動作中の Web サーバーアプリケーションが存在することを想定しています。Sun の提供する Web サーバー製品については、Sun WorkShop のご購入先にお問い合わせください。Sun の Web ページ (http://www.sun.co.jp) もご覧ください。インターネット上には、無料で入手できる Web サーバーアプリケーションが多数存在します。Web の検索機能を使用すれば、簡単に Web サーバーアプリケーションを見つけることができるでしょう。
「コールバック」ダイアログで「thin クライアント」用または「インターネット」用スマートコードスタイルの「カスタマイズ」ボタンを押すと 、図 17-7 に示す「カスタマイズ」ダイアログが表示されます。
このダイアログは、オプションメニューから選択したものが「thin クライアント」であるか、「インターネット」であるかによって、その表示が若干異なります。図 17-7 には両方の場合を示します。
このダイアログを使用すれば、サーバーとのデータの送受信方法を指定できます。 このダイアログには 2 つの主要な領域があります。
1. 接続
プロキシや URL など、ネットワーク接続の詳細。
2. カスタムデータハンドラ
ネットワークを介して交信するために Sun WorkShop Visual
によって提供されるルーチンの代わりに使用されるルーチンの名前。
Sun WorkShop Visual は、この節で説明する情報を使用して、ネットワークを介したリンクを確立するためのコードを生成します 。このダイアログには以下のフィールドがあります。
1. プロキシ・ホスト
これは、ファイアウォールの保護下にある場合にだけ必要となります。これはコンピュータとインターネッ
ト間のコンジットの名前です。
2. プロキシ・ポート
これは、ファイアウォールの保護下にある場合にだけ必要となります。これはプロキシ・ホスト上で使用す
るポート番号です。
注 - プロキシに設定する値がわからない場合には、「プロキシの詳細」を参照してください。
3. URL
このフィールドだけは必ず入力しなければなりません。これは、HTML 文書や CGI
スクリプトの場所を記述する文字列です。この「文書」が何であるかは、(上述のように)
選択した通信の「スタイル」によって決まります。
4. 照会データ
これは照会文字列です。URL に疑問符 (?)
が現われた場合、その残りの部分は、検索エンジンが必要とするような、文書やその内容を照合するための
アルゴリズムとみなされます。この文字列の解釈はサーバーに依存します。Sun WorkShop Visual
は、疑問符文字を追加してから、その照会文字列を URL に追加します。
5. サーバープッシュ
これはトグルであり、これを選択すると、サーバーから非同期入力を受け付ける用意ができたことを Sun
WorkShop Visual に通知することになります。つまり、データは (要求の後ではなく)
用意ができた時点でクライアントアプリケーションに送られることになります。
Sun WorkShop Visual に付属され、使用される URL ライブラリは、簡単に Java に移行移行できるように、また、C、C++、Java のいずれを使用しても共通のインタフェースが保たれるように、Java の URL クラスと URLConnection クラスを基にして作成されました。クライアントとサーバー間の接続を完全に制御したい場合に、ユーザー はこのライブラリを使用できます。URL ライブラリのプログラミングインタフェースは、生成された index.html ファイル中のシンボリックリンクから到達されるファイルに記述されます。このファイルは、「HTML ファイル」で記述するように、生成ディレクトリの中にあります。
まだコードを生成していない場合には、HTML ブラウザで次のファイルを開きます。
$VISUROOT/lib/locale/<your_locale>/sc/URL.html
ここで、VISUROOT は Sun WorkShop Visual のインストールディレクトリであり、 <your_locale> は使用しているロケールの名前です。ロケールがわからない場合には、端末ウィンドウに locale と入力してみてください。これによってロケール情報が出力されます。この出力の中の LANG に割り当てられた文字列を使用します。ロケールの例を次に示します。
ネットワークプロキシは、ファイアウォールを通じてコンピュータ (またはイントラネット) をインターネットに接続するコンジットです。ファイアウォールは、外部からコンピュータへの不正なアク セスを防止する「セキュリティスクリーン」です。ファイアウォールの保護下からインターネットに接続す るには、プロキシ・ホストとプロキシ・ポートを指定する必要があります。これらについてまだご存知でな い場合には、以下のどちらかを行なってください。
1. システム管理者に問い合わせる。ネットワーク、電子メール、およびインターネットの接続を行なった担当 者がいるはずです。
2. Web ブラウザの設定を調べる。インターネットに接続するには、プロキシを使用する必要があります。この詳細 については次の段落で説明します。
「プロキシ・ホスト」、「プロキシ・ポート」、「URL」、「照会データ」には、そ れぞれ対応するオプションメニューがあり、入力する値が「定数」、「変数」、「関数」のいずれであるか を定義できます。その名前からわかるように、定数は入力された値を保持するだけです。「変数」を選択す ると、Sun WorkShop Visual は指定した名前を持つ外部変数を宣言します。変数は、自分のコードで定義してください。
「関数」を選択すると、Sun WorkShop Visual は、ファイル名として関数の名前を使用して、「callouts」サブディレクトリ内にファイルを生成します。 このファイルには、「get」と「set」という 2 つの関数が含まれています。これらのルーチンにはコメント付きのコード挿入用の領域があります。ここに はプロキシ・ホストを取得および設定するためのコードを挿入してください。
たとえば、「 MyProxyHost 」という関数として定義されたプロキシ・ホストを図 17-8 に示します。C コードを想定して、Sun WorkShop Visual は MyProxyHost.c というファイルの中に以下の 2 つのルーチンを生成します。
static char * MyProxyHost_value = (char*)0;
char *
get_MyProxyHost ( AnyGroup_t* ingroup)
{
group0_t * group = (group0_t*)ingroup;
if (!MyProxyHost_value) {
/* do something */
(void) fprintf( stderr, "Warning: getMyProxyHost()
returns NULL\n");
}
return MyProxyHost_value;
}
void
set_MyProxyHost (AnyGroup_t* ingroup, char* value)
{
group0_t * group = (group0_t*)ingroup;
/* set MyProxyHost_value here */
}
コメントは、プロキシ・ホストを取得および設定するためのコードを追加すべき場 所を示します。たとえば、ユーザーインタフェース内にフォームを定義すれば、ユーザーがテキストフィー ルドにプロキシ・ホストを入力できます。次に、テキストフィールドの内容を取得して、上記の「 MyProxyHost_value 」に割り当てることができます。
「カスタマイズ」ダイアログの「カスタム・データ・ハンドラ」というセクション には、以下のデフォルトルーチンを無効にするオプションがあります。
送信ハンドラや受信ハンドラのテキストボックスを空のままで残すと、Sun WorkShop Visual はデフォルトルーチンを生成します。バンドデータの範囲外の場合には、デフォルトルーチンの名前がテキ ストボックスに表示されます。これらのデフォルトが提供する基本的な機能を使用すれば、独自のハンドラ をすぐに用意しなくても、実働可能な「クライアント - サーバー」アプリケーションを作成できます。以下の項では、独自のハンドラの記述に役立つ情報に加えて 、デフォルトルーチンの内容について簡単に説明します。
デフォルトでは、Sun WorkShop Visual は、サーバーにデータを送信するルーチンを生成します。このルーチンは以下の動作を行います。
「カスタマイズ」ダイアログで送信ハンドラを指定した場合には、上述のルーチン は呼び出されません。その代わりに、ユーザーのルーチンが呼び出されます。ユーザーのルーチンは、整数 を返すものとして定義されます。また、次の順序で 2 つの引数を受け取ります。
送信ルーチンを無効にした場合でも、通信プロトコルには影響はありません。置き 換えられたデータを送信するだけです。無効にした場合でも、デフォルトの送信ルーチンは生成されますが 、呼び出されません。このルーチン ( httpSendOutputStream という名前) による MIME ヘッダーや MIME エンドの送信方法、およびグループコンポーネントの連続化方法を確認したい場合には、次のファイルを調 べてください。
<YourGenerateDirectory>/http_c/tr_http.c
<YourGenerateDirectory> は、コードの生成先のディレクトリです。
ユーザーの送信ハンドラは、 Callouts ディレクトリに置かれます。生成されるコードとその場所の詳細については、「生成コード」を参照してください。
参照 - 「試行」で説明した取得と設定の短縮形表記を使用してデザインからコードを生成した場合に は、例で使用した送信ハンドラが生成されます。これを出発点として使用できます。
「カスタマイズ」ダイアログで受信データハンドラを指定した場合には、Sun WorkShop Visual がデフォルトで生成するすべての通信プロトコルに加えて、このルーチンが呼び出されます。
C と C++ のコードでは、ユーザーのルーチンは、整数を返し 2 つの引数を受け取るものとして定義されます。
1. Sun WorkShop Visual によって定義される構造体へのポインタは、C コードの場合には sc_stdcs_t と呼ばれ、C++ の場合には sc_stdcs_c と呼ばれます。この構造体によって、ユーザーのルーチンがグループにアクセスできるようになります。内 部使用専用の非公開フィールドもあります。これは、コードを生成するディレクトリのファイル sc_groups_c.h で定義されます。
2. Sun WorkShop Visual によって定義される構造体へのポインタは、C では sc_idata_t と呼ばれ、C++ では sc_idata_c と呼ばれます。この構造体によって、ユーザーのルーチンが入力ストリーム、その長さ、および MIME 型にアクセスできるようになります。これは、 http サブディレクトリ内のファイル http_transport.h で定義されています。
Java の場合には、指定する受信ハンドラは、Sun WorkShop Visual が定義したクラスである SCInputDataHandler のサブクラスにされます。独自のコードは doit() メソッドに追加してください。 utils_java サブディレクトリの SCIData.java で定義されるように、このメソッドは「void」であり、SCIData クラスのインスタンスである 1 つの引数を受け取ります。
デフォルトで提供される受信ハンドラは、返されたデータを無視します。しかしほ とんどの場合、返されたデータの解析は必要になります。Sun WorkShop Visual には完全な HTML パーサーが提供されています。このパーサーはデータ駆動型であるため、使いやすくなっています。つまり 、ウィジェットが調べたいコールバックにインタレスト (関心) を登録するのと同じように、関心のある HTML タグをパーサーに通知することができます。この詳細については、「HTML データから情報を抽出」を参照してください。
ユーザーの受信ハンドラは、 Callouts ディレクトリに置かれます。生成されるコードとその場所の詳細については、「生成コード」を参照してください。
参照 - 「試行」で説明した取得と設定の短縮形の表記を使用して、デザインからコードを生成した場 合には、例で使用した受信ハンドラが生成されます。これを出発点として使用できます。
Sun WorkShop Visual は、MIME 規格に準拠した着信データを想定しています。予期しないデータが受信された場合には、Sun WorkShop Visual によって生成された、アプリケーションのクライアント側のルーチンが呼び出されます。このデフォルトル ーチンは scHTTPReply と呼ばれ、着信データを標準出力にそのまま出力します。thin クライアント用やインターネット用のスマートコードのコールバックを定義した場合には、このデフォルト ルーチンが ( Callouts サブディレクトリに) 生成されます。これは、「コード生成」ダイアログで要求した言語で生成されます。次に示すのは C コードのルーチンです。
int
scHTTPReply ( csdata, data)
sc_stdcs_t* csdata;
sc_idata* data;
{
extern DataInputStream * newDataInputStream();
InputStream* i = (InputStream*)(*data->getInputStream)( data);
DataInputStream * d = newDataInputStream( i);
char * s;
printf("data from server:\n");
if (!d) {
printf("no data\n");
return 0;
}
while ((s = (*d->readLine)( d)) != (char*)0) {
printf("%s\n", s);
}
(*d->delete)( d);
printf("end data\n");
}
ユーザー独自のルーチンを「カスタマイズ」ダイアログに「バンドデータの範囲外 」ハンドラとして指定した場合には、そのルーチンはデフォルトと同じように定義されます。そのルーチン が受け取る引数は、上述の受信ハンドラの場合とまったく同じです。
Java コードの場合、「バンドデータの範囲外」ハンドラのフォーマットは、受信ハンドラの場合とまったく同じ です。これは、Sun WorkShop Visual が定義したクラスである SCInputDataHandler のサブクラスです。独自のコードは doit() メソッドに追加してください。
ユーザーの「バンドデータの範囲外」ハンドラは、 Callouts ディレクトリに置かれます。生成されるコードとその場所の詳細については、「生成コード」を参照してください。
「試行」トグルにより、Sun WorkShop Visual のダイナミックディスプレイを、すべての機能を備えた thin クライアントインタフェースに変えることができます。このトグルは、thin クライアントとインターネットのどちらのコールバックにも設定できます。
「試行」トグルを有効にするには、コールバックの定義と追加を行う必要がありま す。thin クライアント用スマートコードの場合には、コールバックはサーバー内のルーチンの名前です。インターネ ット用スマートコードの場合には、これはクライアントアプリケーション内のコールバックの名前です。 P>
Sun WorkShop Visual が提供する短縮形の getter や setter により、「カスタマイズ」ダイアログで動的なカスタマイズを行うことができます。この短縮形では、スプ レッドシート表記規則 (「@」記号) を使用して「…の内容」を表します。たとえば、
@text1
では、「指定したグループでの text1 というウィジェットの内容」を意味します。指定したグループとは、「コールバック」ダイアログで指定し たグループです。「接続」領域のフィールド (URL とプロキシ) でこの表記法を使用すると、コントロールの内容が取り出されます。これを「受信ハンドラ」フィールドで 使用した場合には、text1 の内容にサーバーから受信したデータを設定するものとみなされます。
「試行」ボタンの使用方法を次の例に示します。ここでは、WWW を使用してリモート Web サイトにアクセスし、Web ページを読み込みます。この学習をすべて実行するには、Web サーバーを実行している必要があります。
1. 図 17-9 に示す階層を作成します。これは、シェル -> フォーム -> {ボタン、テキストフィールド、テキスト} で構成されています。
2. テキストフィールドとテキストウィジェットを含む、Group0 というグループを作成し、テキストフィールドを非公開にします。
これを図 17-10 に示します。
3. button1 の「コールバック」ダイアログを表示します。
4. 図 17-11 に示すように、「doit」というインターネット用スマートコードのコールバックを設定します。
6. 「カスタマイズ」ダイアログでは、図 17-12 に示すように、ウィジェット text1 の内容に対する getter 短縮表記を「URL」フィールドに書き込みます。
7. 図 17-12 に示すように、ウィジェット text2 に対する短縮表記を「受信ハンドラ」フィールドに書き込みます。
参照 - ファイアウォールの保護下にある場合には、プロキシフィールドも設定する必要が あります。詳細については 「プロキシの詳細」を参照してください。
8. 「了解」を押して、設定内容を保存し「カスタマイズ」ダイアログを閉じます。
9. 「コールバック」ダイアログに戻って、「試行」トグルをオンにします。
ツールキットに依存しないラッパーとグループオブジェクトの定義を含むコードフ ァイルは、「コールバック」ダイアログからスマートコードが選択された場合に生成されます。「thin クライアント」と「インターネット」の場合には、「取得と設定」の場合よりも多くのファイルが生成され ます。その理由は、グループの getter と setter に加えて、サーバーとの通信用のコードもすべて生成されるためです。さらに、「thin クライアント」の場合には、サーバー側のアプリケーションも生成されます。
これらのファイルの一部は、特別な名前のディレクトリに置かれます。それらのデ ィレクトリは、Sun WorkShop Visual によって生成され、「コード生成」ダイアログで選択したディレクトリの下位に置かれます。他のファイル は、選択されたディレクトリに置かれます。thin クライアント用スマートコードの学習のために生成されたファイルを、図 17-5 に示します。これによって、生成されたファイルとサブディレクトリの仕組みがわかります。
最も重要なことは、編集が必要になる可能性のあるコールバックやその他のルーチ ン (カスタムデータハンドラ、前処理および後処理ルーチン、その他のデータ関数など) を簡単に見つけ出せるように、まとめておくことです。他のコードファイルを変更する必要はありません。
生成される内容は、コールバック用に「取得と設定」用スマートコードだけを要求 したのか、それとも「thin クライアント」や「インターネット」を要求したのかによって異なります。それぞれの場合に生成されるコ ードを以下に説明します。
グループを使用し、スマートコードを使用していない場合には、基本ソースファイ ルにウィジェットの配列が定義されます。
しかし、スマートコードがない場合には、ユーザーズガイドの第 7 章「コードの生成」で記述したファイルだけが生成され、新しいディレクトリは作成されません。
コードファイルを生成する際に、Sun WorkShop Visual は、選択された言語に適した拡張子を使用します。
1 つ以上のコールバックに対して「取得/設定」スタイルのスマートコードを選択した場合には、以下のファ イルは、「コールバック」ダイアログの最初の項目で指定されたディレクトリに生成されます。
注 - 各ディレクトリ名の最後にある「c」は、コード生成用の言語として C が選択されたことを示します。他の言語が選択された場合には、この表記は言語に応じて変化します。
「取得/設定」用スマートコードでは、以下のスタブファイルが生成されます。
「取得/設定」用スマートコードの学習用に生成されたファイルの図式表示を、図 16-10 に示します。
スマートコードのコールバックを含んでいるデザインからコードを生成すると、「取得と設定の生成コード」で説明したファイルとディレクトリがすべて生成されます。さら に、Sun WorkShop Visual は以下のディレクトリを作成します。
ディレクトリ「server_c」には、ユーザーインタフェースを含んでいる thin クライアントアプリケーションに接続するサーバーを構築するために必要なファイルがすべて含まれていま す。このディレクトリ全体を取り出して構築し、リモート Web サーバー上で実行することができます。
最上位ディレクトリの Makefile には、クライアント (ユーザーのデザイン) とサーバーの両方を構築するための規則が含まれています。クライアントを構築するには、コマンド行から
make
make server
以下の種類のスタブは、thin クライアント用やインターネット用のスマートコードのコールバックを作成するときに生成できます。これ らのいくつかは任意指定であり、「カスタマイズ」ダイアログとグループエディタでルーチンを指定したか どうかによって選択します。
参照 - 独自のデータハンドラを追加する方法の詳細については、「カスタムデータハンドラ」を参照してください。グループに特別な関数を追加する方法につ いては、「その他のデータ − 関数」を参照してください。
従来の、ツールキットに依存するクライアントコールバックを含んでいるファイル は次のとおりです。
これは、スマートコードの使用とは無関係に、任意のコールバックの定義時に生成 されるコールバックファイルです。thin クライアント用またはインターネット用のスマートコードのコールバックを定義するとき、Sun WorkShop Visual は、このファイルにクライアント側のコールバックを自動生成します。これにはツールキットに依存するコ ードが含まれています。ここには、ツールキットを使用するコードだけを追加してください。
ツールキットに依存しないクライアントコールバックを含んでいるファイルは次の とおりです。
thin クライアント用またはインターネット用のスマートコードのコールバックごとに、 Callouts サブディレクトリにファイルが生成されます。ファイル名としては、コールバックの名前に「 _cs 」(クライアントサーバーを表す) を付加した名前を使用します。このファイルにはコールバックルーチン (C++ と Java の場合にはメソッド) が含まれています。これには、グループにアクセスできる、ツールキットに依存しないコードが含まれてい ます。
「関数」が選択された場合には、「カスタマイズ」ダイアログの「接続」ごとにフ ァイルが生成されます。各ファイルには、 get_<接続> と set_<接続> のルーチンが含まれています。ファイルは、ファイル名として指定する関数の名前を使用して、 Callouts サブディレクトリに生成されます。
「カスタマイズ」ダイアログで指定したカスタムデータハンドラにもファイルが生 成されます。ファイル名は、「カスタマイズ」ダイアログに入力した名前です。
「取得と設定用のユーザーコードの追加先」で説明したように、グループエディタで定義され た「その他のデータ」関数に対してスタブルーチンが生成されます。
「thin クライアント」用スマートコードの学習用に生成されたファイルの図式表示を、図 17-5 に示します。
コールバックを探したり、生成されたファイルの内容をよく知るためには、Sun WorkShop Visual によって生成される一連の HTML ファイルが役立ちます。主要なファイルは以下のものです。
最上位ディレクトリ (つまり、「コールバック」ダイアログで指定されたディレクトリ) にあります。
Web ブラウザ (または HTML を読み込める他のソフト) でこのファイルを開くと、図 17-3 に示すように、生成されるファイルの一覧と、それぞれの簡単な説明が表示されます。
他のファイルへのハイパーテキストリンクもあり、これも Sun WorkShop Visual によって生成されたものです。リンク先のファイルには、グループと Motif「ラッパー」ごとに生成されるコードが記述されています。
このファイルには、スマートコードをプログラミングするためのオンライン参考資 料へのリンクも含まれています。この参考資料を直接表示するには、HTML ブラウザで次のファイルを開いてください。
$VISUROOT/lib/locale/<YourLocale>/sc/index.html
ここで、VISUROOT は Sun WorkShop Visual のインストールディレクトリであり、< YourLocale> はユーザーが使用しているロケールです。自分のロケールがわからない場合には、端末ウィンドウに locale と入力してみてください。これによってロケール情報が出力されます。出力の中で LANG に割り当てられた文字列を使用します。ロケールの例を次に示します。
サン・マイクロシステムズ株式会社 Copyright information. All rights reserved. |