前へ 次へ 目次 文書セット ホーム


第 17 章

 

thin クライアント用スマートコード


はじめに

Motif と MFC のアプリケーションは、通常は大規模なアプリケーションです。最新のインターネット技術では、 thin クライアント方式を推奨しています。この方式は、以下の要素が完全に分割されたアプリケーション構造を 採用しています。

本章では、Sun WorkShop Visual を使用して、大規模なアプリケーションから上述の構造にきわめて簡単に移行する方法について説明します 。これを行うには、まずウィジェットを「グループ化する」ことによって移植可能なデータ構造を作成し、 コールバックを「機能拡張」することによってリモートに実行したり、リモートサーバーと交信できるよう にします。デザインに対しては、この他の変更は必要ありません。

Sun WorkShop Visual を使用すれば、「コードを生成する前に」、クライアントとサーバー間の接続を動的に試すこともできます 。thin クライアントやインターネットのコールバックの「試行」トグルをオンにすると、指定した URL に接続することによって、そのコールバックが起動されます。これについては、「試行」を参照してください。

グループは、その getter や setter とともに、あらゆる種類のスマートコードの基本となります。したがって、thin クライアント (またはインターネット) 用スマートコードを使用するには、グループと取得と設定用のスマートコードの両方の使い方を理解する必 要があります。これらの内容については、以下を参照してください。

    1. ウィジェットをグループ化する方法については、第 15 章「グループ」を参照してください。

    2. 第 16 章「取得と設定用のスマートコード」では、デザイン内のウィジェットに対してツールキットに依存し ないラッパーを提供する取得と設定用のスマートコードについて説明します。

thin クライアント用スマートコードの使用

デザインから thin クライアントおよびサーバーアプリケーションを作成するには、特別なスマートコードのコールバックを設 定します。そのためには、以下の操作を行う必要があります。

    1. デザイン内のウィジェットの「コールバック」ダイアログを表示します。

    2. 「スマートコード」トグルを選択します。

    3. 「スマートコード」オプションメニューから「thin クライアント」を選択します。

    4. グループを指定します。

    5. コールバックに名前をつけて追加します。

グループの説明と作成方法については、第 15 章「グループ」を参照してください。

スマートコードにより、コールバックは (言語独立ではなく) ツールキット独立となります。生成したい言語は、これまでどおり選択できます。スマートコードは、指定 の言語を使用してグループ内のウィジェットを「包み込む」コード階層です。

スマートコードには 3 つの種類があります。

    1. 取得と設定
    これにより、ウィジェットのグループに対する一連の「getter」関数と「setter」関数が使用できます。第 16 章「取得と設定用のスマートコード」を参照してください。

    2. thin クライアント
    これにより、getter 関数と setter 関数が使用可能になるだけでなく、Sun WorkShop Visual が、ユーザーインタフェースを含んだ別個の thin クライアントアプリケーションと、ユーザーが定義するコールバックを含んだサーバーアプリケーションを 生成可能になります。さらに、この 2 つの間の通信を処理するコードも生成されます。本章では、thin クライアント用スマートコードの使い方を説明します。

    3. インターネット
    getter 関数と setter 関数が使用可能になり、Sun WorkShop Visual がリモートサーバーといつでも通信できるクライアントアプリケーションを生成します。サーバーと通信す るためのコードも生成されます。インターネット用スマートコードについては、第 18 章「インターネット用スマートコード」を参照してください。

グループの指定

「thin クライアント」用と「インターネット」用のスマートコードでは、コールバックに渡すグループの名前が必 要になります。リモートサーバーでコールバックが実行されていても、グループによって、ユーザーインタ フェースでコールバックにアクセスできるようになります。グループの名前を「グループ」テキストフィー ルドに直接入力するか、「グループ」ボタンを押してください。これによって、グループエディタが表示さ れます。必要なグループを選択して「適用」ボタンを押すと、エディタが消えて、グループの名前がテキス トフィールドに入力されます。

getter と setter

「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 の規格を使用します。生成およびコンパイルされたアプリケーションを実行し、「試行」機能を使用するた めには、以下の条件が必要となります。

    1. イントラネットまたはインターネットに接続されたネットワークコンピュータ

    2. 動作中の Web サーバー

これらの詳細については、システム管理者に相談するか、または Sun WorkShop Visual のご購入先にご連絡ください。

thin クライアント用スマートコードの学習

