[Jde-dev] Interfaces ICE básicos. Problema con cliente/servidor

Julio Vega julio.vega en urjc.es
Sab Nov 26 15:39:38 CET 2011


   Bueno, ya finalmente resolvimos el problema de una forma sencilla. 
Eduardo propuso la idea de crear una clase-singleton a modo de "buffer". 
Así, nos evitamos los problemas de pasar parámetros (en este caso el 
float que queremos modificar en el "servidor" intermedio).
   Dicho y hecho. Tenéis la solución, a modo de esqueleto básico de paso 
de un float, en [1]. Espero que os sea útil a aquéllos que tengáis 
necesidades similares.

   Gracias a todos. Es un lujazo contar con esta comunidad de 
desarrolladores ;)

   [1] http://svn.jderobot.org/robotvision/trunk/jmvegaProjects/basicICE

On 11-11-24 12:09 PM, David Lobato wrote:
> Pero puedes acceder al communicator ya inicializado 
> por jderobotice::Application. Para eso se pasa la instancia de Context 
> [1] a todos los elementos que quieren "jugar" con Ice.
> Fijate que lo pasas en el constructor de DummyII
>
> [1] http://svn.jderobot.org/jderobot/trunk/src/libs/jderobotice/context.h
>
> 2011/11/24 Julio Vega <julio.vega en urjc.es <mailto:julio.vega en urjc.es>>
>
>     Porque el objeto de Ice::Communicator se define usando esos
>     parámetros. Y luego ese objeto se usa para crear el proxy mediante
>     propertyToProxy.
>
>
>     David Lobato <dav.lobato en gmail.com <mailto:dav.lobato en gmail.com>>
>     escribió:
>
>         Julio,
>
>         No veo los problemas...
>
>         1. Para que necesitas argc y argv exactamente?
>         2. En el servidor normal declaras DummyI de la misma manera, no?
>
>
>
>         2011/11/24 Julio Vega <julio.vega en urjc.es
>         <mailto:julio.vega en urjc.es>>
>
>             Bueno, tras pelearme con dummyInTheMiddle para intentar
>             adaptarlo a lo que comentaba David, sigo teniendo los
>             mismos problemas:
>             - De algún modo he de pasar argc y argv a la clase DummyII
>             para, por ejemplo, acceder al PropertyToProxy del
>             Communicator.
>             - No es posible reservar el interfaz dummy2, que es de
>             tipo abstracto, habiéndolo declarado como un Object
>             genérico. Cualquier posibilidad humana hace que el
>             compilador te diga que él está ahí :)
>
>             En resumen, joeer con Ice.
>
>
>
>             David Lobato <dav.lobato en gmail.com
>             <mailto:dav.lobato en gmail.com>> escribió:
>
>                 Julio,
>
>                 Ups! No vi el enlace, perdón!
>
>                 El dummyInTheMiddle es un buen lio... No entiendo que
>                 hace esa hebra por ahí. Ãndate con ojo a la hora de
>                 mezclar pthreads a pelo con Ice, a veces no funciona
>                 como se espera.
>                 Según entiendo tu problema, lo que intentas hacer es
>                 algo tipo cache, que se pone entre medias de un
>                 servidor y un cliente, no?
>                 Estoy un poco oxidado con ICE, pero creo que debería
>                 ser algo como lo que te paso en el adjunto. Vamos, que
>                 el propio objeto tiene un proxy al servidor real, y en
>                 sus llamadas, según la lógica que tu tengas pensado,
>                 llama al servidor real.
>
>                 Rober, lo pipes son muy útiles y todo lo que tu
>                 quieras, pero joder, ICE debe tener algún mecanismo
>                 para lidiar con esto. Además, usando pipes la solución
>                 no es portable, usando Ice si.
>
>                 Saludetes!
>
>
>                 2011/11/23 Roberto Calvo <rocapal en libresoft.es
>                 <mailto:rocapal en libresoft.es>>
>
>                     El mié, 23-11-2011 a las 16:05 +0000, David Lobato
>                     escribió:
>                     > Julio,
>                     >
>                     >
>                     > Por qué no pones el código con el que estás
>                     teniendo problemas?
>                     > Sin entender el problema del todo, me parece que
>                     usar pipes es una
>                     > solución un poco ñapis...
>
>                     Verás como te escuchen NEMO y cia! Ahhh y los que
>                     programan UNIX ;-)
>
>                     >
>                     >
>                     > Saludetes!
>                     >
>                     > 2011/11/23 Julio Vega <julio.vega en urjc.es
>                     <mailto:julio.vega en urjc.es>>
>                     >         Eso que dices suena a solución :) me voy
>                     a poner a añadir eso
>                     >         y ya te cuento.
>                     >         Gracias Rober!
>                     >
>                     >         Roberto Calvo <rocapal en libresoft.es
>                     <mailto:rocapal en libresoft.es>> escribió:
>                     >
>                     >                 En ese mismo ejemplo, yo tuve un
>                     problema similar y
>                     >                 puede que te ayude a
>                     >                 ti. Lo resolví usando pipes.
>                     >
>                     >                 Si miras "startRecording", hace
>                     de cliente, llama a un
>                     >                 Recorder con un
>                     >                 callback y espera leyendo el
>                     pipe. El callback [1],
>                     >                 que hace de
>                     >                 servidor, recibe la respuesta y
>                     escribe en el pipe.
>                     >
>                     >                 En este caso es síncrono, pero
>                     podrías hacerlo
>                     >                 asíncrono. Podrías probar
>                     >                 quitando el thread que tienes, y
>                     metiéndolo en la
>                     >                 clase servidora para
>                     >                 que haga un read del pipe. En el
>                     main, cuando recibes
>                     >                 el número haces el
>                     >                 write en el pipe. Creo que eso
>                     debería funcionarte.
>                     >
>                     >                 Un saludete!
>                     >
>                     >                 [1] class
>                     AMI_Recorder_startRecordingI : public
>                     >                
>                     jderobot::AMI_Recorder_startRecording
>                     >
>                     >                 El mié, 23-11-2011 a las 16:06
>                     +0100, Julio Vega
>                     >                 escribió:
>                     > > Ya he estado ojeando el componente que me dices y
>                     >                 sí, actúa como
>                     > > cliente y servidor al mismo tiempo.
>                     > > Ese problema lo tengo solucionado. El conflicto
>                     >                 viene cuando lo que
>                     > > quiero es que haga de cliente y además
>                     modifique lo
>                     >                 que pilla como
>                     > > cliente, y que sirva ese nuevo valor como
>                     >                 servidor... No sé como pasar
>                     > > ese valor, que es un float, dentro del componente
>                     >                 hasta llegar a la
>                     > > zona "servidora".
>                     > >
>                     > > Roberto Calvo <rocapal en libresoft.es
>                     <mailto:rocapal en libresoft.es>> escribió:
>                     > >
>                     > >         Julito,
>                     > >
>                     > >         ¿Qué es lo que no te funciona, no te
>                     hace de
>                     >                 cliente, o de servidor? O
>                     > >         nada de nada.
>                     > >
>                     > >         Yo lo que puedo decirte es que el
>                     componente
>                     >                 RecordingServer [1] hace de
>                     > >         servidor y de cliente (realiza
>                     peticiones al
>                     >                 Recorder). Echale un ojo a
>                     > >         como configuro la Ice::Application (abajo
>                     >                 del todo del fichero cpp), que
>                     > >         pueden ir por ahí los tiros.
>                     > >
>                     > >         Un saludete!
>                     > >
>                     > >         [1]
>                     > >
>                     >
>                     http://svn.jderobot.org/jderobot/trunk/src/components/recordingserver/
>                     > >
>                     > >         El mar, 22-11-2011 a las 23:58 +0100,
>                     Julio
>                     >                 Vega escribió:
>                     > > > Hola developers,
>                     > > >
>                     > > >    he creado unos componentes ICE en [1].
>                     >                 Estos componentes son básicos,
>                     > > > así como el interfaz ICE creado. Tenemos
>                     >                 lo siguiente:
>                     > > >    - dummyServer: ejemplo sencillo de
>                     >                 "servidor"
>                     > >         ICE.
>                     > > >    - dummyClient: ejemplo sencillo de
>                     >                 "cliente" ICE.
>                     > > >    - dummyInTheMiddle: ejemplo
>                     >                 no-tan-sencillo de componente
>                     que hace de
>                     > > > "cliente-servidor" ICE.
>                     > > >
>                     > > >    El problema está en ese tercer
>                     >                 componente. No logro hacer que
>                     > > > funcione como cliente y como servidor al
>                     >                 mismo tiempo. La idea es que
>                     > > > tal componente sea cliente de
>                     >                 "dummyServer" (del cual recibe
>                     un número)
>                     > > > y, por ejemplo, modifique ese número para
>                     >                 que "dummyClient" lo pille de
>                     > > > aquí modificado.
>                     > > >    Sí, ya sé que es un ejemplo tontorrón
>                     >                 (de ahí el nombre), y quizás
>                     > > > sin sentido. Pero obviamente el objetivo
>                     >                 es otro componente mucho más
>                     > > > complejo...
>                     > > >
>                     > > >    Por favor, si alguien conoce algo más
>                     >                 sobre ICE y puede echar un ojo
>                     > > > a ese componente, a ver qué falla, se lo
>                     >                 agradecería.
>                     > > >
>                     > > >    Saludos,
>                     > > >
>                     > > >    Julio
>                     > > >
>                     > > >    [
>                     > >          1]
>                     >
>                     http://svn.jderobot.org/robotvision/trunk/jmvegaProjects/basicICE
>                     > > >
>                     > >
>                     > >         --
>                     > >         Roberto Calvo Palomino          | Libre
>                     >                 Software Engineering Lab (GSyC)
>                     > >         Tel: (+34) 91 488 87 73
>                     <tel:%28%2B34%29%2091%20488%2087%2073>         |
>                     >                 Universidad Rey Juan Carlos
>                     > > rocapal en libresoft.es
>                     <mailto:rocapal en libresoft.es>            | Edif.
>                     >                 Biblioteca - Despacho B103
>                     > > http://libresoft.es/            | Camino del
>                     >                 Molino s/n - 28943  (Madrid)
>                     > >
>                     > >         GPG-KEY:
>                     > http://gsyc.es/~rocapal/rocapal.gpg
>                     <http://gsyc.es/%7Erocapal/rocapal.gpg>
>                     > >
>                     >                
>                     ______________________________________________________
>                     >
>                     >
>                     > > Jde-developers mailing list
>                     > > Jde-developers en gsyc.es
>                     <mailto:Jde-developers en gsyc.es>
>                     > >
>                     >
>                     http://gsyc.escet.urjc.es/cgi-bin/mailman/listinfo/jde-developers
>                     >
>                     >                 --
>                     >                 Roberto Calvo Palomino        
>                      | Libre Software
>                     >                 Engineering Lab (GSyC)
>                     >                 Tel: (+34) 91 488 87 73
>                     <tel:%28%2B34%29%2091%20488%2087%2073>         |
>                     Universidad Rey Juan
>                     >                 Carlos
>                     > rocapal en libresoft.es
>                     <mailto:rocapal en libresoft.es>            | Edif.
>                     Biblioteca -
>                     >                 Despacho B103
>                     > http://libresoft.es/            | Camino del Molino
>                     >                 s/n - 28943  (Madrid)
>                     >
>                     >                 GPG-KEY:
>                     http://gsyc.es/~rocapal/rocapal.gpg
>                     <http://gsyc.es/%7Erocapal/rocapal.gpg>
>                     >
>                     >
>                     >        
>                     _______________________________________________
>                     >         Jde-developers mailing list
>                     > Jde-developers en gsyc.es
>                     <mailto:Jde-developers en gsyc.es>
>                     >
>                     http://gsyc.escet.urjc.es/cgi-bin/mailman/listinfo/jde-developers
>                     >
>                     >
>                     >
>                     > _______________________________________________
>                     > Jde-developers mailing list
>                     > Jde-developers en gsyc.es
>                     <mailto:Jde-developers en gsyc.es>
>                     >
>                     http://gsyc.escet.urjc.es/cgi-bin/mailman/listinfo/jde-developers
>
>                     --
>                     Roberto Calvo Palomino          | Libre Software
>                     Engineering Lab (GSyC)
>                     Tel: (+34) 91 488 87 73
>                     <tel:%28%2B34%29%2091%20488%2087%2073>         |
>                     Universidad Rey Juan Carlos
>                     rocapal en libresoft.es <mailto:rocapal en libresoft.es>
>                                | Edif. Biblioteca - Despacho B103
>                     http://libresoft.es/            | Camino del
>                     Molino s/n - 28943  (Madrid)
>
>                     GPG-KEY: http://gsyc.es/~rocapal/rocapal.gpg
>                     <http://gsyc.es/%7Erocapal/rocapal.gpg>
>
>
>
>

-- 
Julio Vega | http://robotica-urjc.es/jmvega

------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: http://gsyc.escet.urjc.es/pipermail/jde-developers/attachments/20111126/8b2e1a62/attachment-0001.htm 


More information about the Jde-developers mailing list