| version 1.7, 1999/11/07 21:14:38 |
version 1.38, 2000/06/14 08:01:08 |
|
|
| /** |
/** |
| * $OpenXM: OpenXM/src/OpenMath/OMproxy.java,v 1.6 1999/11/04 18:38:59 tam Exp $ |
* $OpenXM: OpenXM/src/OpenMath/OMproxy.java,v 1.37 2000/06/13 14:04:19 tam Exp $ |
| */ |
*/ |
| |
|
| import JP.ac.kobe_u.math.tam.OpenXM.*; |
import JP.ac.kobe_u.math.tam.OpenXM.*; |
| import java.util.Stack; |
import java.util.Stack; |
| import java.io.*; |
import java.io.*; |
| |
|
| class OMproxy implements Runnable{ |
public class OMproxy extends OpenXMserver{ |
| private OpenXM ox; |
|
| private Stack stack = new Stack(); |
private Stack stack = new Stack(); |
| private boolean debug = true; |
protected boolean debug = false; |
| |
final int version = 200006130; |
| |
|
| public OMproxy(String host,int ControlPort,int DataPort) throws IOException{ |
public OMproxy(String hostname,int ControlPort,int DataPort){ |
| ox = new OpenXM(this,host,ControlPort,DataPort); |
super(hostname,ControlPort,DataPort); |
| } |
} |
| |
|
| public void run(){ |
public void computeProcess(OpenXMconnection stream){ |
| OM2OXM P = new OM2OXM(); |
OM2OXM P = new OM2OXM(); |
| |
|
| |
debug("OMproxy started."); |
| try{ |
try{ |
| while(true){ |
while(true){ |
| synchronized(ox){ |
try{ |
| int ox_tag = ox.receiveOXtag(); |
OXmessage message = stream.receive(); |
| |
int ox_tag = message.getTag(); |
| |
|
| switch(ox_tag){ |
switch(ox_tag){ |
| case OpenXM.OX_COMMAND: |
case OXmessage.OX_COMMAND: |
| StackMachine(ox.receiveSM()); |
StackMachine((SM)message.getBody(),stream); |
| break; |
break; |
| |
|
| case OpenXM.OX_DATA: |
case OXmessage.OX_DATA: |
| stack.push(ox.receiveCMO()); |
stack.push(message.getBody()); |
| debug("push: "+ stack.peek()); |
debug("push: "+ stack.peek()); |
| break; |
break; |
| } |
} |
| |
}catch(RuntimeException e){ |
| |
System.err.println(e.getMessage()); |
| |
e.printStackTrace(); |
| |
debug("error occured. stack was cleared."); |
| |
stack = new Stack(); |
| } |
} |
| } |
} |
| }catch(java.io.IOException e){ |
}catch(IOException e){ |
| System.err.println(e.getMessage()); |
System.err.println(e.getMessage()); |
| e.printStackTrace(); |
e.printStackTrace(); |
| |
System.err.println("error occured, and recovering processes seems to be impossible."); |
| |
}finally{ |
| |
System.out.println("breaking..."); |
| } |
} |
| |
|
| System.out.println("breaking..."); |
|
| } |
} |
| |
|
| |
/* |
| public void stop(){ |
public void stop(){ |
| System.out.println("OMproxy Stoping..."); |
System.out.println("OMproxy Stoping..."); |
| synchronized(ox){ |
synchronized(ox){ |
| Line 53 class OMproxy implements Runnable{ |
|
| Line 62 class OMproxy implements Runnable{ |
|
| System.out.println("OMproxy Stopped"); |
System.out.println("OMproxy Stopped"); |
| } |
} |
| } |
} |
| |
*/ |
| |
|
| private void SM_popCMO() throws java.io.IOException{ |
private void SM_popCMO(OpenXMconnection stream) throws java.io.IOException{ |
| if(stack.empty()){ |
try{ |
| ox.send(new CMO_NULL()); |
if(stack.empty()){ |
| }else{ |
stream.send(new CMO_NULL()); |
| ox.send(stack.pop()); |
}else{ |
| |
debug("sending CMO: "+ stack.peek()); |
| |
stream.send((CMO)stack.pop()); |
| |
debug("test"); |
| |
} |
| |
}catch(MathcapViolation e){ |
| |
try{ |
| |
stream.send(new CMO_ERROR2(new CMO_STRING("MathcapViolation: "+ |
| |
e.getMessage()))); |
| |
}catch(MathcapViolation tmp){} |
| } |
} |
| } |
} |
| |
|
| private void SM_executeFunction() throws java.io.IOException{ |
private void SM_executeFunction() throws java.io.IOException{ |
| String function_name; |
String function_name; |
| CMO[] argv; |
CMO[] argv; |
| int argc = 1; |
int argc; |
| |
|
| if(!(stack.peek() instanceof CMO_STRING)){ |
if(!(stack.peek() instanceof CMO_STRING)){ |
| stack.push(new CMO_ERROR2()); |
stack.push(new CMO_ERROR2(new CMO_NULL())); |
| return; |
return; |
| } |
} |
| function_name = ((CMO_STRING)stack.pop()).getString(); |
function_name = ((CMO_STRING)stack.pop()).getString(); |
| //argc = ((CMO_INT32)stack.pop()).intValue(); |
argc = ((CMO_INT32)stack.pop()).intValue(); |
| argv = new CMO[argc]; |
argv = new CMO[argc]; |
| for(int i=0;i<argc;i++){ |
for(int i=0;i<argc;i++){ |
| argv[i] = (CMO)stack.pop(); |
argv[i] = (CMO)stack.pop(); |
| } |
} |
| |
|
| if(argc != 1){ |
if(argc != 1){ |
| stack.push(new CMO_ERROR2()); |
stack.push(new CMO_ERROR2(new CMO_NULL())); |
| return; |
return; |
| } |
} |
| |
|
| Line 91 class OMproxy implements Runnable{ |
|
| Line 110 class OMproxy implements Runnable{ |
|
| return; |
return; |
| } |
} |
| |
|
| stack.push(new CMO_ERROR2()); |
stack.push(new CMO_ERROR2(new CMO_NULL())); |
| return; |
return; |
| } |
} |
| |
|
| private void SM_mathcap() throws java.io.IOException{ |
private void SM_mathcap(OpenXMconnection stream) throws java.io.IOException{ |
| CMO[] mathcap = new CMO[3]; |
CMO[] mathcap = new CMO[3]; |
| |
|
| { |
{ |
| CMO[] list = {new CMO_INT32(199911070), |
CMO[] list = {new CMO_INT32(version), |
| new CMO_STRING("Ox_system=OMproxy.class"), |
new CMO_STRING("Ox_system=OMproxy.class"), |
| new CMO_STRING("Version=0.199911070"), |
new CMO_STRING("Version=0."+ version), |
| new CMO_STRING("HOSTTYPE=JAVA")}; |
new CMO_STRING("HOSTTYPE=JAVA")}; |
| mathcap[0] = new CMO_LIST(list); |
mathcap[0] = new CMO_LIST(list); |
| } |
} |
| Line 109 class OMproxy implements Runnable{ |
|
| Line 128 class OMproxy implements Runnable{ |
|
| { |
{ |
| CMO[] list = {new CMO_INT32(SM.SM_popCMO), |
CMO[] list = {new CMO_INT32(SM.SM_popCMO), |
| new CMO_INT32(SM.SM_executeFunction), |
new CMO_INT32(SM.SM_executeFunction), |
| new CMO_INT32(SM.SM_mathcap)}; |
new CMO_INT32(SM.SM_mathcap), |
| |
new CMO_INT32(SM.SM_setMathCap), |
| |
new CMO_INT32(SM.SM_control_kill), |
| |
new CMO_INT32(SM.SM_control_reset_connection)}; |
| mathcap[1] = new CMO_LIST(list); |
mathcap[1] = new CMO_LIST(list); |
| } |
} |
| |
|
| { |
{ |
| CMO[] DataFormat = {new CMO_INT32(OpenXM.OX_DATA)}; |
CMO[] CMOFormat = {new CMO_INT32(CMO.NULL), |
| CMO[] CMOFormat = {new CMO_INT32(CMO.CMO_NULL), |
new CMO_INT32(CMO.INT32), |
| new CMO_INT32(CMO.CMO_INT32), |
new CMO_INT32(CMO.STRING), |
| new CMO_INT32(CMO.CMO_STRING), |
new CMO_INT32(CMO.LIST), |
| new CMO_INT32(CMO.CMO_MONOMIAL32), |
new CMO_INT32(CMO.MONOMIAL32), |
| new CMO_INT32(CMO.CMO_ZZ), |
new CMO_INT32(CMO.ZZ), |
| new CMO_INT32(CMO.CMO_QQ), |
new CMO_INT32(CMO.QQ), |
| new CMO_INT32(CMO.CMO_ZERO), |
new CMO_INT32(CMO.ZERO), |
| new CMO_INT32(CMO.CMO_DMS_GENERIC)}; |
new CMO_INT32(CMO.DMS_GENERIC), |
| CMO[] list = {new CMO_LIST(DataFormat), |
new CMO_INT32(CMO.RECURSIVE_POLYNOMIAL), |
| new CMO_LIST(CMOFormat)}; |
new CMO_INT32(CMO.DISTRIBUTED_POLYNOMIAL), |
| |
new CMO_INT32(CMO.POLYNOMIAL_IN_ONE_VARIABLE), |
| |
new CMO_INT32(CMO.BIGFLOAT), |
| |
new CMO_INT32(CMO.INDETERMINATE), |
| |
new CMO_INT32(CMO.TREE)}; |
| |
CMO[] DataFormat1 = {new CMO_INT32(OXmessage.OX_DATA), |
| |
new CMO_LIST(CMOFormat)}; |
| |
CMO[] list = {new CMO_LIST(DataFormat1)}; |
| |
|
| mathcap[2] = new CMO_LIST(list); |
mathcap[2] = new CMO_LIST(list); |
| } |
} |
| |
|
| ox.send(new CMO_LIST(mathcap)); |
stack = new Stack(); |
| |
stack.push(new CMO_MATHCAP(new CMO_LIST(mathcap))); |
| |
debug("push: "+ stack.peek()); |
| } |
} |
| |
|
| private void StackMachine(SM mesg) throws java.io.IOException{ |
private void SM_setMathCap(OpenXMconnection stream) |
| |
throws java.io.IOException{ |
| |
Object mathcap = stack.pop(); |
| |
|
| |
if(mathcap instanceof CMO_MATHCAP){ |
| |
stack.push(new CMO_ERROR2(new CMO_NULL())); |
| |
} |
| |
stream.setMathCap((CMO_MATHCAP)mathcap); |
| |
} |
| |
|
| |
private void StackMachine(SM mesg,OpenXMconnection stream) |
| |
throws java.io.IOException{ |
| debug("receive: "+mesg); |
debug("receive: "+mesg); |
| |
|
| switch(mesg.getCode()){ |
switch(mesg.getCode()){ |
| case SM.SM_popCMO: |
case SM.SM_popCMO: |
| SM_popCMO(); |
SM_popCMO(stream); |
| break; |
break; |
| |
|
| case SM.SM_executeFunction: |
case SM.SM_executeFunction: |
| Line 144 class OMproxy implements Runnable{ |
|
| Line 187 class OMproxy implements Runnable{ |
|
| break; |
break; |
| |
|
| case SM.SM_mathcap: |
case SM.SM_mathcap: |
| SM_mathcap(); |
SM_mathcap(stream); |
| break; |
break; |
| |
|
| |
case SM.SM_setMathCap: |
| |
SM_setMathCap(stream); |
| |
break; |
| |
|
| default: |
default: |
| System.out.println("received "+ mesg); |
System.out.println("received "+ mesg); |
| } |
} |
| } |
} |
| |
|
| private CMO CMO2OMXML(CMO obj){ |
private CMO CMO2OMXML(CMO obj){ |
| String str = OM2OXM.CMO2OM(obj); |
String str; |
| |
|
| |
try{ |
| |
str = OM2OXM.CMO2OM(obj); |
| |
}catch(NumberFormatException e){ |
| |
debug("CMO2OMXML occuered error in trans"); |
| |
return new CMO_ERROR2(new CMO_STRING(e.toString())); |
| |
} |
| |
|
| return new CMO_STRING(str); |
return new CMO_STRING(str); |
| } |
} |
| |
|
| Line 166 class OMproxy implements Runnable{ |
|
| Line 220 class OMproxy implements Runnable{ |
|
| |
|
| debug("OMXML2CMO called: "+obj); |
debug("OMXML2CMO called: "+obj); |
| if(!(obj instanceof CMO_STRING)){ |
if(!(obj instanceof CMO_STRING)){ |
| return new CMO_ERROR2(); |
return new CMO_ERROR2(new CMO_STRING("It's not CMO_STRING.")); |
| } |
} |
| |
|
| try{ |
try{ |
| Line 175 class OMproxy implements Runnable{ |
|
| Line 229 class OMproxy implements Runnable{ |
|
| }catch(IOException e){ |
}catch(IOException e){ |
| debug("OMXML2CMO occuered error in trans"); |
debug("OMXML2CMO occuered error in trans"); |
| return new CMO_ERROR2(new CMO_STRING(e.toString())); |
return new CMO_ERROR2(new CMO_STRING(e.toString())); |
| |
}catch(NumberFormatException e){ |
| |
debug("OMXML2CMO occuered error in trans"); |
| |
return new CMO_ERROR2(new CMO_STRING(e.toString())); |
| } |
} |
| |
|
| debug("push: "+ret); |
debug("push: "+ret); |
| Line 183 class OMproxy implements Runnable{ |
|
| Line 240 class OMproxy implements Runnable{ |
|
| |
|
| private void debug(String str){ |
private void debug(String str){ |
| if(debug){ |
if(debug){ |
| System.out.println(str); |
System.err.println(str); |
| } |
} |
| } |
} |
| |
|
| Line 196 class OMproxy implements Runnable{ |
|
| Line 253 class OMproxy implements Runnable{ |
|
| ret += "\t -host hostname \t (default localhost)\n"; |
ret += "\t -host hostname \t (default localhost)\n"; |
| ret += "\t -data port \t (default 1300)\n"; |
ret += "\t -data port \t (default 1300)\n"; |
| ret += "\t -control port \t (default 1200)\n"; |
ret += "\t -control port \t (default 1200)\n"; |
| |
ret += "\t -insecure \t this version ignore this option\n"; |
| |
ret += "\t -debug \t display debug messages\n"; |
| |
|
| return ret; |
return ret; |
| } |
} |
| |
|
| public static void main(String argv[]){ |
public static void main(String[] argv){ |
| String host = "localhost"; |
String hostname = "localhost"; |
| int DataPort = 1300, ControlPort = 1200; |
int ControlPort = 1200, DataPort = 1300; |
| |
OpenXMserver ox; |
| |
|
| for(int i=0;i<argv.length;i++){ |
for(int i=0;i<argv.length;i++){ |
| if(argv[i].equals("-h")){ |
if(argv[i].equals("-h")){ |
| System.out.print(usage()); |
System.out.println(""); |
| System.exit(0); |
System.exit(0); |
| }else if(argv[i].equals("-host")){ |
}else if(argv[i].equals("-host")){ |
| host = argv[++i]; |
hostname = argv[++i]; |
| }else if(argv[i].equals("-data")){ |
}else if(argv[i].equals("-data")){ |
| DataPort = Integer.valueOf(argv[++i]).intValue(); |
DataPort = Integer.valueOf(argv[++i]).intValue(); |
| }else if(argv[i].equals("-control")){ |
}else if(argv[i].equals("-control")){ |
| ControlPort = Integer.valueOf(argv[++i]).intValue(); |
ControlPort = Integer.valueOf(argv[++i]).intValue(); |
| }else{ |
}else{ |
| System.err.println("unknown option : "+ argv[i]); |
System.err.println("unknown option :"+ argv[i]); |
| System.err.print(usage()); |
System.exit(1); |
| System.exit(1); |
|
| } |
} |
| } |
} |
| |
|
| System.out.println("host(ctrl,data): "+ host |
//ox = new OpenXMserver(hostname,ControlPort,DataPort); |
| +"("+ ControlPort +","+ DataPort +")"); |
ox = new OMproxy(hostname,ControlPort,DataPort); |
| |
/* |
| try{ |
try{ |
| new OMproxy(host,ControlPort,DataPort); |
}catch(java.net.UnknownHostException e){ |
| System.out.println("connected."); |
System.err.println("host unknown."); |
| |
System.err.println(e.getMessage()); |
| |
return; |
| }catch(IOException e){ |
}catch(IOException e){ |
| System.err.println("Error occured: "+ e); |
System.err.println("connection failed."); |
| System.err.println(e.getLocalizedMessage()); |
System.err.println("IOException occuer !!"); |
| System.err.println(e.getMessage()); |
System.err.println(e.getMessage()); |
| |
return; |
| } |
} |
| |
*/ |
| |
|
| |
ox.start(); |
| |
|
| |
System.out.println("breaking..."); |
| } |
} |
| } |
} |