package org.jacorb.demo.any; import java.io.*; import org.omg.CORBA.Any; import org.omg.PortableServer.*; import org.omg.CosNaming.*; import org.omg.CORBA.OctetSeqHelper; import org.omg.CORBA.StringSeqHelper; public class Client extends AnyServerPOA { public static AnyServer s = null; private static int counter; private synchronized static void incr(int val) { counter += val; } public java.lang.String generic(Any a) { System.out.println("Someone called me!"); incr(-1); return "call back succeeded!"; } public void shutdown() { System.out.println("Shutdown callback"); } public static void main( String[] args ) throws Exception { org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init(args,null); AnyServer s = null; if( args.length == 1) { // read object's ID from file BufferedReader br = new BufferedReader( new FileReader( args[0] )); s = AnyServerHelper.narrow(orb.string_to_object(br.readLine())); } else { // get hold of the naming service NamingContextExt nc = NamingContextExtHelper.narrow(orb.resolve_initial_references("NameService")); s = AnyServerHelper.narrow(nc.resolve(nc.to_name("AnyServer.service"))); } // create a new any Any a = org.omg.CORBA.ORB.init().create_any(); // Enum Ordered o = Ordered.second; System.out.print("Passing an enum..."); OrderedHelper.insert( a, o ); System.out.println( s.generic( a ) ); // char char ch = 'c'; System.out.print("Passing a char..."); a.insert_char( (char)ch ); System.out.println( s.generic( a ) ); // long long l = 4711; System.out.print("Passing a longlong..."); a.insert_longlong( l ); System.out.println( s.generic( a ) ); // short System.out.print("Passing a short..."); a.insert_short( (short)5 ); System.out.println( s.generic( a ) ); // float System.out.print("Passing a float..."); a.insert_float( (float)3.14); System.out.println( s.generic( a ) ); // string System.out.print("Passing a string..."); a.type( orb.create_string_tc(0)); a.insert_string("Hi there"); System.out.println( s.generic( a ) ); // wstring System.out.print("Passing a Wstring..."); a.insert_wstring( "Hi there" ); System.out.println("Any.kind: " + a.type().kind().value() ); System.out.println( s.generic( a ) ); // sequences String [] str = {"hello","world"}; MyStringSeqHelper.insert( a, str ); System.out.print("Alias? " + a.type()); System.out.print("Passing a sequence of strings..."); System.out.println( s.generic( a ) ); System.out.print("Passing a sequence of octets..."); byte [] octets = {1,2,3,4}; OctetSeqHelper.insert( a, octets ); System.out.println( s.generic( a ) ); // array System.out.print("Passing an array..."); String [] str2 = {"hello","another","world"}; stringsHelper.insert( a, str2 ); System.out.println( s.generic( a ) ); // struct System.out.print("Passing a struct..."); Node tail = new Node("tail" , new Node[0] ); Node head = new Node("head" , new Node[]{tail} ); NodeHelper.insert( a, head ); System.out.println( s.generic( a ) ); // union System.out.print("Passing a union..."); Nums n = new Nums(); n.l(4711); NumsHelper.insert( a, n ); System.out.println( s.generic( a ) ); /* There are two ways to insert object references: */ incr(1); // remember how many call backs we have to expect System.out.print("Passing an object..."); POA poa = POAHelper.narrow(orb.resolve_initial_references("RootPOA")); poa.the_POAManager().activate(); Client c = new Client(); poa.activate_object(c); /* insert an untyped reference */ a.insert_Object(c._this_object()); System.out.println( "Output of generic: " + s.generic( a ) ); incr(1); System.out.print("Passing object again"); /* insert an typed reference */ AnyServerHelper.insert( a, c._this()); System.out.println( "Output of generic: " + s.generic( a ) ); /* insert an any */ System.out.print("Passing an any"); Any inner_any = orb.create_any(); inner_any.insert_string("Hello in any"); a.insert_any(inner_any); System.out.println( "Output of generic: " + s.generic( a ) ); while( counter > 0 ) { System.out.print("Going to sleep to wait for incoming calls"); Thread.currentThread().sleep(3000); } s.shutdown(); } }