この簡単な学習例では、「thin クライアント」スタイルのスマートコードを試すことができます。以下の手順に従えば、図 17-1 に示すユーザーインタフェースを含んだ thin クライアントと、トグルのオン/オフ状態に応じてテキストフィールドの内容を設定するサーバーを簡単に 生成できます。このサーバーは、独自のイントラネット上でリモートに実行したり、Web 上の任意の場所で実行できます。

読者はすでに Sun WorkShop Visual の一般的な使い方を熟知しているものと想定して、最初の手順は手短かに説明しています。使い方に不慣れ な方は、第 2 章から始まる主要な Sun WorkShop Visual 学習例をお試しください。

 

    図 17-1 thin クライアントアプリケーションのユーザーインタフェース

    1. Sun WorkShop Visual を起動します。

    2. アプリケーションシェル、フォーム、ボタン、ラベル、トグル、テキストフィールドという簡単な階層を作 成します。

    これを図 17-2 に示します。

 

    図 17-2 スマートコード学習用の階層

    3. ボタンには「Go」、トグルには「Check me」、ラベルには「Text:」というラベルを付けます。

    4. シェルに「Tutorial Example」というタイトルを付けます。

    これをシェルのリソースダイアログで行います。

    5. フォームの配置エディタを表示し、図 17-3 に示すようにウィジェットを配置します。

    これは単なる表面的な変更です。外見が変化するだけで、アプリケーションの機能 には影響ありません。

 

    図 17-3 配置された学習用ウィジェット

    6. トグルとテキストフィールドを「MyGroup」というグループにします。

    この操作を忘れた場合には、第 15 章「グループ」を参照してください。

    グループの詳細については、第 15 章「グループ」を参照してください。グループの作成と使用についての簡単な例は、「取得と設定の学習」を参照してください。

    7. ボタンウィジェットを選択して、「コールバック」ダイアログを表示します。

    8. 関数名テキストボックスに「doGoButton」と入力します。

    このコールバックは、実際には、アプリケーションのサーバー側に移動します。

    9. 「スマートコード」トグルボタンをオンにします。

    10. スマートコードのスタイルを「thin クライアント」に変更します。

    これによって「カスタマイズ」ボタンが有効になります。

    参照 - 「thin クライアント」の使い方と意味の詳細については、「thin クライアントのサーバーコールバック」を参照してください。

    11. 「カスタマイズ」ボタンを押して「カスタマイズ」ダイアログを表示します。

    このダイアログを図 17-4 に示します。

    参照 - 「カスタマイズ」ダイアログの各種フィールドについては、「サーバー接続のカスタマイズ」を参照してください。

 

    図 17-4 「カスタマイズ」ダイアログ

    12. ファイアウォールの保護下にある場合には、「プロキシ・ホスト」フィールドと「プロシキ・ポート」フィ ールドに入力してください。

    入力内容がわからない場合には、システム管理者に問い合わせるか、Web ブラウザの設定を確認してください。

    参照 - プロキシの調べ方については、「プロキシの詳細」を参照してください。

    13. 「URL」フィールドにサーバープログラムの名前と位置が入力されていることを確認します。

    たとえば、

	http://localhost/cgi-bin/untitled

    では、イントラネットの「cgi-bin」ディレクトリにある「untitled」というサーバ ーを表します。この学習に従った場合、サーバーアプリケーションの名前は「tutorial」となるため、ここ ではこの名前を使用します。「untitled」を「tutorial」に変更してください。「cgi-bin」は標準のディ レクトリ名ですが、「localhost」はイントラネットの名前に変更してください。

    注 - サーバーをファイルシステム上のどこに置くか決めるには、サーバーの「cgi-bin」 領域の物理位置に関して Web サーバーがどのように構成されているかを確認してください。

    14. 「カスタマイズ」ダイアログで「了解」を押します。

    この学習ではデフォルトのデータハンドラを使用するため、変更の必要はありませ ん。「了解」を押すとダイアログが閉じます。

    15. 「コールバック」ダイアログに戻り、「グループ」ボタンを押し、グループエディタから「MyGroup」を選 択します。

    グループの名前は、テキストボックスに直接入力できますが、グループエディタか ら選択すれば入力ミスを防止できます。

    16. 「追加」を押して「doGoButton」関数をコールバックのリストに追加します。

    17. 「コールバック」ダイアログを閉じます。

    18. デザインを「 tutorial.xd 」として保存します。

    デザインは定期的に保存するようお勧めします。

    19. 「生成」メニューから「生成」を選択して、「コード生成」ダイアログを表示します。

    20. 「言語」メニューから「C」を選択します。

    21. ファイルの生成先ディレクトリを選択します。

    22. 「スタブ」、「コード」、「外部宣言」、「メインプログラム」、および「メークファイル」の生成トグル がオンになっていることを確認します。

    デフォルトでは、「スタブ」ファイルは選択されません。したがって、生成する前 に「スタブ」がオンになっていることを確認してください。

    23. 「コード生成」ダイアログの下部にある「オプション」ボタンを押して、「コードオプション」ダイアログ を表示します。

    このダイアログは、「コード」フィールドの横にある「オプション」ボタンを押し たときに表示される基本ソースファイルオプションダイアログとは違います。

    24. 「コードオプション」ダイアログで、「文字列」オプションメニューを「コード」に変更します。

    デフォルトでは、これには「リソースファイル」が設定されています。この簡単な 学習では、文字列 (設定したすべてのラベル) をコード内に生成する方が簡単です。これは最終的なインタフェースの外見にのみ影響を与えます。

    25. 「コードオプション」ダイアログで「了解」を押すと、変更内容が保存され、ダイアログが消えます。

    26. 「生成」ダイアログに戻って「生成」を押します。

    メインコードファイル、メークファイル、および HTML インデックスが最上位ディレクトリに生成される他に、Sun WorkShop Visual によって以下のサブディレクトリも生成されます。

  1. callouts_c
    スマートコードのコールバック用のクライアント側スタブが含まれています。
  2. server_c
    スマートコードのコールバックスタブなど、サーバー用のすべてのコードが含まれています。
  3. groups_c
    グループのコードが含まれています。
  4. motif_c
    グループコンポーネントを Motif から独立させる「ラッパー」が含まれています。
  5. http_c
    HTTP プロトコルを使用するクライアントとサーバー間の通信用のすべてのコードが含まれています。

