Annotation of OpenXM/src/OpenMath/OMproxy.java, Revision 1.1.1.1
1.1 tam 1: import JP.ac.kobe_u.math.tam.OpenXM.*;
2: import java.util.Stack;
3: import java.io.*;
4:
5: class OMproxy implements Runnable{
6: private OpenXM ox;
7: private Stack stack = new Stack();
8:
9: public OMproxy(String host,int ControlPort,int DataPort) throws IOException{
10: ox = new OpenXM(this,host,ControlPort,DataPort);
11: }
12:
13: public void run(){
14: OM2OXM P = new OM2OXM();
15:
16: try{
17: while(true){
18: synchronized(ox){
19: int ox_tag = ox.receiveOXtag();
20:
21: switch(ox_tag){
22: case OpenXM.OX_COMMAND:
23: StackMachine(ox.receiveSM());
24: break;
25:
26: case OpenXM.OX_DATA:
27: stack.push(ox.receiveCMO());
28: System.out.println("push: "+ stack.peek());
29: break;
30: }
31: }
32: }
33: }catch(java.io.IOException e){
34: System.err.println(e.getMessage());
35: e.printStackTrace();
36: }
37:
38: System.out.println("breaking...");
39: }
40:
41: public void stop(){
42: System.out.println("OMproxy Stoping...");
43: synchronized(ox){
44: //this.stop();
45: while(!stack.empty()){
46: stack.pop();
47: }
48: System.out.println("OMproxy Stopped");
49: }
50: }
51:
52: private void SM_popCMO() throws java.io.IOException{
53: if(stack.empty()){
54: ox.send(new CMO_NULL());
55: }else{
56: ox.send(stack.pop());
57: }
58: }
59:
60: private void SM_executeFunction() throws java.io.IOException{
61: String function_name;
62: CMO[] argv;
63: int argc;
64:
65: if(!(stack.peek() instanceof CMO_STRING)){
66: stack.push(new CMO_ERROR2());
67: return;
68: }
69: function_name = ((CMO_STRING)stack.pop()).getString();
70: argc = ((CMO_INT32)stack.pop()).intValue();
71: argv = new CMO[argc];
72: for(int i=0;i<argc;i++){
73: argv[i] = (CMO)stack.pop();
74: }
75:
76: if(argc != 1){
77: stack.push(new CMO_ERROR2());
78: return;
79: }
80:
81: if(function_name.equals("OMXML2CMO")){
82: stack.push(OMXML2CMO(argv[0]));
83: return;
84: }else if(function_name.equals("CMO2OMXML")){
85: stack.push(CMO2OMXML(argv[0]));
86: return;
87: }
88:
89: stack.push(new CMO_ERROR2());
90: return;
91: }
92:
93: private void StackMachine(SM mesg) throws java.io.IOException{
94: switch(mesg.getCode()){
95: case SM.SM_popCMO:
96: SM_popCMO();
97: break;
98:
99: case SM.SM_executeFunction:
100: SM_executeFunction();
101: break;
102:
103: default:
104: System.out.println("received "+ mesg);
105: }
106: }
107:
108: private CMO CMO2OMXML(CMO obj){
109: String str = OM2OXM.CMO2OM(obj);
110:
111: return new CMO_STRING(str);
112: }
113:
114: private CMO OMXML2CMO(CMO obj){
115: OM2OXM trans = new OM2OXM();
116: //StringBufferInputStream stream;
117: ByteArrayInputStream stream;
118: CMO ret;
119:
120: if(obj instanceof CMO_STRING){
121: return new CMO_ERROR2();
122: }
123:
124: try{
125: stream = new ByteArrayInputStream(((CMO_STRING)obj).getString().getBytes());
126: ret = trans.parse(stream);
127: }catch(IOException e){
128: return new CMO_ERROR2(new CMO_STRING(e.toString()));
129: }
130:
131: return ret;
132: }
133:
134: public static void main(String argv[]){
135: String host = "localhost";
136: int DataPort = 1300, ControlPort = 1200;
137:
138: for(int i=0;i<argv.length;i++){
139: if(argv[i].equals("-h")){
140: System.out.println("");
141: System.exit(0);
142: }else if(argv[i].equals("-host")){
143: host = argv[++i];
144: }else if(argv[i].equals("-data")){
145: DataPort = Integer.valueOf(argv[++i]).intValue();
146: }else if(argv[i].equals("-control")){
147: ControlPort = Integer.valueOf(argv[++i]).intValue();
148: }else{
149: System.err.println("unknown option :"+ argv[i]);
150: System.exit(1);
151: }
152: }
153: System.out.println("host(ctrl,data): "+ host
154: +"("+ ControlPort +","+ DataPort +")");
155:
156: try{
157: new OMproxy(host,ControlPort,DataPort);
158: System.out.println("connected.");
159: }catch(IOException e){
160: System.err.println("Error occured: "+ e);
161: System.err.println(e.getLocalizedMessage());
162: System.err.println(e.getMessage());
163: }
164: }
165: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>