Tengo una curiosidad,

¿Qué problema tienes con el Hello World de la asignatura de Arquitectura de 
Sistemas Distribuidos? 
https://moodle.uclm.es/file.php/876/Documentos/Software/hello.tgz

Una sugerencia, no uses este ejemplo que nos mandas como un modelo. Es mucho 
más cómodo y elegante hacer un Ice::Application o un Ice::Service. Ahorras en 
tiempo de desarrollo y de aprendizaje.

La última, usa IceGrid desde ya. Ahorra tiempo y no poco.  Mi hello viene con 
directorio con la configuración de IceGrid.

Salud,
Paco

--
Francisco Moya Fernandez      Computer Architecture and Networks Group
Assistant Professor
[EMAIL PROTECTED]                      School of Computer Science
Fax:(+34 926) 29 53 54                University of Castilla-La Mancha
Tel:(+34 926) 29 54 83                      http://www.inf-cr.uclm.es/



-----Mensaje original-----
De: [EMAIL PROTECTED] en nombre de Manuel David Jiménez Patiño
Enviado el: mar 30/10/2007 19:54
Para: [email protected]
Asunto: Re: [CRySoL] Makefile vs mi infinita ignorancia
 
Aquí está el maldito hola mundo en C++ paso a paso. Sacado del libro que 
recomendaba Tobias

ice-3.2.0.pdf 


Crea el fichero Printer.ice y copia esto

module Demo { 
    interface Printer {
        void printString(string s);
    };
}

Compílalo así:

$ slice2cpp Printer.ice 

te genera un Printer.h y un Printer.cpp porque tú lo vales.


Crea el fichero Server.cpp y sin miedo escribe lo siguiente:




#include <Ice/Ice.h>
#include <Printer.h>
using namespace std;
using namespace Demo;

class PrinterI : public Printer { 
public:
     virtual void printString(const string& s,
                              const Ice::Current&);
};
void
PrinterI::
printString(const string& s, const Ice::Current&)
{
     cout << s << endl;
}

int
main(int argc, char* argv[])
{
     int status = 0;
     Ice::CommunicatorPtr ic;
     try {
         ic = Ice::initialize(argc, argv);



//----------------------------Creamos un adaptador de 
objetos------------------------------------------------


         Ice::ObjectAdapterPtr adapter
             = ic->createObjectAdapterWithEndpoints(
                 "SimplePrinterAdapter", "default -p 10000");



//--------------------------Indicamos al adaptador de objetos la existencia de 
sirvientes-----------------

//el sirviente es el metodo PrinterI, fin del misterio

         Ice::ObjectPtr object = new PrinterI;
         adapter->add(object, ic->stringToIdentity("SimplePrinter")); 





//------------------------Activamos el adaptador de objetos 
--------------------------------------------------


         adapter->activate();
         ic->waitForShutdown();
     } catch (const Ice::Exception& e) {

      cerr << e << endl;
      status = 1;
  } catch (const char* msg) { 
      cerr << msg << endl;
      status = 1;
  }
  if (ic) {
      try {
          ic->destroy();
      } catch (const Ice::Exception& e) {
          cerr << e << endl; 
          status = 1;
      }
  }
  return status;
}


Lo que significa viene en ice-3.2.0.pdf  y si no tienes ni papa de inglés el 
manual de David Vallejo también lo explica bastante bien.

Compila:

$ c++ -I. -I$ICE_HOME/include -c Printer.cpp Server.cpp
$ c++ -o server Printer.o Server.o \-L$ICE_HOME/lib -lIce -lIceUtil

Con esto obtienes un ejecutable llamado server


Ahora toca escribir el cliente, crea Client.cpp:

#include <Ice/Ice.h>
#include <Printer.h>
using namespace std;
using namespace Demo; 