生成されるすべてのファイルを図 17-5 に示します。スタブを含んでいるファイルは強調表示されています。

 

    図 17-5 学習用に生成されるファイルとディレクトリ

    27. デザインを保存します。

    この学習例の残りの部分は、Sun WorkShop Visual の外部で行われます。この時点で、Sun WorkShop Visual を終了してもかまいません。

生成されたファイルのうち、次の 3 つのファイルについて説明します。

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 に含まれていることを確認します。

    コンパイルの前に設定の詳細を確認するには、「メインユーザーガイドのコードの 生成」に関する章を参照してください。

    31. コマンドプロンプトから

	make

    と入力してクライアントアプリケーションを構築し、

	make server

    と入力してサーバーアプリケーションを構築します。

    「server_c」ディレクトリ全体を他の場所に移動してコンパイルすることもできま す。その際はメークファイルもコピーしてください。メークファイルでは、ディレクトリ「server_c」がメ ークファイルの下のディレクトリにあるものと想定しています。

    32. Sun WorkShop Visual 再現機能を使用する際のように、サーバーアプリケーション (「server_c」ディレクトリの「 tutorial 」という名前) を URL フィールドで指定された位置に移動します。

    33. クライアントアプリケーション (生成ディレクトリ内の「 tutorial 」という名前) を実行します。

    トグルをオンにした状態と、オフにした状態でボタンを押してみてください。テキ ストボックスにメッセージが表示されます。このメッセージはサーバーによって生成されます。サーバーは 、最初にトグルの値を検査しています。これは簡単な例ですが、ここで示す構造は簡単に拡張できます。

一歩進んだ学習

この学習を終了したら、thin クライアント用とインターネット用のスマートコードのさらに高度な機能を試してみることもできます。Su n WorkShop Visual のパッケージには、ユーザー用の学習例を実行する Sun WorkShop Visual 再現スクリプト実行用の命令を含んだ HTML ファイルが付属しています。学習が行われる様子を見て、その結果を確認してください。この学習例を実行 するには、HTML ブラウザで以下のファイルを開きます。

    1. $VISUROOT/lib/locale/<YourLocale>/sc/timex.html
    このファイルでは、自動リモート更新によるアプリケーションの作成方法を示す「サーバーにプッシュ」学 習について説明します。

    2. $VISUROOT/lib/locale/<YourLocale>/sc/parsex.html
    このファイルでは、Web ページを取り出して解析するアプリケーションの作成方法について説明します。

    注 - VISUROOT は Sun WorkShop Visual のインストールディレクトリであり、<YourLocale> は使用しているロケールの名前です。

