WebCFace 2.5.2
Web-based Communication Framework & Dashboard-like UI
Loading...
Searching...
No Matches
5-2. Text

Since
See also

文字列データを送受信します。

使い方はValueとほぼ同じです。

コマンドライン

webcface-send -t text

を実行し、文字列を入力すると送信されます。(1つ入力するごとに改行してください)

詳細は webcface-send のページを参照

送信

  • C++ Client::text からTextオブジェクトを作り、 Text::set() でデータを代入し、Client::sync()することで送信されます

    wcli.text("hoge").set("hello");

    set() の代わりに代入演算子(Text::operator=)でも同様のことができます。

    wcli.text("hoge") = "hello";
  • C
    Since
    1.7
    null終端の文字列は wcfTextSet, (2.0 wcfTextSetW) で送信できます
    wcfTextSet(wcli, "hoge", "hello");
    wcfStatus wcfTextSet(wcfClient *wcli, const char *field, const char *text)
    文字列を送信する(null終端)
    Definition text.cc:90
    null終端でない場合は wcfTextSetN, (2.0 wcfTextSetNW) が使えます
    wcfTextSetN(wcli, "hoge", "hello", 5);
    wcfStatus wcfTextSetN(wcfClient *wcli, const char *field, const char *text, int size)
    文字列を送信する
    Definition text.cc:97
  • JavaScript Client.text からTextオブジェクトを作り、 Text.set() でデータを代入し、Client.sync()することで送信されます。
    wcli.text("hoge").set("hello");
  • Python Client.text からTextオブジェクトを作り、 Text.set() でデータを代入し、Client.sync()することで送信されます。
    wcli.text("hoge").set("hello")
Note
  • 1.10 1.6 2.0 Textの内部データは文字列だけでなく数値やbool値も型を保持して扱えるようになっています。 (ViewのInputRefで内部的に使用するため)
  • C++では Text::set, Text::get で ValAdaptor 型を経由して文字列以外の型のデータを文字列と同様に送信、受信できます。
    • 2.0 文字列以外の型にアクセスするインタフェースは Variant という別のクラスに分離しました。 Textクラスから文字列以外のデータ型にはアクセスできません。
  • PythonもC++と同様Variantクラスからアクセスできます。
  • JavaScriptでは Text.setAny, Text.getAny 関数を使うと文字列以外のデータを処理できます。
(deprecated, ver1.10で削除) C++でwebcface::Text::Dictを使った値のセット

webcface::Text::Dict オブジェクトを使うと複数の値をまとめて送ることができます。

struct A {
std::string x, y;
operator webcface::Text::Dict() const {
return {
{"x", x},
{"y", y},
// Value::Dictと同様、入れ子にもできます
}
}
};
A a_instance;
wcli.text("a").set(a_instance); // Dictにキャストされる

受信

  • C++ Member::text() でTextクラスのオブジェクトが得られ、 Text::tryGet() で値のリクエストをするとともに受信した値を取得できます。

    例えばfooというクライアントのhogeという名前のデータを取得したい場合は次のようにします。

    std::optional<std::string> hoge = wcli.member("foo").text("hoge").tryGet();
    • 値をまだ受信していない場合 tryGet() はstd::nulloptを返し、そのデータのリクエストをサーバーに送ります。
      • リクエストは 次にClient::sync()したときに 1.2自動的に別スレッドで送信されます。
      • そのデータを受信した後(4-1. Clientを参照)、再度tryGet()することで値が得られます。
    • Text::get() はstd::nulloptの代わりに空文字列を返します。
    • また、std::string にキャストすることでも同様に値が得られます。

    1.7 Text::request() で明示的にリクエストを送信することもできます。

    2.0 ワイド文字列は tryGetW(), getW() で得られます。 また、std::wstring にキャストすることでも得られます。

    std::ostreamにTextを直接渡して表示することもできます。

    std::cout << "hoge = " << wcli.member("foo").text("hoge") << std::endl;
    Warning
    • 1.11 Textオブジェクト同士を比較するとTextが参照するデータの名前が一致するかどうかで判定されます。 (Valueなど他のデータ型でも同様です。)
    • 値を比較したい場合は明示的にキャストするかget()などを呼んでください。

  • C

    Since
    1.7

    wcfTextGet, (2.0 wcfTextGetW) に受信した文字列を格納するバッファとそのサイズ(null終端を含む)を指定します。

    例えばfooというクライアントのhogeという名前のデータを取得したい場合は次のようにします。

    char text[6];
    int size;
    int ret = wcfTextGet(wcli, "a", "hoge", text, 6, &size);
    // ex.) ret = WCF_NO_DATA
    // few moments later,
    ret = wcfTextGet(wcli, "a", "hoge", text, 6, &size);
    // ex.) ret = WCF_OK, text = "hello\0", size = 5
    wcfStatus wcfTextGet(wcfClient *wcli, const char *member, const char *field, char *text, int size, int *recv_size)
    文字列を受信する
    Definition text.cc:105
    • sizeに受信した文字列の長さ、バッファに受信した文字列が入ります。
      • 文字列がバッファの長さを超える場合は、(バッファのサイズ - 1)文字とnullが格納されます。
    • 値をまだ受信していない場合 WCF_NOT_FOUND 2.0 WCF_NO_DATA を返し、そのデータのリクエストをサーバーに送ります。
      • そのデータを受信した後(4-1. Clientを参照)、再度wcfTextGet()することで値が得られます。
    Note
    member名に空文字列またはNULLを指定すると自分自身を指します。
  • JavaScript Member.text() でTextクラスのオブジェクトが得られ、 Text.tryGet() などで値のリクエストをするとともに受信した値を取得できます。

    例えばfooというクライアントのhogeという名前のデータを取得したい場合は次のようにします。

    const hoge: string | null = wcli.member("foo").text("hoge").tryGet();
    • 値を受信していない場合 tryGet() はnullを返し、そのデータのリクエストをサーバーに送ります。
      • リクエストは 次にClient.sync()したときに 1.1自動的に別スレッドで送信されます。
      • そのデータを受信した後(4-1. Clientを参照)、再度tryGet()することで値が得られます。
    • get() はnullの代わりに空文字列を返します。

    1.1 Text.request()で明示的にリクエストを送信することもできます。

  • Python Member.text() でTextクラスのオブジェクトが得られ、 Text.try_get() などで値のリクエストをするとともに受信した値を取得できます。

    例えばfooというクライアントのhogeという名前のデータを取得したい場合は次のようにします。

    hoge = wcli.member("foo").text("hoge").try_get()
    • 値を受信していない場合 try_get() はNoneを返し、そのデータのリクエストをサーバーに送ります。
      • そのデータを受信した後(4-1. Clientを参照)、再度try_get()することで値が得られます。
    • get() はNoneの代わりに空文字列を返します。

    Text.request()で明示的にリクエストを送信することもできます。

時刻

Text::time() でその値が送信されたとき(そのMemberがsync()したとき)の時刻が得られます。
1.7 1.6 Member::syncTime() に統一しました。詳細は 5-1. Value を参照

Entry

Valueと同様、データ自体を受信しなくてもデータが存在するかどうかは取得することができます。 使い方は Value と同様なのでそちらを参照してください

Event

受信したデータが変化したときにコールバックを呼び出すことができます。(TextChange イベント) コールバックを設定するとget()やrequest()を呼ばなくても自動的にその値がリクエストされます。

また、データが変化したどうかに関わらずそのMemberがsync()したときにコールバックを呼び出したい場合は onSync() が使えます

使い方は Value と同様なのでそちらを参照してください

Previous Next
5-1. Value 5-3. Func