Websockets

Websocket

WebSocket es una tecnología que proporciona un canal de comunicación bidireccional y full-duplex sobre un único socket TCP. Está diseñada para ser implementada en navegadores y servidores web, pero puede utilizarse por cualquier aplicación cliente/servidor.

El cliente se subscribe al websocket en una sala (en aTurnos es a cada equipo) y recibe la información en tiempo real cuando sucede en el servidor de aTurnos.

Websocket en aTurnos

El servidor de websocket de aTurnos se encuentra en:

wss://www.aturnos.com:3001

En aTurnos está implementado por websockets la información que llega de:

  • Mensajes de chat.
  • Peticiones de eventos.
  • Marcajes de entrada/salida del control de presencia.

Cada mensaje recibido desde el websocket tiene el tipo de elemento que se emite y el elemento sobre el que se ha hecho la modificación, creación o eliminación. De esta manera podremos recibir mensajes de los tipos:

  • add_advertisements: añadir mensaje de chat.
  • change_advertisements: cambiar mensajes de chat.
  • delete_advertisment: borrado de mensajes de chat.
  • changes_advertisements: cualquier modificación de mensajes de chat (agrupa a cualquiera de los anteriores de mensajes de chat).
  • add_request: añadir peticiones de evento.
  • change_request: cambiar peticiones de evento.
  • delete_request: borrado de peticiones de evento.
  • changes_requests: cualquier modificación de peticiones de evento (agrupa a cualquiera de los anteriores de peticiones de evento).
  • add_task: añadir tarea.
  • change_task: modificar tarea.
  • delete_task: borrado de tarea.
  • changes_tasks: cualquier modificación de tareas (agrupa a cualquiera de los anteriores de mensajes de chat).
  • add_check2in: añadir marcaje.
  • change_check2in: modificar marcaje.
  • delete_check2in: borrado de marcaje.
  • changes_check2ins: cualquier modificación de marcajes (agrupa a cualquiera de los anteriores de marcajes).

Los eventos de websocket son emitidos solo al aTurnos que ha abierto la conexión, ya que la conexión necesita el id_aturno para establecerse.

Para la conexión al websocket se necesita un token del APIREST de aTurnos. Una forma de conexión posible sería con el paquete socket.io (https://socket.io) de Javascript. Se adjunta un ejemplo de conexión:

var websocket_server = ‘wss://test.aturnos.com:3001’;

 

var websocket = {

status:false,

socket:null,

initLoad:function(){

this.socket=io(websocket_server);

this.checkStatus();

},

checkStatus:function(){

this.socket.on(‘connect’, ()=>{

console.log(‘conectado al servidor’);

this.status=true;

});

this.socket.on(‘disconnect’, ()=>{

console.log(‘desconectado del servidor’);

this.status=false;

})

},

emit:function(event, payload, callback){

if(payload===undefined)payload={};

if(callback!==undefined){

this.socket.emit(event, payload, callback);

}else{

this.socket.emit(event, payload);

}

},

on:function (event, callback){

this.socket.on(event, data => {

callback(data);

});

},

login:function(){

this.emit(‘login’, {token:token_ws});

},

logout:function(){

this.emit(‘logout’);

}

};

En este código haría falta el valor de “token_ws” para poder hacer la conexión. Incluyendo este código en un archivo websocket.js e incluyéndolo en nuestro proyecto tendríamos el websocket preparado para trabajar. Para subscribirse a una sala bastaría con usar este javascript:

//Connect to sockets

if(typeof websocket !== “undefined”){

websocket.initLoad();

}

 

if(typeof websocket !== “undefined”){

websocket.login();

}

 

websocket.on(‘changes_tasks’, function(data){

if(id_aturno==data.id_aturno){

call_action();

 

}

});

Con el código anterior nos subscribiríamos a los eventos de tipo “changes_tasks” y cada vez que nos llegará un evento comprobaríamos el id del aturno que llega y llamaríamos a la función “call_action()”.