thin クライアントのサーバーコールバック

「thin クライアント」用スマートコードのコールバックを含んでいるデザインからコードを生成すると、Sun WorkShop Visual は、その生成コードを、すべてのユーザーインタフェースコードを含む thin クライアントアプリケーションと、スマートコードのコールバックを含むサーバーに分割します。このサー バーは CGI スクリプトであるため、通信の手段として WWW の規格を使用します。HTTP を使用してクライアントとサーバー間で交信するコードも生成されます。

「thin クライアント」コールバックが定義された場合に Sun WorkShop Visual が生成するアプリケーションの構造図を図 17-6 に示します。サーバー内のスマートコードのコールバックに加えて、アプリケーションのクライアント側に はスタブも生成されるため、データがサーバーに送信される直前と直後に必要な操作を実行することができ ます。

サーバー内にあるスマートコードのコールバックには、グループへのハンドルがあ ります。これは、コールバックの定義時に指定されたグループです。グループによって、クライアントとサ ーバー間でデータを受け渡す手段が設けられ、サーバーにインタフェースコンポーネントへのアクセス権が 与えられます。

 

    図 17-6 thin クライアントのコールバックアプリケーションの構造

サーバーアプリケーション

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 によって提供されるルーチンの代わりに使用されるルーチンの名前。

これらを以下の節で説明します。

 

    図 17-7 「カスタマイズ」ダイアログ

接続

Sun WorkShop Visual は、この節で説明する情報を使用して、ネットワークを介したリンクを確立するためのコードを生成します 。このダイアログには以下のフィールドがあります。

    1. プロキシ・ホスト
    これは、ファイアウォールの保護下にある場合にだけ必要となります。これはコンピュータとインターネッ ト間のコンジットの名前です。

    2. プロキシ・ポート
    これは、ファイアウォールの保護下にある場合にだけ必要となります。これはプロキシ・ホスト上で使用す るポート番号です。

    注 - プロキシに設定する値がわからない場合には、「プロキシの詳細」を参照してください。

    3. URL
    このフィールドだけは必ず入力しなければなりません。これは、HTML 文書や CGI スクリプトの場所を記述する文字列です。この「文書」が何であるかは、(上述のように) 選択した通信の「スタイル」によって決まります。

    • thin クライアント用スマートコードを選択した場合には、おそらく URL は、サーバー側のアプリケーションである CGI プログラムを指します。
    • インターネット用スマートコードを選択しても、受信ハンドラを指定しなかった場 合には、URL は完全に別個のリモートサーバーを指します。そのサーバーからは受信通知だけが送られます。
    • インターネット用スマートコードを選択し、受信ハンドラを指定した場合には、お そらく URL は完全に別個のリモートサーバー (またはそのサーバー上のファイル) を指します。そのサーバーからは特定フォーマットのデータが送られます。

URL は、確立された WWW プロトコルの一部です。

    4. 照会データ
    これは照会文字列です。URL に疑問符 (?) が現われた場合、その残りの部分は、検索エンジンが必要とするような、文書やその内容を照合するための アルゴリズムとみなされます。この文字列の解釈はサーバーに依存します。Sun WorkShop Visual は、疑問符文字を追加してから、その照会文字列を URL に追加します。

    5. サーバープッシュ
    これはトグルであり、これを選択すると、サーバーから非同期入力を受け付ける用意ができたことを Sun WorkShop Visual に通知することになります。つまり、データは (要求の後ではなく) 用意ができた時点でクライアントアプリケーションに送られることになります。

URL ライブラリ

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 に割り当てられた文字列を使用します。ロケールの例を次に示します。

  • C (英語用)
  • ja (日本語用)

プロキシの詳細

