Envío de broadcasts¶
A continuación se enlistan las difusiones de mensajes llevadas a cabo por el servidor Onsite, así como las entidades que lo reciben y bajo qué escenarios.
Onsite¶
Transcurso de Match¶
Onsite broadcast: create_match¶
Room: assistant
Mediante el cual se propaga la notificación de creación de un Match. El cuerpo del mensaje es el siguiente
{
"match": {
"id": 47,
"gameSystemId": 3,
"joiningStationId": 6,
"categoryId": 3,
"zoneId": 3,
"createdAt": 1479862013,
"attendedAt": null,
"players": [{
"nick": "Donnie Darko",
"avatarUrl": "https://www.googleapis.com/storage/v1/b/arena-onsite-bucket/o/1475281865163-0.9304038190748543",
"timeProductId": 2
}, {
"nick": "Mr Nobody",
"avatarUrl": "https://www.googleapis.com/storage/v1/b/arena-onsite-bucket/o/1475281865163-0.9304038190748543",
"timeProductId": 5
}]
}
}
Onsite broadcast: update_match¶
Room: assistant, ID del timer de la estación correspondiente
Mediante el cual se propaga la notificación de actualización de un Match. La notificación también es enviada al cliente Timer en caso de corresponder a una asignación de Match a estación.
El cuerpo del mensaje es el siguiente:
{
"match": {
"id": 47,
"gameSystemId": 3,
"joiningStationId": 6,
"categoryId": 2,
"zoneId": 2,
"stationId": 43,
"isTimeRunning" : false,
"createdAt": 1479862013,
"attendedAt": null,
"closedAt" : 1480649418,
"players": [{
"nick": "Donnie Darko",
"avatarUrl": "https://www.googleapis.com/storage/v1/b/arena-onsite-bucket/o/1475281865163-0.9304038190748543",
"timeProductId": 2,
"expiresAt" : 1480642412
}, {
"nick": "Mr Nobody",
"avatarUrl": "https://www.googleapis.com/storage/v1/b/arena-onsite-bucket/o/1475281865163-0.9304038190748543",
"timeProductId": 5,
"expiresAt" : 1480642412
}]
}
}
Algunas consideraciones a tener sobre los campos del mensaje son las siguientes:
attendedAt- Si esta campo está establecido en el mensaje, los clientes deben interpretar que la partida ha sido atendida; esto es, asignada actual una estación. Como consecuencia, los clientes Assistant deben eliminar la partida del pool de Matches pendientes de ser asignados.
closedAt- La presencia del campo con un valor distinto a nulo indica que el Match ha sido cerrado por un asistente, o bien, la partida ha llegado a término por el vencimiento de al menos un producto de tiempo de entre los jugadores participantes. El hecho de recibir la información de un Match cerrado, siendo esta la primera vez que se recibe información de la partida en cuestión, permite a un cliente socket ignorar el mensaje.
La última actualización de una partida, siempre y cuando no se reciba con estado de cerrada obliga a los clientes Timer y Assistant a actualizar la Información de la estación incluida en el broadcast. Es por esto que la actualización más reciente define el estado actual de la partida de una estación.
Onsite broadcast: delete_match¶
Room: assistant
{
"match": {
"id": 47
}
}
Como consecuencia a la recepción de este mensaje, un Assistant elimina la partida del conjunto de aquellas que están vigentes en el local.
Match grupal¶
Onsite broadcast: update_match_group¶
Room: assistant, ID del timer de la estación correspondiente
Mediante este broadcast, se notifica a los asistentes y a los Timers correspondientes de creación y actualización de un Match grupal.
{
"groupMatch": {
"id": 47,
"nick": "Guest01",
"avatarUrl": "https://www.googleapis.com/storage/v1/b/arena-onsite-bucket/o/1475281865163-0.9304038190748543",
"isTimeRunning" : true,
"expiresAt": 1480642412,
"createdAt": 1479862013,
"closedAt" : null,
"stations": [
{
"id": 12,
}
]
}
}
Servicios¶
Onsite broadcast: create_service¶
Room: assistant
Mediante este broadcast se da a conocer a los asistentes de un nuevo servicio con el siguiente cuerpo de mensaje:
{
"service": {
"id": 47,
"categoryId": 3,
"zoneId": 3,
"stationId": 23,
"kioskName": "TV045"
"createdAt": 1479862013,
}
}
id- El identificador asociado al servicio solicitado.
categoryId- El identificador de la categoría en la que se solicitó el servicio.
zoneId- El identificador de la zona en la que se solicitó el servicio.
stationId- El identificador de la estación en la que se solicitó el servicio.
kioskName- El nombre del quiosco en el que se solicitó el servicio.
createdAt- La fecha de creación en el sistema del servicio, la cual corresponde a la fecha de solicitud de la asistencia.
Onsite broadcast: delete_service¶
Room: assistant
Mediante el cual se propaga la notificación de remoción de un Service. El cuerpo del mensaje es el siguiente
{
"service": {
"id": 47
}
}
Pool de Check Ins¶
Onsite broadcast: create_checkin¶
Room: assistant
Mediante esta difusión se notifica de la adición de un Check In de jugador al pool de Check Ins disponibles para ser asginados a una nueva partida. El cuerpo del mensaje es el siguiente
{
"checkIn": {
"id" : 45,
"player" : {
"id": 3,
"nick": "Jose",
"createdAt": 1479862013,
"updatedAt": 1479862013,
}
"timeExpired" : true,
"timeProductId": 2,
"lastMatch" : {
"id": 47,
"gameSystemId": 3,
"joiningStationId": 6,
"stationId": 78,
"categoryId": 3,
"zoneId": 2,
"createdAt": 1479862013,
"attendedAt": 1479862015,
"closedAt": 1479862015,
"players": [{
"nick": "Donnie Darko",
"timeProductId": 2
}, {
"nick": "Mr Nobody",
"timeProductId": 5
}]
}
}
}
id- Identificador del Check In.
nick- Nick del jugador.
timeExpired- En caso de ser
true, indica que el usuario llegó al pool debido a que se tiempo llegó a cero. En caso de tener el valorfalse, indica que el usuario fue expulado de la estación en la que jugaba. timeProductId- Referencia al producto de tiempo vigente del jugador, en caso de existir.
lastMatch- Información de la última partida en la que participó el jugador. Esta campo no siempre cuenta con valor.
Onsite broadcast: delete_checkin¶
Room: assistant
Mediante esta difusión se notifica a los clientes Assistant del local de la remoción de un Check In del pool. El cuerpo del mensaje es el siguiente
{
"checkIn": {
"id" : 4
}
}
Como resultado de la notificación, cada cliente Assistant que recibe el mensaje remueve el Check In del pool.
Reservaciones¶
Onsite broadcast: create_reservation¶
Room: assistant
{
"reservation": {
"id": 23,
"nick" : "Juju",
"isPC": 0,
"numberOfPlayers": 3,
"paidCoins": 100,
"timeProductId": 2,
"categoryId": 3,
"createdAt": 1475699580,
"updatedAt": 1475699883,
"reservationAt": 1475699580,
"cancelledAt": null,
"preparedAt": null,
}
}
Onsite broadcast: update_reservation¶
Room: assistant
Mediante este broadcast se propaga la notificación a los asistentes de actualización de una reservación. El formato es el siguiente
{
"reservation": {
"id": 23,
"numberOfPlayers": 3,
"paidCoins": 100,
"timeProductId": 2,
"categoryId": 3,
"reservationAt": 1475699580,
"redeemedAt": 1475699872,
"preparedAt": 1475697623
}
}
Torneos¶
Onsite broadcast: player_validation¶
Room: assistant
{
"tournamentId" : 12,
"nicks": [
"eseca"
"cealmees"
"kyky"
"ochoaleonor"
"cerillito"
"kreiz"
"malfie"
]
}
Onsite broadcast: lock_station¶
Room: ID del Timer de las estaciones correspondientes, Assistant
Esta difusión se encarga de notificar a un Timer que su estación asociada ha sido bloqueada para servir una ronda dentro del torneo del día. El mensaje enviado tiene el siguiente formato:
{
"station": {
"id": 47,
"tournamentId": 43 // Identificador del torneo en Offsite
"teamIds": [
2, 31
]
}
}
En consecuencia, los clientes Assistant deben bloquear en el cliente el posible uso de la estación. Los clientes Timer deben obtener la información del torneo mediante una consulta a la ruta Offsite: GET /tournaments.
Onsite broadcast: unlock_station¶
Room: ID del Timer de las estaciones correspondientes, Assistant
Esta difusión se encarga de notificar a un Timer que su estación asociada ha sido desbloqueada para continuar con la operación normal de la sucursal. El mensaje enviado tiene el siguiente formato:
{
"station": {
"id": 47
}
}
En consecuencia, los clientes Assistant deben permitir en el cliente el uso de la estación. Además, el cliente Timer debe volver a mostrar una pantalla correspondiente a la operación normal de la sucursal.
Tournament Handler¶
Torneos¶
Tournament Handler broadcast: update_phase¶
Room: assistant
{
"tournamentId": 2,
"phase": {
"id": 3,
"closedAt": null,
"createdAt": 1480642412,
"updatedAt": 1480642412,
"teams": [
{
"id": 2,
"name": "Los mejores",
"players": [
{
"id": 3,
"nick": "patron"
},
{
"id": 4,
"nick": "yoliDeLimon"
}
]
},
{
"id": 4,
"name": "Do be do",
"players": [
{
"id": 5,
"nick": "loreh"
},
{
"id": 6,
"nick": "Lucie"
}
]
},
{
"id": 9,
"name": "JUJUJU",
"players": [
{
"id": 7,
"nick": "Carlita"
},
{
"id": 8,
"nick": "Moreno"
}
]
}
],
"groups": [
{
"id": 1,
"elimination": "single",
"bestOf": 3,
"scoring": null,
"teams": [
{
"id": 2,
"name": "Los mejores",
"players": [
{
"id": 3,
"nick": "patron"
},
{
"id": 4,
"nick": "yoliDeLimon"
}
]
},
{
"id": 4,
"name": "Do be do",
"players": [
{
"id": 5,
"nick": "loreh"
},
{
"id": 6,
"nick": "Lucie"
}
]
},
{
"id": 9,
"name": "JUJUJU",
"players": [
{
"id": 7,
"nick": "Carlita"
},
{
"id": 8,
"nick": "Moreno"
}
]
}
],
"matchNodes": [
{
"id": 5,
"parentId": 6,
"height": 1,
"teams": [
{
"id": 2,
"name": "Los mejores",
"players": [
{
"id": 3,
"nick": "patron"
},
{
"id": 4,
"nick": "yoliDeLimon"
}
]
},
{
"id": 4,
"name": "Do be do",
"players": [
{
"id": 5,
"nick": "loreh"
},
{
"id": 6,
"nick": "Lucie"
}
]
}
],
"tournamentMatches": [
{
"id": 9
},
{
"id": 10
},
{
"id": 8
}
]
},
{
"id": 6,
"parentId": null,
"height": 0,
"teams": [
{
"id": 9,
"name": "JUJUJU",
"players": [
{
"id": 7,
"nick": "Carlita"
},
{
"id": 8,
"nick": "Moreno"
}
]
}
],
"tournamentMatches": [
{
"id": 16
},
{
"id": 17
},
{
"id": 18
}
]
}
]
},
{
"id": 2,
"elimination": "round robin",
"bestOf": 2,
"scoring": {
"victoryPoints": 2,
"defeatPoints": 0,
"tiePoints": 1
},
"teams": [
{
"id": 3,
"name": "Watermelon",
"players": [
{
"id": 11,
"nick": "Blue Jazmine"
},
{
"id": 12,
"nick": "Temembe"
}
]
},
{
"id": 5,
"name": "La la la",
"players": [
{
"id": 13,
"nick": "Tu padre"
},
{
"id": 14,
"nick": "La jefa"
}
]
}
],
"matchNodes": [
{
"id": 10,
"teams": [
{
"id": 3,
"name": "Watermelon",
"players": [
{
"id": 11,
"nick": "Blue Jazmine"
},
{
"id": 12,
"nick": "Temembe"
}
]
},
{
"id": 5,
"name": "La la la",
"players": [
{
"id": 13,
"nick": "Tu padre"
},
{
"id": 6,
"nick": "La jefa"
}
]
}
],
"tournamentMatches": [
{
"id": 20
},
{
"id": 21
}
]
}
]
}
]
}
}
Tournament Handler broadcast: update_match_node¶
Room: assistant_[tournamentId], ID del Timer de las estaciones correspondientes
{
"id": 5,
"parentId": 6,
"height": 1,
"scoredAt": null,
"winnerTeamId": null,
"teams": [
{
"id": 2,
"name": "Los mejores",
"players": [
{
"id": 3,
"nick": "patron"
},
{
"id": 4,
"nick": "yoliDeLimon"
}
]
},
{
"id": 4,
"name": "Do be do",
"players": [
{
"id": 5,
"nick": "loreh"
},
{
"id": 6,
"nick": "Lucie"
}
]
}
],
"tournamentMatches": [
{
"id": 9,
"scoredAt": 1479862013, // Victoria del equipo con id 2
"winnerTeamId": 2,
"teamCriteria": [
{
"id": 2,
"value": 23,
"teamId": 2,
"criterion": {
"id": 2,
"name": "precisión",
"isPercentage": true
}
},
{
"id": 76,
"value": 2,
"teamId": 4,
"criterion": {
"id": 5,
"name": "goles",
"isPercentage": false
}
},
{
"id": 45,
"value": 40,
"teamId": 4,
"criterion": {
"id": 2,
"name": "precisión",
"isPercentage": true
}
}
]
},
{
"id": 10,
"scoredAt": 1479862113, // Empate
"winnerTeamId": 0,
"teamCriteria": [
{
"id": 2,
"value": 50,
"teamId": 2,
"criterion": {
"id": 2,
"name": "precisión",
"isPercentage": true
}
},
{
"id": 76,
"value": 1,
"teamId": 4,
"criterion": {
"id": 5,
"name": "goles",
"isPercentage": false
}
},
{
"id": 45,
"value": 25,
"teamId": 4,
"criterion": {
"id": 2,
"name": "precisión",
"isPercentage": true
}
}
]
},
{
"id": 8, // Aún no registrada
"scoredAt": null,
"winnerTeamId": null,
"teamCriteria": []
}
]
}
Tournament Handler broadcast: update_match_criteria¶
Room: assistant_[tournamentId], ID del Timer de las estaciones correspondientes
{
"tournamentMatchId": 826
"teamCriteria": [
{
"id": 2,
"value": 23,
"teamId": 2,
"criterion": {
"id": 2,
"name": "precisión",
"isPercentage": true
}
},
{
"id": 76,
"value": 2,
"teamId": 4,
"criterion": {
"id": 5,
"name": "goles",
"isPercentage": false
}
},
{
"id": 45,
"value": 40,
"teamId": 4,
"criterion": {
"id": 2,
"name": "precisión",
"isPercentage": true
}
}
}
Tournament Handler broadcast: delete_tournament¶
Room: assistant_[tournamentId]
{
"tournamentId": 12
}