7
|
1 \section{ プログラミング例}
|
|
2
|
|
3 Federated Lindaは以下の様にして通信を行う。
|
|
4
|
|
5 \begin{itemize}
|
|
6 \item public PSXLinda open(String \_host,int \_port)
|
|
7
|
|
8 Linda Serverに対し、接続を行う。引数はホスト名とポート番号をとる。返り値はタプルスペースの番号となる。
|
|
9
|
|
10 \item public PSXReply in(int id)
|
|
11
|
|
12 タプルスペース番号より引数で指定したidのタプルの受け取りを要求する。
|
|
13 受け取りは、返値のPSXReplyをチェックすることにより非同期に行なう。
|
|
14 in では待ち合わせは行なわれない。Call back 形式でタプルを受け取る
|
|
15 ことも出来る。
|
|
16
|
|
17 \item public PSXReply out(int id, ByteBuffer data)
|
|
18
|
|
19 引数で指定したidでByteBuffer内のデータを送信する。
|
|
20
|
|
21 \item public int sync(long mtimeout)
|
|
22
|
|
23 接続しているLinda Serverとタプルの送受信のポーリングを行う。
|
|
24
|
|
25 \end{itemize}
|
|
26
|
|
27 Protocol Engineとはタプルスペースを介してデータをやり取りするEngineである。
|
|
28 二つのサーバー間でやり取りを行う場合、以下のようなプログラムとなる。
|
|
29 \begin{verbatim}
|
|
30 FederatedLinda fdl;
|
|
31 PSXLinda getpsx;
|
|
32 PSXLinda sendpsx;
|
|
33 PSXReply in;
|
|
34 ByteBuffer data = ByteBuffer.allocate(10);
|
|
35
|
|
36 //通信を初期化する
|
|
37 fdl = FederatedLinda.init();
|
|
38 //データを取ってくるホストと受け渡すホストとの接続開始
|
|
39 getpsx = fdl.open("cs100",10000);
|
|
40 sendpsx = fdl.open("cs101",10001);
|
|
41 //取ってくるホストからinを指定してデータを取得
|
|
42 in = getpsx.in(10)
|
|
43 data = in.getData();
|
|
44 //受け渡すホストに対しデータとidを指定して同期
|
|
45 sendpsx.out(10,data);
|
|
46 fdl.sync();
|
|
47 \end{verbatim}
|
|
48
|
|
49 callback のAPIも用意されていて、{\tt fdl.sync() } した時に、
|
|
50 {\tt in, rd} の結果が戻っていれば、そのcallback が実行される
|
|
51 ようになっている。
|
|
52
|