ネットワークプロキシは、ファイアウォールを通じてコンピュータ (またはイントラネット) をインターネットに接続するコンジットです。ファイアウォールは、外部からコンピュータへの不正なアク セスを防止する「セキュリティスクリーン」です。ファイアウォールの保護下からインターネットに接続す るには、プロキシ・ホストとプロキシ・ポートを指定する必要があります。これらについてまだご存知でな い場合には、以下のどちらかを行なってください。

    1. システム管理者に問い合わせる。ネットワーク、電子メール、およびインターネットの接続を行なった担当 者がいるはずです。

    2. Web ブラウザの設定を調べる。インターネットに接続するには、プロキシを使用する必要があります。この詳細 については次の段落で説明します。

    Web ブラウザ内のどこか (「オプション」、「設定の変更」または「構成」の下など) に、ネットワーク設定を指定できるダイアログがあります。このダイアログを使用すれば、プロキシを使用 する必要性の有無、および使用する場合にはプロキシが何であるかをブラウザに通知できます。ここには複 数のオプションがあります。

    1. プロキシを使用しない。この場合には、Sun WorkShop Visual の「カスタマイズ」ダイアログにプロキシを指定する必要はありません。

    2. プロキシが、ダイアログまたはサブダイアログに手作業で指定されている。この場合には、指定されている プロキシを使用します。プロキシを選択できる場合には、HTTP プロキシを使用します。

    3. 構成ファイルの URL が、プロキシの自動設定用に指定されている。この場合には、構成ファイルで指定されたプロキシを調べま す。

定数、変数、または関数

「プロキシ・ホスト」、「プロキシ・ポート」、「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 」に割り当てることができます。

 

    図 17-8 関数としての「MyProxyHost」

ネットワークとプロトコルについては、参考文献一覧に書籍を紹介しています。

カスタムデータハンドラ

「カスタマイズ」ダイアログの「カスタム・データ・ハンドラ」というセクション には、以下のデフォルトルーチンを無効にするオプションがあります。

    1. 送信
    これはデータをサーバーに送信するルーチンです。

    2. 受信
    これはサーバーからデータを受信するルーチンです。

    3. バンドデータの範囲外
    これは、サーバーから返される予期しない種類のデータを処理するルーチンです。

送信ハンドラや受信ハンドラのテキストボックスを空のままで残すと、Sun WorkShop Visual はデフォルトルーチンを生成します。バンドデータの範囲外の場合には、デフォルトルーチンの名前がテキ ストボックスに表示されます。これらのデフォルトが提供する基本的な機能を使用すれば、独自のハンドラ をすぐに用意しなくても、実働可能な「クライアント - サーバー」アプリケーションを作成できます。以下の項では、独自のハンドラの記述に役立つ情報に加えて 、デフォルトルーチンの内容について簡単に説明します。

送信ハンドラ

デフォルトでは、Sun WorkShop Visual は、サーバーにデータを送信するルーチンを生成します。このルーチンは以下の動作を行います。

  • サーバーへの出力ストリームを開く
  • MIME ヘッダーを出力する
  • グループの各コンポーネントを連続した HTTP オブジェクトとして出力する
  • MIME エンドを出力する

「カスタマイズ」ダイアログで送信ハンドラを指定した場合には、上述のルーチン は呼び出されません。その代わりに、ユーザーのルーチンが呼び出されます。ユーザーのルーチンは、整数 を返すものとして定義されます。また、次の順序で 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 クライアント用スマートコードの場合には、コールバックはサーバー内のルーチンの名前です。インターネ ット用スマートコードの場合には、これはクライアントアプリケーション内のコールバックの名前です。

Sun WorkShop Visual が提供する短縮形の getter や setter により、「カスタマイズ」ダイアログで動的なカスタマイズを行うことができます。この短縮形では、スプ レッドシート表記規則 (「@」記号) を使用して「…の内容」を表します。たとえば、

@text1

では、「指定したグループでの text1 というウィジェットの内容」を意味します。指定したグループとは、「コールバック」ダイアログで指定し たグループです。「接続」領域のフィールド (URL とプロキシ) でこの表記法を使用すると、コントロールの内容が取り出されます。これを「受信ハンドラ」フィールドで 使用した場合には、text1 の内容にサーバーから受信したデータを設定するものとみなされます。

「試行」の学習

