Smart CODE
生成済みコードに関するオンラインガイド

名前
ServerCallbackProc - サーバーに書き込まれた thin クライアント用コールバック
概要
thin クライアントアプリケーションは、クライアント-サーバーアプリケーションで、クライアントにはインタフェースコードが、サーバーには (インタフェースコードはまったく存在せず) アプリケーションコードが置かれます。これは、アプリケーション処理の中にはクライアントで最適に処理されるものがある、というパフォーマンス上の理由です。リモートサーバーはインタフェースへのアクセスを一切行わず、そこに送信されたデータにだけアクセスします。

シングルサーバープログラムは、X-Designer によって生成された Motif、MFC、または Java の thin クライアントに使用できます。また、Web ブラウザフォームやアプレットインタフェース、およびグラフィカルでないクライアントで使用できる可能性もあります。

すでに取得/設定スマートコードコールアウトを使用して開発を行なっている場合、作成したコードは、ツールキットのあらゆる前提条件からすでに独立しています。最小限の変更で、アプリケーションからサーバーのコールバックに処理を移動することができます。

クライアント側の a X-Designer インターネット thin クライアントアプリケーションは、ユーザーがコーディングする必要はありません。クライアント側を微調整する必要がある場合は、precondition (事前条件) および postcondition (事後条件) メカニズムを使用するか、サーバーの、またはサーバーからのデータ転送を取り消すことができます。

ServerCallbackProc は、サーバーコードの一部として生成されるコールバックスタブです。これにはグループ内の全メンバーの特性値も含めた、サーバー側のグループオブジェクトに対する完全なアクセス権があります。クライアント側では、ユーザーインタフェースコントロールのグループですが、サーバー側では、データ要素のグループです。

個々のデータ要素は、クライアント側のコントロールの設定または値に対応しています。トグルの状態、テキストフィールドの値などをチェックすることができます。クライアントインタフェースのどの部分の状態も (直接) 制御したり調査したりすることはできません。さらに微調整が必要な場合は、グループにその他の要素を追加し、使用する必要のある機能を処理することができます。

サーバーに適したデータ構造とユーザーインタフェースコントロールのセットが 1 対 1 で対応していない場合、コントロールを非公開にして、グループ内のその他のデータ要素を使用してデータを処理することができます。この方法によって、サーバーに送信されるデータをユーザーが完全に制御できるようになり、データの送信方法がインタフェースに再度適用されます。

サーバー側のアプリケーションコードは、一度構築してインストールすれば、GoLive! 機能を使用して X-Designer 内でクライアント側の開発をさらに進めることができます。この場合、X-Designer で開発するインタフェースは、すべての手順を含んだ thin クライアントで、コンパイルサイクルは必要ありません。

形式
C
typedef int (*ServerCallbackProc)( sc_data_t *)
        sc_data_t * data;

/* 例 */
int
CALLBACKNAME ( data)
       sc_data_t * data; 
{
       GROUPNAME_t * g = (GROUPNAME_t*)data->group;

       return 1; 
}
C++
class METHODNAME_c: public sc_data_c
{
        public:
                int doit();
                static METHODNAME_c * new_METHODNAME_c();

                GROUPNAME_c * getGroup();
};
Java
このリリースでは使用できません。
入力
戻り値
処理後にデータがクライアントに再送される場合、ゼロ以外。
その他の注意
GROUPNAME、CALLBACKNAME、および METHODNAME は、生成済みのコードでは、それぞれグループ、コールバック、またはメソッドに指定した名前に置き換えられます。
説明
使用法
シングルサーバー側コールバックの例
言語 使用法
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;
}
C++
class doit_method_c: public sc_data_c
{
        int doit()
        {
                group0_t * g = getGroup();
                if (g->toggle1->get())
                        g->text1->set("Hallo World");
                else
                        g->text1->set("Farewell Cruel World");
                return 1;
        }
};
Java
このリリースでは使用できません。
     
クライアントからの次のポーリングを要求するコールバック
言語 使用法
C
#include <time.h>

int
doit_callback  ( sc_data_t * data)
{
        group0_t * g = (group0_t*)data->group;
        time_t t;

        time( &t);

        SC_SET(g->text1,ctime(&t));

        data->poll = 10; /* 10 秒ごとに試行 */

        return 1;
}
C++
#include <time.h>

class doit_method_c: public sc_data_c
{
        int doit()
        {
                group0_t * g = getGroup();
                time_t t;

                time( &t);

                g->text1->set(ctime(&t));

                setPoll(10); /* 10 秒ごとに試行 */

        return 1;
};
Java
このリリースでは使用できません。
     
関連項目