Giter Site home page Giter Site logo

psd's Introduction

Servicio de Mensajería Instantánea - IMS

Este es uno de los proyectos elaborados para la asignatura de Programación de Sistemas Distribuidos.

Somos conscientes de lo rudimentarias e ineficientes que son las estructuras de datos utilizadas, así como el uso de memoria estática en vez de dinámica en muchos casos. Debido al poco tiempo disponible para llevar a cabo la práctica y por alejarse del objetivo principal de ésta, consideramos adecuadas estas decisiones de implementación.

Esta código ha sido escrito por:

Preparación del entorno (Ubuntu, Linux)

  1. Descargar la version 2.8.24 de gsoap

  2. Copiar el fichero gsoap_2.8.24.zip en $HOME

     > cp gsoap_2.8.24.zip $HOME 
  3. Descomprimir con:

     > unzip gsoap_2.8.24.zip 

    Se generará un directorio gsoap-2.8 - Ya podemos borrar el .zip

  4. Instalar los siguientes paquetes:

     > sudo apt-get install bison flex byacc openssl g++ libssl-dev 
  5. Configurar la instalación (dentro del directorio gsoap-2.8):

     > ./configure 
  6. Compilamos (dentro del directorio gsoap-2.8):

     > make 
  7. Creamos el directorio para la instalación:

     > mkdir $HOME/gsoap-linux_2.8.24 
  8. Instalamos:

     > make install exec_prefix=$HOME/gsoap-linux_2.8.24 

    Si hay probelmas de permisos:

     > sudo make install exec_prefix=$HOME/gsoap-linux_2.8.24 
  9. Incluimos en $HOME/.bashrc

    
          > export GSOAP_HOME=$HOME/gsoap-linux_2.8.24
          > export GSOAP_LIB=${GSOAP_HOME}/lib
          > export GSOAP_INCLUDE=${GSOAP_HOME}/include
          > PATH=$PATH:$GSOAP_HOME/bin
        

Compilación y ejecución del servidor

  1. Generamos los stubs a partir de la interfaz remota (fichero: ims.h):

     $ soapcpp2 -c -S ims.h 
  2. Compilamos

     > make server 

    Generará un ejecutable llamado 'servidor'

  3. Ejecución:

     > ./server [puerto] 

    Por ejemplo:

     > ./server 5000 
## Compilación y ejecución del cliente
  1. Generamos los stubs a partir de la interfaz remota (fichero: ims.h):

     $ soapcpp2 -c -C ims.h 
  2. Compilamos

     > make client 

    Generará un ejecutable llamado 'cliente'

  3. Ejecución:

     > ./client [URL + puerto] 

    Por ejemplo:

     > ./client http://192.168.0.35:5000 

psd's People

Contributors

amiedes avatar densypko avatar

Watchers

 avatar  avatar

psd's Issues

Hebras y CTRL+C

Hará falta crear un handler para SIGINT que indique a las hebras que deben finalizar su ejecución.

  • Crear mutex para las variables compartidas, que no lo estoy haciendo.

TODO: ims__answerFriendRequest()

TODO: Cuando esté implementada la parte de mensajería, deberá colocar un mensaje para emisor y receptor informando del resultado de la petición.

Tareas pendientes

  • Persistencia de peticiones de amistad ✔
  • Captura de Ctrl+C, alarm? ✔
  • Concurrencia en el servidor ✔
  • Proteger variables globales con mutex ✔
  • Que pida la URL, en vez de usar localhost ✔
  • Limpiar código, quitar líneas de printf(...) -> ambos
  • Mejorar el readme del repositorio ->✔
  • Pruebas en laboratorio -> ✔
  • Poner licencia GPL
  • Captura Ctr+C en cliente ✔
  • En la memoria, poner lo de que la persistencia del servidor se hace después de atender cada petición en vez de con una alarma por el tema de los handlers y las funciones 'reentrant' ✔

Notificación

En el último merge que has hecho la aplicación no finciona. Yo he hecho lo que hemos hablado y lo he subido, pero no lo he podido probar.

Control de errores y coherencia

  • Mandarse peticiones de amistad a sí mismo.✔
  • Mandar peticiones de amistad a usuarios que ya son nuestros amigos.✔
  • Enviar peticiones de amistad a un usuario que no existe.✔
  • Hacer login con un usuario que ya está logueado en el sistema.✔
  • Cuando un usuario se da de baja, actualizar el rastro que deja:
              1. Lista de usuarios ✔
                              - Falta que en vez de borrar ponga baja = 1✔
              2. Lista de amistades (la propia) ✔
              3. Lista de amistades (las de los demás que me tengan como amigo) ✔
              4. Peticiones de amistad pendientes ✔
              5. Mensajes y conversaciones ✔
    
  • Cuando un usuario se da de alta, crear una entrada para él en la estructura de 'amigos' del servidor.✔
  • Cuando un cliente acepta una petición de amistad, pedir al servidor su lista de amigos actualizada.✔
  • Registrar un usuario que ya existe. ✔
  • Habiendo dos usuarios amigos con la sesión iniciada, si uno de los dos se da de baja habría que actualizar la lista de amigos del otro.✔
  • Controlar en el Servidor que no se puede enviar un mensaje al usuario que no esta en la lista de los amigos, en el Cliente lo he hecho pero el servidor no debe fiarse de los Clientes. ✔
  • Mandar petición de amistad a alguien que se ha dado de baja.✔

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.