「試行」ボタンの使用方法を次の例に示します。ここでは、WWW を使用してリモート Web サイトにアクセスし、Web ページを読み込みます。この学習をすべて実行するには、Web サーバーを実行している必要があります。

    1. 図 17-9 に示す階層を作成します。これは、シェル -> フォーム -> {ボタン、テキストフィールド、テキスト} で構成されています。

 

    図 17-9 「試行」の例の階層

    2. テキストフィールドとテキストウィジェットを含む、Group0 というグループを作成し、テキストフィールドを非公開にします。

    これを図 17-10 に示します。

 

    図 17-10 「試行」の例のグループ

    3. button1 の「コールバック」ダイアログを表示します。

    4. 図 17-11 に示すように、「doit」というインターネット用スマートコードのコールバックを設定します。

    このコールバックは、最初にカスタマイズする必要があるため、まだ追加しないで ください。

    図 17-11 「試行」例のサーバーコールバック

    5. 「カスタマイズ」ボタンを押します。

    6. 「カスタマイズ」ダイアログでは、図 17-12 に示すように、ウィジェット text1 の内容に対する getter 短縮表記を「URL」フィールドに書き込みます。

    この短縮表記は「 @text1 」となります。

    7. 図 17-12 に示すように、ウィジェット text2 に対する短縮表記を「受信ハンドラ」フィールドに書き込みます。

    この短縮表記は「 @text2 」となります。

 

    図 17-12 「試行」の例の「カスタマイズ」ダイアログ

    参照 - ファイアウォールの保護下にある場合には、プロキシフィールドも設定する必要が あります。詳細については 「プロキシの詳細」を参照してください。

    8. 「了解」を押して、設定内容を保存し「カスタマイズ」ダイアログを閉じます。

    9. 「コールバック」ダイアログに戻って、「試行」トグルをオンにします。

    10. 新しいコールバックを追加して「コールバック」ダイアログを閉じます。

    11. ダイナミックディスプレイの「text1」というテキストフィールドで、次の URL を入力します。

    http://www.sun.co.jp/workshop
    

    12. ダイナミックディスプレイで button1 を押します。

    テキストフィールドに入力された Web サイトのフロントページが text2 に表示されます。

    13. text1 で他の URL を試し、もう一度 button1 を押します。

    有効な URL を入力していれば、text2 は URL の参照先となる HTML ページを表示します。たとえば、(存在する場合は) イントラネットの URL を入力してみてください 。

    この例では、Sun WorkShop Visual の内部から実際のサーバーに動的な接続が行われています。

生成コード

ツールキットに依存しないラッパーとグループオブジェクトの定義を含むコードフ ァイルは、「コールバック」ダイアログからスマートコードが選択された場合に生成されます。「thin クライアント」と「インターネット」の場合には、「取得と設定」の場合よりも多くのファイルが生成され ます。その理由は、グループの getter と setter に加えて、サーバーとの通信用のコードもすべて生成されるためです。さらに、「thin クライアント」の場合には、サーバー側のアプリケーションも生成されます。

これらのファイルの一部は、特別な名前のディレクトリに置かれます。それらのデ ィレクトリは、Sun WorkShop Visual によって生成され、「コード生成」ダイアログで選択したディレクトリの下位に置かれます。他のファイル は、選択されたディレクトリに置かれます。thin クライアント用スマートコードの学習のために生成されたファイルを、図 17-5 に示します。これによって、生成されたファイルとサブディレクトリの仕組みがわかります。

最も重要なことは、編集が必要になる可能性のあるコールバックやその他のルーチ ン (カスタムデータハンドラ、前処理および後処理ルーチン、その他のデータ関数など) を簡単に見つけ出せるように、まとめておくことです。他のコードファイルを変更する必要はありません。

生成される内容は、コールバック用に「取得と設定」用スマートコードだけを要求 したのか、それとも「thin クライアント」や「インターネット」を要求したのかによって異なります。それぞれの場合に生成されるコ ードを以下に説明します。

グループ

グループを使用し、スマートコードを使用していない場合には、基本ソースファイ ルにウィジェットの配列が定義されます。

しかし、スマートコードがない場合には、ユーザーズガイドの第 7 章「コードの生成」で記述したファイルだけが生成され、新しいディレクトリは作成されません。

取得と設定の生成コード

コードファイルを生成する際に、Sun WorkShop Visual は、選択された言語に適した拡張子を使用します。

    1. .c は C コード用

    2. .cpp は C++ コード用

    3. .java は Java コード用

以下の例では、単に説明のために「.c」を使用します。

