package client;
import org.omg.CORBA.InterfaceDef;
import org.omg.CORBA.Request;
import org.omg.CORBA.InterfaceDefPackage.FullInterfaceDescription;
import org.omg.CORBA.ORB;
import org.omg.CosNaming.NameComponent;
import org.omg.CosNaming.NamingContextExt;
import org.omg.CosNaming.NamingContextExtHelper;
import Counter.Count;
import Counter.CountHelper;
public class CountClientDii {
public static void main(String args[]){
long startTime,endTime;
org.omg.CORBA.Request request;
try{
System.out.println("Initializing the ORB");
ORB orb=ORB.init(args,null);
org.omg.CORBA.Object objectRef=orb.resolve_initial_references("NameService");
if(objectRef==null){
System.out.println("objectRef=null");
return ;
}
NamingContextExt nce=NamingContextExtHelper.narrow(objectRef);
if(nce==null){
System.out.println("nce=null");
return ;
}
NameComponent[] name={new NameComponent("CountSer","")};
Count count=CountHelper.narrow(nce.resolve(name));
count.sum(0);
startTime=System.currentTimeMillis();
//request=buildRequest(count);
request=count._request("increment");
request.set_return_type(orb.get_primitive_tc(org.omg.CORBA.TCKind.tk_long));
org.omg.CORBA.Any inc = request.add_in_arg();
inc.insert_long(1); // increment by 1
for(int i=0;i<1000;i++){
//System.out.println(count.increment());
request.invoke();
System.out.println(request.result().value().extract_long());
}
endTime=System.currentTimeMillis();
System.out.println("The time is :"+(endTime-startTime));
}catch(Exception e){
e.printStackTrace();
}
}
public static Request buildRequest(Count count){
//Object countInterface=count._get_interface_def();
InterfaceDef def=(InterfaceDef) count._get_interface_def();//使用这种方法有异常,可能Delegate的一些方法没有实现,但是request可以使用的啊,以前没想到这一线
FullInterfaceDescription interfaceDesc=def.describe_interface();
if(interfaceDesc.operations[0].name.equals("increment")){
Request request=count._request("increment");
request.result().value().insert_long(0);
return request;
}else{
System.out.println("Unknown method");
}
return null;
}
}