/** * $OpenXM: OpenXM/src/OpenMath/ORG/openxm/tam/OpenXM.java,v 1.6 2001/01/28 19:17:24 tam Exp $ */ package ORG.openxm.tam; import java.io.*; import java.net.*; /** * OpenXM サーバとの接続を行なうクラス. * クライアント側が使用する. * 接続するサーバ毎に一つの OpenXM クラスが必要. */ public class OpenXM{ private OpenXMstream control = null, stream = null; final protected boolean debug = false; /** * OpenXM サーバとの接続を TCP/IP ソケットを用いて行なう. * マシン名 host のポート番号 CtrlPort にコントロールを, * ポート番号 StreamPort にデータ用の接続を行なう. */ public OpenXM(String host,int CtrlPort,int StreamPort) throws IOException{ 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(); } /** * コマンド command を立ち上げ、 * OpenXM サーバとの接続を TCP/IP ソケットを用いて行なう. * マシン名 host のポート番号 CtrlPort にコントロールを, * ポート番号 StreamPort にデータ用の接続を行なう. */ 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 synchronized void resetConnection(){ debug("control: stopping computer process..."); debug("control: sending SYNC BALL."); } /** * OpenXM メッセージをデータストリームに送信する. * このメソッドはメッセージのボディの部分だけでよい. * ヘッダ部分は自動で付加される. */ public void send(OXbody object) throws IOException,MathcapViolation{ stream.send(object); } /** * データストリームから OpenXM メッセージを受け取る. */ public OXmessage receive() throws IOException{ return stream.receive(); } /** * データストリームの MathCap を mathcap に設定する. * 以後, 送信するオブジェクトは mathcap に合っているかどうか * チェックが入る. 実際にチェックが入るかどうかは * OXbody クラスの派生クラスの実装による. * mathcap に反したオブジェクトを送ろうとした時には, * 以後 MathcapViolation が発生することが期待される. */ public void setMathCap(CMO_MATHCAP mathcap){ stream.setMathCap(mathcap); } private final void debug(String str){ if(debug){ System.err.println(str); } } public static void main(String[] argv){ String hostname = "localhost"; int ControlPort = 1200, DataPort = 1300; Runnable process = null; Thread thread; OpenXM ox; for(int i=0;i