===================================================================
RCS file: /home/cvs/OpenXM/src/OpenMath/ORG/openxm/tam/OpenXM.java,v
retrieving revision 1.1
retrieving revision 1.9
diff -u -p -r1.1 -r1.9
--- OpenXM/src/OpenMath/ORG/openxm/tam/OpenXM.java 2000/09/07 10:41:34 1.1
+++ OpenXM/src/OpenMath/ORG/openxm/tam/OpenXM.java 2002/10/23 08:40:16 1.9
@@ -1,5 +1,5 @@
/**
- * $OpenXM$
+ * $OpenXM: OpenXM/src/OpenMath/ORG/openxm/tam/OpenXM.java,v 1.8 2001/11/04 09:58:14 takayama Exp $
*/
package ORG.openxm.tam;
@@ -7,16 +7,39 @@ import java.io.*;
import java.net.*;
+/*&ja
+ OpenXM サーバとの接続を行なうクラス.
+ クライアント側が使用する.
+ 接続するサーバ毎に一つの OpenXM クラスが必要.
+*/
/**
- * OpenXM サーバとの接続を行なう抽象クラス
- * クライアント側が使用する.
+ * OpenXM is a class to connect to OpenXM servers,
+ * which are compliant to OpenXM RFC 100.
+ * There is one-to-one correspondence between the instances
+ * of the class OpenXM and the OpenXM servers.
*/
public class OpenXM{
- private OpenXMconnection control = null, stream = null;
+ private OpenXMstream control = null, stream = null;
final protected boolean debug = false;
+ /*&ja
+ * OpenXM サーバとの接続を TCP/IP ソケットを用いて行なう.
+ * マシン名 host のポート番号 CtrlPort にコントロールを,
+ * ポート番号 StreamPort にデータ用の接続を行なう.
+ */
+ /**
+ * Connect to an OpenXM server via TCP/IP socket.
+ * @param host a machine name of the OpenXM server.
+ * @param CtrlPort the control port number of the OpenXM server.
+ * @param StreamPort the data port number of the OpenXM server.
+ * As to details on the notion of control port and data port, see
+ * Design and Implementation of OpenXM client server model and
+ * common mathematical object format (OpenXM-RFC 100,
+ * proposed standard)
+ * @see OpenXM
+ */
public OpenXM(String host,int CtrlPort,int StreamPort) throws IOException{
- control = new OpenXMconnection(host,CtrlPort);
+ control = new OpenXMstream(host,CtrlPort);
try{
Thread.sleep(100); // We need a few wait for starting up server.
@@ -24,38 +47,109 @@ public class OpenXM{
System.err.println(e.getMessage());
}
- stream = new OpenXMconnection(host,StreamPort);
+ stream = new OpenXMstream(host,StreamPort);
control.sendByteOrder();
stream.sendByteOrder();
}
+ /*&ja
+ * コマンド command を立ち上げ、
+ * OpenXM サーバとの接続を TCP/IP ソケットを用いて行なう.
+ * マシン名 host のポート番号 CtrlPort にコントロールを,
+ * ポート番号 StreamPort にデータ用の接続を行なう.
+ */
/**
- * 接続の reset を行なう. 現在は未実装.
+ * First, execute a command, which is usually an OpenXM server,
+ * and next try to connect to the OpenXM server via TCP/IP.
+ * @param command a command.
+ * @param host a machine name of the OpenXM server.
+ * @param CtrlPort the control port number of the OpenXM server.
+ * @param StreamPort the data port number of the OpenXM server.
*/
+ public OpenXM(String command,String host,int CtrlPort,int StreamPort)
+ throws IOException{
+ Runtime.getRuntime().exec(command);
+ control = new OpenXMstream(host,CtrlPort);
+
+ try{
+ Thread.sleep(100); // We need a few wait for starting up server.
+ }catch(InterruptedException e){
+ System.err.println(e.getMessage());
+ }
+
+ stream = new OpenXMstream(host,StreamPort);
+
+ control.sendByteOrder();
+ stream.sendByteOrder();
+ }
+
+ public OpenXM(String host,int CtrlPort,int StreamPort,String ox_server,int oxd_port,String pass)
+ throws IOException{
+ // pass may be a null string.
+ control = new OpenXMstream(host,CtrlPort,pass);
+ stream = new OpenXMstream(host,StreamPort,pass);
+ System.err.println("Listening...");
+ System.err.println("Launch ox server with the reverse option, e.g., ox -ox ox_asir -reverse");
+ // Launch ox_server by the oxd daemon (oxd_port).
+ // BUG: It has not yet been implemented.
+ control.OpenXMstreamAccept();
+ System.err.println("Accepted the control port.");
+ stream.OpenXMstreamAccept();
+ System.err.println("Accepted the data port.");
+
+
+ control.sendByteOrder();
+ stream.sendByteOrder();
+ }
+ /*&ja
+ * サーバの計算中断を行なう. 現在は未実装.
+ */
+ /**
+ * Resetting the engine process. It has not yet been implemented.
+ */
public synchronized void resetConnection(){
debug("control: stopping computer process...");
debug("control: sending SYNC BALL.");
}
+ /*&ja
+ * OpenXM メッセージをデータストリームに送信する.
+ * このメソッドはメッセージのボディの部分だけでよい.
+ * ヘッダ部分は自動で付加される.
+ */
/**
- * OpenXM メッセージを送信する. ただし、このメソッドは
- * ボディの部分だけでよい. ヘッダの部分は自動で付加される.
+ * Send an OpenXM message object.
+ * @param object a message. For example, oxm.send(new CMO_STRING("Hello"))
+ * sends a string "Hello" to the OpenXM server oxm in the CMO_STRING data
+ * encoding.
+ */
public void send(OXbody object) throws IOException,MathcapViolation{
stream.send(object);
}
+ /*&ja
+ * データストリームから OpenXM メッセージを受け取る.
+ */
/**
- * OpenXM メッセージを受け取る.
+ * Receive an OpenXM message.
*/
public OXmessage receive() throws IOException{
return stream.receive();
}
+ /*&ja
+ * データストリームの MathCap を mathcap に設定する.
+ * 以後, 送信するオブジェクトは mathcap に合っているかどうか
+ * チェックが入る. 実際にチェックが入るかどうかは
+ * OXbody クラスの派生クラスの実装による.
+ * mathcap に反したオブジェクトを送ろうとした時には,
+ * 以後 MathcapViolation が発生することが期待される.
+ */
/**
- * MathCap を mathcap に設定する.
- * 以後, mathcap に反した CMO を送ると
- * MathcapViolation が発生する.
+ * Set the mathcap.
+ * If one tries to send an object which is prohibited to send by the mathcap,
+ * the mathcapViolation exception is thrown.
*/
public void setMathCap(CMO_MATHCAP mathcap){
stream.setMathCap(mathcap);
@@ -76,7 +170,7 @@ public class OpenXM{
for(int i=0;i