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 valor false, 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
  }
}

Onsite broadcast: delete_reservation

Room: assistant

{
  "reservation": {
      "id": 23
  }
}

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
}