[BACK]Return to OpenXM.java CVS log [TXT][DIR] Up to [local] / OpenXM / src / OpenMath / ORG / openxm / tam

Annotation of OpenXM/src/OpenMath/ORG/openxm/tam/OpenXM.java, Revision 1.6

1.1       tam         1: /**
1.6     ! tam         2:  * $OpenXM: OpenXM/src/OpenMath/ORG/openxm/tam/OpenXM.java,v 1.5 2000/10/11 08:32:15 ohara Exp $
1.1       tam         3:  */
                      4: package ORG.openxm.tam;
                      5:
                      6: import java.io.*;
                      7: import java.net.*;
                      8:
                      9:
                     10: /**
1.3       tam        11:  * OpenXM サーバとの接続を行なうクラス.
1.1       tam        12:  * クライアント側が使用する.
1.3       tam        13:  * 接続するサーバ毎に一つの OpenXM クラスが必要.
1.1       tam        14:  */
                     15: public class OpenXM{
1.4       tam        16:   private OpenXMstream control = null, stream = null;
1.1       tam        17:   final protected boolean debug = false;
                     18:
1.3       tam        19:   /**
                     20:    * OpenXM サーバとの接続を TCP/IP ソケットを用いて行なう.
                     21:    * マシン名 host のポート番号 CtrlPort にコントロールを,
                     22:    * ポート番号 StreamPort にデータ用の接続を行なう.
                     23:    */
1.1       tam        24:   public OpenXM(String host,int CtrlPort,int StreamPort) throws IOException{
1.6     ! tam        25:     control = new OpenXMstream(host,CtrlPort);
        !            26:
        !            27:     try{
        !            28:       Thread.sleep(100); // We need a few wait for starting up server.
        !            29:     }catch(InterruptedException e){
        !            30:       System.err.println(e.getMessage());
        !            31:     }
        !            32:
        !            33:     stream = new OpenXMstream(host,StreamPort);
        !            34:
        !            35:     control.sendByteOrder();
        !            36:     stream.sendByteOrder();
        !            37:   }
        !            38:
        !            39:   /**
        !            40:    * コマンド command を立ち上げ、
        !            41:    * OpenXM サーバとの接続を TCP/IP ソケットを用いて行なう.
        !            42:    * マシン名 host のポート番号 CtrlPort にコントロールを,
        !            43:    * ポート番号 StreamPort にデータ用の接続を行なう.
        !            44:    */
        !            45:   public OpenXM(String command,String host,int CtrlPort,int StreamPort)
        !            46:        throws IOException{
        !            47:     Runtime.getRuntime().exec(command);
1.4       tam        48:     control = new OpenXMstream(host,CtrlPort);
1.1       tam        49:
                     50:     try{
                     51:       Thread.sleep(100); // We need a few wait for starting up server.
                     52:     }catch(InterruptedException e){
                     53:       System.err.println(e.getMessage());
                     54:     }
                     55:
1.4       tam        56:     stream = new OpenXMstream(host,StreamPort);
1.1       tam        57:
                     58:     control.sendByteOrder();
                     59:     stream.sendByteOrder();
                     60:   }
                     61:
                     62:   /**
1.3       tam        63:    * 接続の初期化を行なう. 現在は未実装.
1.1       tam        64:    */
                     65:   public synchronized void resetConnection(){
                     66:     debug("control: stopping computer process...");
                     67:     debug("control: sending SYNC BALL.");
                     68:   }
                     69:
                     70:   /**
1.3       tam        71:    * OpenXM メッセージをデータストリームに送信する.
                     72:    * このメソッドはメッセージのボディの部分だけでよい.
                     73:    * ヘッダ部分は自動で付加される.
1.2       tam        74:    */
1.1       tam        75:   public void send(OXbody object) throws IOException,MathcapViolation{
                     76:     stream.send(object);
                     77:   }
                     78:
                     79:   /**
1.3       tam        80:    * データストリームから OpenXM メッセージを受け取る.
1.1       tam        81:    */
                     82:   public OXmessage receive() throws IOException{
                     83:     return stream.receive();
                     84:   }
                     85:
                     86:   /**
1.3       tam        87:    * データストリームの MathCap を mathcap に設定する.
                     88:    * 以後, 送信するオブジェクトは mathcap に合っているかどうか
                     89:    * チェックが入る. 実際にチェックが入るかどうかは
                     90:    * OXbody クラスの派生クラスの実装による.
                     91:    * mathcap に反したオブジェクトを送ろうとした時には,
                     92:    * 以後 MathcapViolation が発生することが期待される.
1.1       tam        93:    */
                     94:   public void setMathCap(CMO_MATHCAP mathcap){
                     95:     stream.setMathCap(mathcap);
                     96:   }
                     97:
                     98:   private final void debug(String str){
                     99:     if(debug){
                    100:       System.err.println(str);
                    101:     }
                    102:   }
                    103:
                    104:   public static void main(String[] argv){
                    105:     String hostname = "localhost";
                    106:     int ControlPort = 1200, DataPort = 1300;
                    107:     Runnable process = null;
                    108:     Thread thread;
                    109:     OpenXM ox;
                    110:
                    111:     for(int i=0;i<argv.length;i++){
                    112:       if(argv[i].equals("-h")){
1.5       ohara     113:         System.err.println("");
1.1       tam       114:         System.exit(0);
                    115:       }else if(argv[i].equals("-host")){
                    116:         hostname = argv[++i];
                    117:       }else if(argv[i].equals("-data")){
                    118:         DataPort = Integer.valueOf(argv[++i]).intValue();
                    119:       }else if(argv[i].equals("-control")){
                    120:         ControlPort = Integer.valueOf(argv[++i]).intValue();
                    121:       }else{
                    122:         System.err.println("unknown option :"+ argv[i]);
                    123:         System.exit(1);
                    124:       }
                    125:     }
                    126:
                    127:     try{
                    128:       ox = new OpenXM(hostname,ControlPort,DataPort);
                    129:
                    130:       thread = new Thread(process);
                    131:       thread.start();
                    132:     }catch(UnknownHostException e){
                    133:       System.err.println("host unknown.");
                    134:       System.err.println(e.getMessage());
                    135:       return;
                    136:     }catch(IOException e){
                    137:       System.err.println("connection failed.");
                    138:       System.err.println("IOException occuer !!");
                    139:       System.err.println(e.getMessage());
                    140:       return;
                    141:     }
                    142:
                    143:     try{
                    144:       //サーバ側へ文字列を送信します。
                    145:       ox.send(new SM(SM.SM_mathcap));
                    146:       ox.send(new SM(SM.SM_popString));
                    147:
                    148:       //ox.send(new CMO_STRING("print(\"Hello world!!\");\n"));
                    149:       //ox.send(new SM(SM.SM_executeStringByLocalParser));
                    150:
                    151:       //ox.send(new CMO_STRING("def sub(B,A){return B-A;}"));
                    152:       //ox.send(new SM(SM.SM_executeStringByLocalParser));
                    153:       //ox.send(new SM(SM.SM_popString));
                    154:
                    155:       //ox.send(new CMO_STRING("diff((x+2*y)^2,x);\0 1+2;"));
                    156:       //ox.send(new SM(SM.SM_executeStringByLocalParser));
                    157:       //ox.send(new SM(SM.SM_popString));
                    158:
                    159:       //ox.send(new CMO_ZZ("1"));
                    160:       ox.send(new CMO_ZZ("-2"));
                    161:       //ox.send(new CMO_INT32(2));
                    162:       //ox.send(new CMO_STRING("sub"));
                    163:       //ox.send(new SM(SM.SM_executeFunction));
                    164:       ox.send(new SM(SM.SM_popCMO));
                    165:
                    166:       { int[] array = {1,2};
                    167:       ox.send(new CMO_MONOMIAL32(array,new CMO_ZZ("-2")));
                    168:       }
                    169:       ox.send(new SM(SM.SM_popCMO));
                    170:
                    171:       ox.send(new SM(SM.SM_popString));
                    172:       //ox.send(new SM(SM.SM_popString));
                    173:
                    174:       ox.send(new SM(SM.SM_control_kill));
                    175:
                    176:       //os.flush();
                    177:
                    178:       //サーバ側から送信された文字列を受信します。
                    179:       while(true){
                    180:        ox.receive();
                    181:       }
                    182:
                    183:     }catch(Exception e){
                    184:       e.printStackTrace();
                    185:     }
                    186:
1.5       ohara     187:     System.err.println("breaking...");
1.1       tam       188:
                    189:     try{
                    190:       // close connection
                    191:       ox.stream.close();
                    192:       ox.control.close();
                    193:     }catch(IOException e){
                    194:       e.printStackTrace();
                    195:     }
                    196:   }
                    197: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>