package tpcorba;
import org.omg.CORBA.*;
import java.lang.*;
import java.util.*;
import java.io.*;
public class Client
{
public static void main(String args[]) throws IOException
{
////////////////////////////////////////////////////
// On initialise l'ORB
////////////////////////////////////////////////////
Properties props = System.getProperties();
props.put("org.omg.CORBA.ORBClass", "com.ooc.CORBA.ORB");
props.put("org.omg.CORBA.ORBSingletonClass",
"com.ooc.CORBA.ORBSingleton");
System.setProperties(props);
ORB orb = ORB.init(args, props);
if(args.length!=1)
{
System.err.println("utilisation : Client nom-calculette");
System.exit(1);
}
////////////////////////////////////////////////////
// Recuperation de la reference d'objet du serveur
// Dans cet exemple, la reference est stockee sous
// la forme d'une chaine de caractere (IOR) dans un
// fichier. A ce stade, il est bien sur possible
// d'invoquer un service de nommage.
////////////////////////////////////////////////////
String ior = null;
try
{
String ref = "usine.ref";
FileInputStream file = new FileInputStream(ref);
BufferedReader in = new BufferedReader(new InputStreamReader(file));
ior = in.readLine();
file.close();
}
catch(IOException ex)
{
System.err.println("Impossible de lire fichier : `" +
ex.getMessage() + "'");
System.exit(1);
}
////////////////////////////////////////////////////
// Construction d'une reference d'objet, non type d'abord,
// puis "cast" en une reference sur l'interface
// "calcul" avec narrow ("cast" dynamique)
////////////////////////////////////////////////////
org.omg.CORBA.Object obj = orb.string_to_object(ior);
if(obj==null)
{
System.err.println("Erreur sur string_to_object() ");
throw new RuntimeException();
}
tpcorba.usine us = tpcorba.usineHelper.narrow(obj);
if(us==null)
{
System.err.println("Erreur sur narrow() ");
throw new RuntimeException();
}
////////////////////////////////////////////////////
// Invocations du serveur
////////////////////////////////////////////////////
char car;
tpcorba.calcul calc=null;
System.out.println(" Que faire ?");
System.out.println(" cre(a)tion, d(e)struction");
System.out.println(" (c)onnecter, (d)econnecter ");
System.out.println(" e(f)fectuer les calculs sur la memoire");
while(true)
{
try
{
car = (char)System.in.read();
switch(car)
{
case 'c':
{
calculHolder calcRef = new calculHolder(null);
us.connecter(calcRef,args[0]);
calc=calcRef.value;
break;
}
case 'd':
{
us.deconnecter(args[0]);
calc=null;
break;
}
case 'a':
{
calculHolder calcRef = new calculHolder(null);
us.creation(calcRef,args[0]);
calc=calcRef.value;
break;
}
case 'e':
{
us.suppression(args[0]);
calc=null;
break;
}
case 'f':
{
calc.ajouteMemoire(10);
System.out.println("Valeur de la memoire : " + calc.memoire());
break;
}
case '\n':
{
break;
}
default: System.out.println(" Saisir 'c', 'd', 'a', 'e' ou 'f'");
}
}
catch(IOException ex)
{
System.out.println("Erreur lecture commande (char)");
}
catch(calculatriceEnUtilisation ex)
{
System.err.println("Exception : calculatriceEnUtilisation " );
}
catch(calculatriceDejaExistante ex)
{
System.err.println("Exception : calculatriceDejaExistante " );
}
catch(calculatriceInconnue ex)
{
System.err.println("Exception : calculatriceInconnue " );
}
catch(aucunUtilisateur ex)
{
System.err.println("Exception : aucunUtilisateur " );
}
catch(plusDePlace ex)
{
System.err.println("Exception : plusDePlace" );
}
catch(NullPointerException ex)
{
System.out.println("Vous devez connecter ou creer la calculatrice avant de l'utiliser");
}
}
}
}