- Since
-
- See also
-
文字列データを送受信します。
使い方はValueとほぼ同じです。
コマンドライン
を実行し、文字列を入力すると送信されます。(1つ入力するごとに改行してください)
詳細は webcface-send のページを参照
送信
- 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},
}
}
};
A a_instance;
wcli.text("a").set(a_instance);
受信
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);
ret =
wcfTextGet(wcli,
"a",
"hoge", text, 6, &size);
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を返し、そのデータのリクエストをサーバーに送ります。
- 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 と同様なのでそちらを参照してください