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()”.