1 つ以上のコールバックに対して「取得/設定」スタイルのスマートコードを選択した場合には、以下のファ イルは、「コールバック」ダイアログの最初の項目で指定されたディレクトリに生成されます。

  • Makefile
    Sun WorkShop Visual が生成した標準のメークファイルであり、新しいサブディレクトリを使用して構築を行うように記述されて います。
  • sc_groups_c.h
    このヘッダーファイルには、関連するサブディレクトリの適切なヘッダーファイルが含まれています。また 、sc_data_t データ構造体も定義します。この構造体を指すポインタは、スマートコードのコールバックとデータハンド ラに渡されます。
  • untitled.c
    メインソースコードファイルです。
  • untitled.h
    メインヘッダーファイルです。
  • untitled_stubs.c
    ここにコールバックスタブが生成されます。
  • index.html
    生成されたすべてのファイルを表示し、簡単に説明する HTML ファイルです。ファイルとサブディレクトリの内容を調べるには、Web ブラウザやその他の HTML ブラウザを使って参照してください。

さらに、以下のサブディレクトリが作成されます。

  • callouts_c
    関数として定義されているグループ用に定義された「その他のデータ」ごとのファイルが含まれています。
  • groups_c
    定義したグループごとのソースファイル、ヘッダーファイル、および HTML ファイルが含まれています。より一般的なヘッダーファイルも含まれています。
  • motif_c
    グループ内のコンポーネントごとの Motif「ラッパー」が含まれています。このディレクトリには、グループごとの HTML ファイルも含まれています。
  • 注 - 各ディレクトリ名の最後にある「c」は、コード生成用の言語として C が選択されたことを示します。他の言語が選択された場合には、この表記は言語に応じて変化します。

取得と設定用ユーザーコードの追加先

「取得/設定」用スマートコードでは、以下のスタブファイルが生成されます。

  • <プログラム名>_stubs.cpp (<プログラム名>_stubs.c)
    ユーザーが定義したコールバックを含んでいる従来のスタブファイルです。このファイル内のスタブは、ツ ールキットと強い関連性を持っており、グループやスマートコードデータにはアクセスできません。ここに は、ツールキット固有のコードだけを追加してください。このファイルは、「コード生成」ダイアログで指 定されたディレクトリに生成されます。
  • <コールバック名>_user.cpp (<コールバック名>_user.c)
    Callouts サブディレクトリに置かれます。取得と設定用のスマートコードを使用する場合には、これには <コールバック名>_user というメインコールバックスタブも含まれています。このコールバックには、ツールキット固有のコードは ありません。
  • 「その他のデータ」関数のファイル
    グループエディタの「その他のデータ」領域を表します。その他のデータを追加してそれを「関数」と定義 した場合には、ファイル名としてその他のデータの名前を使用してファイルが生成されます。このようなフ ァイルには、それぞれ get_<その他のデータ> および set_<その他のデータ> という 2 つのルーチンが含まれています。ここで、 <その他のデータ> は、グループエディタでユーザーが指定した名前です。C++ と Java の場合には、これらのルーチンは「その他のデータ」関数の名前を使用して定義されたクラスのメソッドで す。これらのルーチンの使い方については、「その他のデータ − 関数」を参照してください。

「取得/設定」用スマートコードの学習用に生成されたファイルの図式表示を、図 16-10 に示します。

thin クライアントとインターネットの生成コード

スマートコードのコールバックを含んでいるデザインからコードを生成すると、「取得と設定の生成コード」で説明したファイルとディレクトリがすべて生成されます。さら に、Sun WorkShop Visual は以下のディレクトリを作成します。

  • http_c
    HTTP プロトコルを使用して URL を解析し、データを送受信するためのソースコードが含まれています。
  • server_c
    サーバー側のアプリケーションです。

ディレクトリ「server_c」には、ユーザーインタフェースを含んでいる thin クライアントアプリケーションに接続するサーバーを構築するために必要なファイルがすべて含まれていま す。このディレクトリ全体を取り出して構築し、リモート Web サーバー上で実行することができます。

最上位ディレクトリの Makefile には、クライアント (ユーザーのデザイン) とサーバーの両方を構築するための規則が含まれています。クライアントを構築するには、コマンド行から

make

と入力するだけです。サーバーを構築するには、コマンド行から

make server

と入力します。

    注 - サーバーコードをどこかに移動する場合には、Makefile も忘れずに移動してください。

thin クライアントとインターネット用コードの追加先

