* Se arregla un bug en el constructor al verificar conexiones
* Se ponen un poco mas bonitas las lineas de las conexiones logicas
* Se arregla el modelo para prevenir colcagas cuando el circuito es
realimentado. Entraba en un loop infinito. Ahora simula bien, aunque
en algunos casos se actualiza mal. Voy a tratar de resolverlo pronto.
Nicolás Dimov [Mon, 24 Nov 2003 03:55:12 +0000 (03:55 +0000)]
-Se carga la lista de items al ir haciendo click sobre ellos
-Se corrige una huevada cuando se dibujan los conectores logicos
-No se por que cuando un item rota se borran los conectores
-No se que mas cambie
Se agrega una mejora visual para poder ver los colores de todos
los componentes al mismo tiempo. Esto ira mejorando en cada
item con el correr de la semana.
* Se agregan #ifdef DEBUG a los simulate() del modelo, para poder sacar
los mensages que tira el modelo
* El modelo ahora destruye los items al ser destruido
* Tambien todos los parsers de xml llaman a xmlFreeDoc para liberar la memoria
Nicolás Dimov [Sun, 23 Nov 2003 23:15:49 +0000 (23:15 +0000)]
-Cambie un poco lo que hizo Rich para dibujar los conectores
-Se dibujan cuando se activa la logica
-Tengo que modificar las posiciones de los cuadraditos porque algunos quedan
afuera de la figura
-Hay que arreglar algunos detalles para que no se borren cuando se hace click sobre algun item o cuando se rota el mismo
Pero la idea esta, me parece que asi queda lindo...
Se agrega como crear un cuadradito de color para indicar donde esta la entrada y donde esta
la salida para los conectores logico.
Solo se implemento en Pump y no tiene en cuenta el tema de la rotacion.
Lo que habria que hacer es :
* Terminar bien el pump y elegir una posicion linda para ponerlos
* Hacer que solo aparezcan cuando el checkbox esta activo
* Creo que seria mas lindo dibujar un circulo que un cuadrado (aunque
la deteccion si se haga con un cuadrado que es mas facil)
* Hacerle lo mismo al resto de los items
Se corrige el bug que hacia que aparezca un error EADDRINUSE (que el puerto ya
estaba siendo utilizado) cuando el server se cerraba con conexiones y se trataba
de comenzar de nuevo enseguida.
Varios cambios:
- Se empiezan a emprolijar las cosas, empezando por Runnable:
* Se ponen atributos y signals como privados y se agrega mutex.
* El thread que usa ahora no es joinable, por lo que finish() ahora no
lleva argumentos.
- Se arreglan todas las otras clases (y el programa principal) para que anden
con el nuevo Runnable (haciendo loops de espera cuando deben 'joinear' un
thread).
- Se actuliza el plaqui-client y se le arreglan un par de bugs (ya anda la
opcion desconectar del menu).
- Se implementa el comando /server/stop por completo (usando una conexion
suicida para salir del accept()).
- Se agregan separadores de tipos, constantes, atributos y metodos mas
llamativos :)
* Se agrega el tanque la suma de color (no me gusta como esta, vere si la puedo hacer mas linda)
* El cliente ahra tiene un boton On/Off que apaga o enciende un elemento
dependiendo de su estado actual. Anda para cualquier objeto, despues
voy a filtrar para que solo se pueda usar en exclusa y bomba.
Es muy lindo apagar la bomba de arriba a la derecha y ver como se vacia
el tanque, y cuando se vuelve a encender se llena :-)
* Todos los items, menos el tanque, ya actualizan bien los colores
* El cliente ya muestra bien todos los cambios de color (en el ejemplo
solo se aprecia en la union, que suma rojo+negro)
* Al desconectar se envian /connection/stop/get_host()/7522 pero recibo
un error 404
* Se agrega un poco de color al ejemplo
Faltaría ver si el server ya acepta abrir o cerrar bombas/exclusas de forma manual
para implementarlo en el cliente. Mañana miro el codigo, no toy para leer nada :-)
- Se corrige el bug que hacia que no se deje de transmitir con el comando
/transmission/stop/.
- Aparentemente tambien se arregla el bug de desconexion del cliente (pero no
estoy seguro, despues de cambiar varias cosas creo que al final quedo como al
principio).
* Se completa el cliente. Ya muestra todas las propiedades y el ultimo item que
se selecciono se va actualizando automaticamente
* Se pone por default el puero 7522 en el Cliente
* Se modifica el XML de prueba para llegar a ver como se actualiza el tanque.
Hay un bug en la Division (maldita sea!), vere si llego a encontrar que es antes de mañana.
Se arregla bug en la union que hacia que el flujo inicial este en 0, y eso condicionaba todo el
circuito armado a andal mal.
Ahora el ejemplo del server corre como trompada
* El cliente ahora refleja un poco mejor los datos del server
* Se agregan verificaciones varias para conexion != NULL (se sigue colgando el desconectar)
Se corrigen varios bugs en el parseo del XML de un frame :
* Se estaba buscando propiedad nombre, cuando en realidad se llama name :-)
* Se corrigen los punteros que se utilizan en cada etapa del parseo,habia
cosas mal utilizadas
Ya se puede ver como se actualizan los flujos de los caños!!!!!!!!
En un rato comienzo a poner los otros elementos, tanto en el modelo como en
el cliente
Se emprolija un poco:
- Se mejora mucho el manejo y deteccion de errores.
- Tambien se mejora la informacion de debug poniendo el numero de linea.
- Se pone en todos los objetos que se conectan la parte de la conexion en el
constructor para que pueda capturarse una eventual excepcion.
- Se crea una nueva signal_error para avisar sobre cualquier error que pase en
el run() que no puede lanzar excepciones.
Nicolás Dimov [Wed, 19 Nov 2003 21:23:21 +0000 (21:23 +0000)]
-Los cables que van a las compuertas se posicionan en la entrada o salida y no en la punta de la imagen
-Las compuertas se guardan en el xml con un formato discutible
-muchas cosas quedan por arreglar pero creo que para maniana sirve
-Las compuertas no validan del todo bien su conexionado
-todavia no se pueden conectar compuertas ente si.
Use un criterio de conexion entre compuertas e items medio pedorro
porque la salida de una compuerta siempre se conecta a la entrada de un item y
alreves, la entrada de una compuerta siempre se conecta a la salida de un item.
Esto puede llegar a traer algunas imposibilidades de conexion. lo voy a tener que pensar
con mas tiempo..
Nicolás Dimov [Wed, 19 Nov 2003 03:35:04 +0000 (03:35 +0000)]
-se pueden tirar cables de una manera mas comoda pero como diria TU SAM puede fallar...
MODO DE USO
-accionar el boton logica
-click en una compuerta
-click en la entrada o salida de un item
esto es:
exclusa entrada: al medio y arriba (en el pingorcho)
salida: al medio y abajo
bomba entrada: (en el conector) la mitad superior
salida: mitad inferior
tanque entrada conector superior
salida conector inferior
todo esto es aproximado
igual se van a dar cuenta
ojo que las primeras lineas las tira en cualquier lado (no se por que)
pero cuando rota el item se acomodan
-Se cuelga bastante, asi que tengan cuidado
intenten eliminar lo menos posible
- Se agrega el metodo Model::Simulator::set_open() para abrir y cerrar bombas y
exclusas.
- Se actualiza el server para usarlo y se implementa el comando /plant/set/.
- Se limpia un poco mas las respuestas, ahora son todas (?) XML aunque no
definitivas.
- Se agrega una funcion templateada to() para convertir de un tipo de dato
arbitrario a otro a traves de un stringstream (similar a String::to()).
- Se usa la nueva funcion en varios lugares.
- Se limpian un poco las respuestas, ahora lo que van a ser respuestas reales,
se manda en XML.
- Se implementa el esqueleto del comando /plant/set. Me falta conocer algunos
detalles de que y como setear las cosas para terminarlo.
Se carga la planta al conectarse. Falla cada tanto, no puedo determinar por que.
Al parecer es un problema de threads dentro de la Gtk+, pero no puedo entender
por que cuando cargo del archivo anda bien, y cuando cargo desde memoria
anda mal!!!
Nicolás Dimov [Tue, 18 Nov 2003 22:25:37 +0000 (22:25 +0000)]
-Se arregla lo del id cuando se carga una planta
-si esta checkeado el boton "logica" haciendo click sobre una compuerta y luego sobre
un item, tira un cable
-si se elimina un item, los cables se borran
-se muevene todos juntos cables+items, pero al rotar un item conectado me falta hacer un repinte
ya lo van a ver...
-el constructor tiene un metodo para borrar todos los itmes pero no hay boton para llamarlo (depues lo pongo)
pero igual la funcion es llamada en el destructor del constructor (con esa los mate)
-en el tanque la bomba y la exclusa los cables se conectan en una posicion mas linda (por lo menos en la exclusa)
-para los cables que salen de las compuertas se me ocurrio discriminar por la posicion donde se clickea en la misma
aunque eso se me hace que va a ser medio incomodo porque son pequenias, pero me parece que estaria bueno igual
-mirenlo y pasen los bugs!
Se corrige un bug en la carga del XML. Me habia olvidado que hay elementos con 3 entradas
y yo solo leia hasta 2 :-) ... ahora el ejemplo por defecto carga y corre
joya.
* Se agrega carga de una planta desde un XML (Archivo->Abrir)
* Se saca el menu Guardar Como
* Se hacen todos los dialogos Modal
TODO :
* cargar el color de la bomba y el tanque desde el XML
* eliminar la planta actual cuando se abre una nueva (para que no quede basura)
* Poner cartelitos de "Uds no ha salvado su trabajo pedaso de idiota, desea hacerlo ahora?"
* Seguro que algo se me escapa ahora :-)
El ControlClient ya puede recibir "frames" con el estado de la planta! :-D
Esta hecho un poco a las patadas, pero asi puedo laburar un poco mas tranquilo
sabiendo que no trabo el avance del cliente grafico.
El Receiver se levanta cuando se crea el ControlClient, asi que todo lo que hay
que hacer es mandar un comando /transmission/start/default/localhost/7528 para
que empiece a transmitirnos el server (bueno, localhost si corre local).
Se actualiza el ejemplo para tener de referencia (igual todo lo que hay que
hacer es atender la signal_frame_received(const std::string& frame) que entrega
el XML del frame recibido).
* Se modifica la estructura de directorios : src include dialogs y pixmaps
* Se generan Makefiles.am para cada directorio
Bien, ahora el constructor ya se compila e instala utilizando autoconf y
automake.
Para compilar la primera vez :
#> aclocal
#> autoconf
#> automake -a
Con eso se crean loa Makefile.in en cada directorio y el script confugure.
El programa debe ser instalado ahora para poder ser usado. Cuando se corre
configure, por default se toma como path de instalacion el /usr/local (seria el
PREFIX).
El ejecutable queda en PREFIX/bin y los datos en :
* dialogos (.glade e imagenes que tienen definido el .glade adentro ) :
PREFIX/share/plaqui-constructor/dialogs
* pixmaps : PREFIX/share/plaqui-constructor/pixmaps
El codigo fue adaptado para que busque las cosas en esos directorio, por eso sin
instalar no va a funcionar el programa. Si se quiere cambiar el /usr/local por
otro dir, se le debe pasar al configure :
#>./configure --prefix=/path/to/install
Yo por ejemplo lo tengo asi :
#>./configure --prefix=/home/gazer/local
para tener un directorio de prueba (local debe ser creado) ...
El modelo ya carga el XML completo, completo (todos los items y sos
propiedades) y ademas carga de forma correcta las conexiones de
toooodddooossss los items y genera un modelo funcional y que simula :-)
Esto es un paso importante, ya que si ahora sacamos el modelo entre hoy y
mañana ya tenemos el TP terminado, salvando detalles y bugs que aparezcan.