ddsat_wait_result
- DDSATには、同期型のwaitモードと、非同期型の no waitモードがありますが、nowaitモードにて非同期型で実行された複数のトリガープログラムの、それぞれの演算結果が揃った時点で起動させることができる機能が用意されています。
- それが、この ddsat_wait_resultコマンドで、文字通り結果が揃うのを待って起動させる機能となっています。
- 例えば、A3=A1+A2を計算するトリガープログラムA、B3=B1+B2を計算するトリガープログラムB、C3=C1+C2を計算するトリガープログラムC の3つがあって、これらの3つのトリガープログラムは、nowaitモードでの非同期型で起動して並行して稼働し、それらの結果が全て揃っから、A3+B3+C3を計算するトリガープログラムを登録する機能が、このddsat_wait_resultコマンドとなっています。
//----trigger program Aの登録
let json1={
pno : 7 ,
key : "abcdefghijklmopqr" ,
trigger: {
tr_prog:"http://my_server/a_prg.php",
tr_id:"my_a_prg" } ,
area: x_prog.php
field:{ A1:"i",
A2:"i"
A3:"o"
}
};
let resul1=send_api(json1);
//----trigger program Bの登録
let json2={
pno : 7 ,
key : "abcdefghijklmopqr" ,
trigger: {
tr_prog:"http://my_server/b_prg.php",
tr_id:"my_b_prg" } ,
area: x_prog.php
field:{ B1:"i",
B2:"i"
B3:"o"
}
};
let resul2=send_api(json2);
//----trigger program Cの登録
let json3={
pno : 7 ,
key : "abcdefghijklmopqr" ,
trigger: {
tr_prog:"http://my_server/c_prg.php",
tr_id:"my_c_prg" } ,
area: x_prog.php
field:{ C1:"i",
C2:"i"
C3:"o"
}
};
let resul3=send_api(json3);
}
//---ddsat_triggerを実行する関数
async function send_api(json_para){
try {
const response = await fetch("https://ddsat_svr:8081/ddsat_trigger", {
method: "POST",
headers: {"Content-Type": "application/json",},
body: JSON.stringify(json_para)});
const result = await response.json();
let pno=result.pno; //---会話番号
let mess1=result.message; //---ddsatからのメッセージ。エラーなしの場合は"OK"。
if(mess1!="OK"){
alert(" ddsat_trigger error message="+mess1);
}
} catch (error) {
console.error(" ddsat post error :", error);
}
}
3つのトリガープログラムの登録が終わったならば、3つの演算をする例えば、phpプログラムを実行し、その中からddsat_resultコマンドをnowaitモードで呼びます。
<?php
//----A1とA2をもらって、A3を計算する。
$jsonpara=$_POST["json"];
$jsonvec=json_decode($jsonpara, true);
$pno=$jsonvec['pno']; //-----会話番号
$key=$jsonvec['key']; //-----会話key
$A1==$jsonvec['A1']; //-----A1の値
$A2==$jsonvec['A2']; //-----A2の値
$A3=$A1+$A2; //-----A1とA2の合値をA3に代入します
$opt = array(
'http'=>array(
'method'=>"POST",
'header' => 'Content-type: application/json',
'content'=> '{"pno":'.$pno.',
"key":"'.$key.'",
"mode":"nowait",
"tr_id":"my_a_prg",
"server":"my_server",
"area":"x_prog.php",
"field":{"A3":"'.$A3.'"}}'
)
);
$urla="http://ddsat_svr:8081/ddsat_result";
$context = stream_context_create($opt);
// 上で設定した HTTP ヘッダを使用してファイルをオープンします
$out1 = file_get_contents($urla, false, $context);
echo("----ddsat_result A3の通知 終わり ");
?>
以上は、A1+A2=A3を求めるphpのプログラムですが、同様に、B1+B2=B3を求めるプログラム、C1+C2=C3を求めるプログラムを実行して、それらの3つが終わるのを待って起動されるプログラムの登録を行います。その例を以下に示します。
async function wait_result(){
json_para={
pno: pno,
key: keyno,
mode: "wait",
trigger:"http://my_server/d_prog.php",
server:"my_server",
area:"x_prog.php",
field:{
A3: "i",
B3: "i",
C3: "i"
}
};
try {
const response = await fetch("https://ddsat_svr:8081/ddsat_wait_result", {
method: "POST",
headers: {"Content-Type": "application/json",},
body: JSON.stringify(json_para)});
const result = await response.json();
let pno=result.pno; //---会話番号
let mess1=result.message; //---ddsatからのメッセージ。エラーなしの場合は"OK"。
if(mess1!="OK"){
alert(" ddsat_trigger error message="+mess1);
}
} catch (error) {
console.error(" ddsat post error :", error);
}
上記のプログラムを実行すると、A3,B3,C3の値が、それぞれの同時並行で実行されたa_prog.php、b_prog.php、c_prog.phpの中から終了時点で呼ばれたddsat_resultコマンドで通知された演算結果である、それぞれA3,B3,C3の全てが揃った時点で、d_prog.phpが起動されます。従って、d_prog.phpは、あらかじめmy_serverに登録しておく必要があります。そして、これらが揃った時点で、d_prog.phpが起動されて、このd_prog.phpの中で計算されたA3+B3+C3の値が、javascriptのfetchコマンドにて得られることになり、その後に、その結果の処理が可能となります。
他のコマンドへのリンク
・ DDSATとは何か(クリックでジャンプ)
・ triggerコマンド(クリックでジャンプ)
・ change コマンド(クリックでジャンプ)
・ resultコマンド(クリックでジャンプ)