Ver Mensaje Individual
  #5 (permalink)  
Antiguo 13/04/2014, 11:04
Qazser
 
Fecha de Ingreso: abril-2014
Ubicación: Canarias!
Mensajes: 150
Antigüedad: 10 años
Puntos: 10
Respuesta: CHAT, ¿como empezar?

Debes tener en siempre en cuenta que chat NO es igual a chat.

Te hablo de experiencia, soy desarrollador de una página de contactos e hicimos que la forma de contactar a la otra persona fuera mediante un chat...Si la otra persona no se encuentra pues cuando se conectaba lo recibia, así nos evitamos crear un módulo de mensajes privados.

Quieres tanto un chat todos con todos, como un chat 1 con 1. Mi consejo es que los trates como 2 cosas diferentes, además complica muchísimo las cosas.

El tema es como plantearselo, una vez que tienes un plan con pautas programarlo es facil.

Usemos un sistema por transmisiones.
0 es a todos
>0 es a refiriendose a la id del usuario conectado al chat

En la base de datos mongo, cuando guardas los mensajes del chat, debes indicar a que canal estaba destinado el mensaje.

En php creas estas funciones (me imagino que el login y eso no necesito explicarlo)

-Solicitar todos los mensajes nuevos (de sala 0 y donde sala == id del usaurio), esta funcion tiene que devolver un array en formato json con el mensaje en si, y la sala a la que estaba destinado...Así en el cliente web podemos separarlo entre: mensaje global y mensaje privado)

-Enviar mensaje a sala, esta funcion la llama el cliente cuando efectivamente envia un mensaje, recibe el mensaje y la sala en la que se encuentra (lo averiguamos mediante el dom del html), devuelve true o false

Ambas funciones recibirán una ruta directa..O sea si pones en el navegador /chatmensaje debe ejecutar directamente esa función..Te dejó la teoria solo ya que no sé como es la base php que elegistes, pero no le veo un gran problema.

En todoas las funciones tienes que comprobar:
-Si el usuario que accede a la función se encuentra
-Que se ha accedido a la ruta mediante AJAX...Si alguien pone manualmente el enlace en el navegador está intentando vulenerar el sistema, no podemos tolerarlo

Hay una funcion genial en php para comprobar si la petición fue recibida mediante ajax o no, te dejo un trozo de mi código

Código PHP:
        //Ser ajax
        
if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest')
            
$this->is_ajax TRUE;
        else
            
$this->is_ajax FALSE
No sé si me he enrollado demasiado, o me falto por explicar algo, avisame si necesitas mas informacion.


Con estas funciones, el cliente deberia saber siempre cuando un mensaje que recibe es de global y cuando es de otro usuario.


EDIT: se me olvidó que no solo se usa para la web sino que tambien para android, etc..Olvida lo de AJAX.
__________________
Pautas php:
No usar libreria mysql, usa mysqli; Separar siempre los controladores de la vista; Procedual es feo, ama los objetos

Última edición por Qazser; 13/04/2014 a las 11:12