int main(int argc, char* argv[])
{
    int status = 0;
    Ice::CommunicatorPtr ic;
    try {
        ic = Ice::initialize(argc, argv);



//Obtenemos el proxy del objeto remoto(esto es conectar con el servidor de 
antes, ya está)


        Ice::ObjectPrx base = ic->stringToProxy(
                                "SimplePrinter:default -p 10000");



        PrinterPrx printer = PrinterPrx::checkedCast(base);

        if (!printer) 
            throw "Invalid proxy";
        printer->printString("Hello World!");
    } catch (const Ice::Exception& ex) {
        cerr << ex << endl;
        status = 1; 
    } catch (const char* msg) {
        cerr << msg << endl;
        status = 1;
    }
    if (ic)
        ic->destroy();
    return status;
}


Compila:

$ c++ -I. -I$ICE_HOME/include -c Printer.cpp Client.cpp
$ c++ -o client Printer.o Client.o -L$ICE_HOME/lib -lIce -lIceUtil

te crea un ejecutable que se llama

client



Ahora abre un terminal  vete al directorio en cuestión y escribe: 

./server

Por último  abre un terminal  vete al directorio en cuestión y escribe:

./client

Ale ya tenemos el dichoso hola mundo!!!!

Saludos, si tengo tiempo haré una receta formal.

***********************+
"Hay gente pa to y patas", Mi antiguo profesor de geografía.











On 10/30/07, Tobias Diaz <[EMAIL PROTECTED]> wrote:

        El mejor manual: ice-3.2.0.pdf de ZeroC con ejemplos y hola mundos para
        todos...
        
        On Tue, 30 Oct 2007 18:52:32 +0100
        "Manuel David Jiménez Patiño"   <[EMAIL PROTECTED] <mailto:[EMAIL 
PROTECTED]> > wrote:
        
        > Gracias Tobias ya he solucionado el problema, era lo que tú decias.
        >
        > He creado un directorio llamado  Hola_mundo_C++
        > he metido en él los archivos:
        >
        > Client.cpp 
        > Server.cpp
        > Makefile
        >
        > y fuera del directorio Hola_mundo_C++ he colocado los archivos:
        >
        > config
        >  hello.ice
        >
        > lo que pasa es que ahora al hacer:
        >
        > $make
        >
        > me dice el cachondo:
        >
        > g++ -I. -I/usr/include   -c -o Server.o Server.cpp
        > Server.cpp: In member function 'virtual int Server::run(int, char**)':
        > Server.cpp:17: error: no se puede asignar un objeto de tipo abstracto 
        > 'UCLM::Hello'
        > hello.h:183: nota:   porque las siguientes funciones virtual son puras
        > en 'UCLM::Hello':
        > hello.h:196: nota:      virtual void UCLM::Hello::puts(const
        > std::string&, const Ice::Current&) 
        > make: *** [Server.o] Error 1
        >
        >
        >
        > No sé que  está fallando mi fichero hello.ice es el siguiente:
        >
        > module UCLM {
        >   interface Hello {
        >      void puts(string str); 
        >   };
        > };
        >
        >
        > De todas formas no me fio mucho de estos archivos el Server.cpp
        >  traía un include helloI.h cuando el makefile genera un hello.h.
        >
        > Por lo que voy a probar el hola mundo del manual de David Vallejo. 
(En 
        > mi modesta opinión creo  es un manual bastante completo y viene muy
        > bien para empezar)
        >
        > Saludos.
        >
        >
        > ********************************************************************* 
        > ************** "Un documental ha sido líder de audiencia, se llevan
        > las gordas y la inteligencia... Ojalá fuera verdad" Mago de Oz
        >
        >
        >
        >
        >
        >
        >
        > 
        >
        >
        >
        > On 10/30/07, Tobias Diaz <[EMAIL PROTECTED]> wrote:
        > >
        > > Pues resulta que make tiene que usar por algún motivo el archivo de 
        > > configuración (../config), el motivo es que lo tiene en la regla
        > > para "all":
        > > all: config patatin ... patatan
        > >
        > > y si vemos la regla "config": 
        > >
        > > config: ../config
        > >         patatin patatan
        > >
        > > Pues eso quiere decir que para la regla "config" necesaria para
        > > "all" necesita el archivo "../config" que: 
        > > - O existe y no lo busca
        > > - No existe y lo intenta crear, y si no puede: "falta XXX necesario
        > > para el objetivo XXX"
        > >
        > > En resumidas cuentas: create el archivo ../config con la 
        > > configuración necesaria para el ejemplo, si ya hay alguno por ahí,
        > > ponlo en el directorio padre de donde ejecutes make.
        > >
        > >
        > > On Tue, 30 Oct 2007 17:32:35 +0100
        > > "Manuel David Jiménez Patiño"   <[EMAIL PROTECTED]> wrote:
        > >
        > > > Hola a todos estaba intentado realizar  un hola mundo en C++ con 
        > > > el middleware ZeroC Ice.
        > > >
        > > > He sacado los archivos de aquí;
        > > >
        > > > https://arco.inf-cr.uclm.es/svn/public/prj/ice-hello/ 
