view 4.tex @ 7:624a45b40bfe

done.
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sat, 28 Mar 2009 13:45:19 +0900
parents
children
line wrap: on
line source

\section{ プログラミング例}

Federated Lindaは以下の様にして通信を行う。

\begin{itemize}
\item public PSXLinda open(String \_host,int \_port)

Linda Serverに対し、接続を行う。引数はホスト名とポート番号をとる。返り値はタプルスペースの番号となる。

\item public PSXReply in(int id)

タプルスペース番号より引数で指定したidのタプルの受け取りを要求する。
受け取りは、返値のPSXReplyをチェックすることにより非同期に行なう。
in では待ち合わせは行なわれない。Call back 形式でタプルを受け取る
ことも出来る。

\item public PSXReply out(int id, ByteBuffer data)

引数で指定したidでByteBuffer内のデータを送信する。

\item public int sync(long mtimeout) 

接続しているLinda Serverとタプルの送受信のポーリングを行う。

\end{itemize}

Protocol Engineとはタプルスペースを介してデータをやり取りするEngineである。
二つのサーバー間でやり取りを行う場合、以下のようなプログラムとなる。
\begin{verbatim}
FederatedLinda fdl;
PSXLinda getpsx;
PSXLinda sendpsx;
PSXReply in;
ByteBuffer data = ByteBuffer.allocate(10);

//通信を初期化する
fdl = FederatedLinda.init();
//データを取ってくるホストと受け渡すホストとの接続開始
getpsx  = fdl.open("cs100",10000);
sendpsx = fdl.open("cs101",10001);
//取ってくるホストからinを指定してデータを取得
in = getpsx.in(10)
data = in.getData();
//受け渡すホストに対しデータとidを指定して同期
sendpsx.out(10,data);
fdl.sync();
\end{verbatim}

callback のAPIも用意されていて、{\tt fdl.sync() } した時に、
{\tt in, rd} の結果が戻っていれば、そのcallback が実行される
ようになっている。