以下の種類のスタブは、thin クライアント用やインターネット用のスマートコードのコールバックを作成するときに生成できます。これ らのいくつかは任意指定であり、「カスタマイズ」ダイアログとグループエディタでルーチンを指定したか どうかによって選択します。

  • ツールキットに依存するクライアントコールバック
  • ツールキットに依存しないクライアントコールバック
  • サーバーコールバック (thin クライアント用スマートコード専用)
  • 事前条件ルーチンと事後条件ルーチン
  • インターネット接続関数
  • グループの「その他のデータ」関数

以下、これらを個別に説明します。

ツールキットに依存するクライアントコールバック

従来の、ツールキットに依存するクライアントコールバックを含んでいるファイル は次のとおりです。

  • untitled_stubs.c (C++ コードを生成する場合には untitled_stubs.cpp)

これは、スマートコードの使用とは無関係に、任意のコールバックの定義時に生成 されるコールバックファイルです。thin クライアント用またはインターネット用のスマートコードのコールバックを定義するとき、Sun WorkShop Visual は、このファイルにクライアント側のコールバックを自動生成します。これにはツールキットに依存するコ ードが含まれています。ここには、ツールキットを使用するコードだけを追加してください。

ツールキットに依存しないクライアントコールバック

ツールキットに依存しないクライアントコールバックを含んでいるファイルは次の とおりです。

  • <コールバック>_cs.c (C++ コードを生成する場合は <コールバック>_cs.cpp)

thin クライアント用またはインターネット用のスマートコードのコールバックごとに、 Callouts サブディレクトリにファイルが生成されます。ファイル名としては、コールバックの名前に「 _cs 」(クライアントサーバーを表す) を付加した名前を使用します。このファイルにはコールバックルーチン (C++ と Java の場合にはメソッド) が含まれています。これには、グループにアクセスできる、ツールキットに依存しないコードが含まれてい ます。

サーバーコールバック

サーバーコールバックは、次のディレクトリに置かれています。

  • server_c
    このサブディレクトリには、定義したコールバックごとにソースファイルがあります。このソースファイル にはコールバックと同じ名前が与えられます。

インターネット接続関数

「関数」が選択された場合には、「カスタマイズ」ダイアログの「接続」ごとにフ ァイルが生成されます。各ファイルには、 get_<接続> set_<接続> のルーチンが含まれています。ファイルは、ファイル名として指定する関数の名前を使用して、 Callouts サブディレクトリに生成されます。

「カスタマイズ」ダイアログで指定したカスタムデータハンドラにもファイルが生 成されます。ファイル名は、「カスタマイズ」ダイアログに入力した名前です。

その他のデータ関数

「取得と設定用のユーザーコードの追加先」で説明したように、グループエディタで定義され た「その他のデータ」関数に対してスタブルーチンが生成されます。

「thin クライアント」用スマートコードの学習用に生成されたファイルの図式表示を、図 17-5 に示します。

HTML ファイル

コールバックを探したり、生成されたファイルの内容をよく知るためには、Sun WorkShop Visual によって生成される一連の HTML ファイルが役立ちます。主要なファイルは以下のものです。

  • index.html

最上位ディレクトリ (つまり、「コールバック」ダイアログで指定されたディレクトリ) にあります。

Web ブラウザ (または HTML を読み込める他のソフト) でこのファイルを開くと、図 17-3 に示すように、生成されるファイルの一覧と、それぞれの簡単な説明が表示されます。

 

    図 17-13 Netscape での index.html

他のファイルへのハイパーテキストリンクもあり、これも Sun WorkShop Visual によって生成されたものです。リンク先のファイルには、グループと Motif「ラッパー」ごとに生成されるコードが記述されています。

このファイルには、スマートコードをプログラミングするためのオンライン参考資 料へのリンクも含まれています。この参考資料を直接表示するには、HTML ブラウザで次のファイルを開いてください。

$VISUROOT/lib/locale/<YourLocale>/sc/index.html

ここで、VISUROOT は Sun WorkShop Visual のインストールディレクトリであり、< YourLocale> はユーザーが使用しているロケールです。自分のロケールがわからない場合には、端末ウィンドウに locale と入力してみてください。これによってロケール情報が出力されます。出力の中で LANG に割り当てられた文字列を使用します。ロケールの例を次に示します。

  • C (英語用)
  • ja (日本語用)

前へ 次へ 目次 文書セット ホーム

サン・マイクロシステムズ株式会社
Copyright information. All rights reserved.