<https://arco.inf-cr.uclm.es/svn/public/prj/ice-hello/> 
        > > >
        > > > La referencia se encuentra en Crysol:
        > > >
        > > > http://crysol.inf-cr.uclm.es/node/619
        > > > 
        > > > copio todos los archivos tal y como vienen:
        > > >
        > > > EL makefile es el siguiente:
        > > >
        > > >
        > > >
        > > >
        > > >
        > > > GENERATED = hello
        > > >
        > > > all: config $(GENERATED).cpp Server Client
        > > >
        > > > Server: Server.o $(GENERATED).o $(GENERATED)I.o
        > > >
        > > > Server.o: Server.cpp
        > > >
        > > > Client: Client.cpp $(GENERATED).o
        > > >
        > > > $(GENERATED): $(GENERATED).cpp
        > > >
        > > > $(GENERATED).o: $(GENERATED).cpp 
        > > >
        > > > $(GENERATED).cpp: $(GENERATED).ice
        > > >     slice2cpp $<
        > > >
        > > > $(GENERATED).ice: ../$(GENERATED).ice
        > > >     ln -s $< $@
        > > >
        > > > config: ../config
        > > >     ln -s $< $@
        > > >
        > > > clean:
        > > >     $(RM) *.o
        > > >     $(RM) Server Client
        > > > 
        > > > vclean: clean
        > > >     $(RM) *~ $(GENERATED).cpp $(GENERATED).h
        > > >     $(RM) config *.ice
        > > >
        > > >
        > > >
        > > > pero al hacer: 
        > > >
        > > > $make
        > > >
        > > > me sale la siguiente lindeza:
        > > >
        > > > make: *** No hay ninguna regla para construir el objetivo
        > > > `../config', necesario para `config'.  Alto. 
        > > >
        > > >
        > > >
        > > > estoy buscando en ejemplos por internet y en ejemplos propios de
        > > > makefilesque yo tenía por ahí, pero todos ellos son demasiado
        > > > sencillos.
        > > >
        > > > ¿Me pueden ayudar?, no obstante seguiré probando y ejecutando.
        > > >
        > > > Saludos.
        > > >
        > > > ***************************************************************** 
        > > > **** *********************************
        > > >  De los elementos de la tabla periódica mis favoritos siempre
        > > >  fueron los
        > > > raros.
        > >
        > > _______________________________________________ 
        > > CRySoL mailing list
        > > http://crysol.inf-cr.uclm.es/
        > > https://arco.inf-cr.uclm.es/cgi-bin/mailman/listinfo/crysol 
<https://arco.inf-cr.uclm.es/cgi-bin/mailman/listinfo/crysol> 
        > >
        > >
        > >
        
        _______________________________________________
        CRySoL mailing list
        http://crysol.inf-cr.uclm.es/
        https://arco.inf-cr.uclm.es/cgi-bin/mailman/listinfo/crysol 
<https://arco.inf-cr.uclm.es/cgi-bin/mailman/listinfo/crysol> 
        
        
        



_______________________________________________
CRySoL mailing list
http://crysol.inf-cr.uclm.es/
https://arco.inf-cr.uclm.es/cgi-bin/mailman/listinfo/crysol

Responder a