%% $OpenXM: OpenXM/doc/OpenXM-specs/control.tex,v 1.1.1.1 2000/01/20 08:52:46 noro Exp $
//&jp \section{コントロールメッセージ (SMObject/TCPIP/Control)}
//&eg \section{Control message (SMObject/TCPIP/Control)} (This section has not been translated.)

/*&jp
\begin{enumerate}
\item
サーバは {\tt SM\_control\_reset\_connection} 
メッセージを受信したら, 現在の計算を中断する.
中断操作は細心の注意をもって行なわないといけない.
サンプルサーバ ({\tt oxmain.c})では, コントロールメッセージの
処理は別のプロセスがおこなっており, SIGUSR1 割り込みをスタックマシンへ
かける.
もしサーバがメッセージの通信中であれば, このコントロールメッセージ
をすぐには実行せず, メッセージ通信を終了するのを待つ.
当然, メッセージを発信中に, このメッセージを送信してもいけない.
(Java 風にいえば, すべての メッセージは synchronized object である.)
また, たとえば file IO なども, 中断をうけてはならない, synchronized な
操作であろう.
クライアントがサーバに controlResetConnection コントロールメッセージを
おくったら, サーバは, 現在の受信バッファをすべてクリアし,
クライアントへ
{\tt OX\_SYNC\_BALL}
を送る.
クライアントは, コントロールメッセージをおくったあと,
待機モードに入り, {\tt OX\_SYNC\_BALL}
をうけとるまですべてのメッセージを読み飛ばす.
クライアントは {\tt OX\_SYNC\_BALL} をうけとったら,
サーバに {\tt OX\_SYNC\_BALL} を送る.
サーバは, 最初の {\tt OX\_SYNC\_BALL} を投げたあと,
待機モードに入り, 
{\tt OX\_SYNC\_BALL}
をうけとるまですべてのメッセージを読み飛ばす.
%% 最後に,  サーバ
%% はすべての操作が終了したことを通知するため,
%% クライアントに
%% {\tt OX\_SYNC\_BALL} を投げる.
\\ Request:
\begin{tabular}{|c|c|}  \hline
{\tt int32 OX\_COMMAND} & {\tt int32 SM\_control\_reset\_connection}  \\
\hline 
\end{tabular}
\\ Result:  
\begin{tabular}{|c|c|}  \hline
{\tt int32 OX\_DATA} & {\tt CMO\_INT32} {\rm result} \\
\hline 
\end{tabular}

@@@

\item
サーバはこのメッセージを受信したらただちにコントロールメッセージへの
返答をおくり, すべてのファイルをクローズして終了する.
\\ Request:
\begin{tabular}{|c|c|}  \hline
{\tt int32 OX\_COMMAND} & {\tt int32 SM\_control\_kill}  \\
\hline 
\end{tabular}
\\ Result:  
Empty \\


\end{enumerate}

\medbreak
\noindent
{\bf 例}: (シリアル番号は省略してある.)\ 
\begin{verbatim}
0  0 2 01 (OX_COMMAND) 
0  0 4 06 (SM_control_reset_connection)
\end{verbatim}

Reset に対する返事.
\begin{verbatim}
0  0 2 02 (OX_DATA)
0  0 0  2 (CMO_INT32)
0  0 0  0 (  0   )
\end{verbatim}


第1のチャンネルでは次の {\tt OX\_SYNC\_BALL} が交換されて同期が
取られる.
\begin{verbatim}
0   0   2   03   (OX_SYNC_BALL)
\end{verbatim}

*/


