Saltar al contenido principal
Servicios alrededor del juego

Esta página aún no está traducida: se muestra la versión en inglés.

Social

Social agrega un solo concepto: la relación entre dos actores, con un estado propio y un iniciador. Un clan, un gremio o un escuadrón es un grupo con una capa de relaciones encima, no otro tipo de cosa. Y el bloqueo, que varios módulos necesitan, vive aquí para que un solo lugar sea su dueño.

Cuándo usarlo

  • Los jugadores (player) necesitan encontrarse por nombre: amigos, seguidores, listas de bloqueo.
  • Un clan o un gremio necesita reglas de ingreso: una invitación del grupo, una petición de ingreso de un actor y una decisión sobre cualquiera de las dos.
  • Una lista de amigos tiene que mostrar quién está en línea: la presencia se deriva de las sesiones, y quién puede verla lo define un predicado que declaras tú.
  • Otro módulo necesita saber que alguien está bloqueado: lee ese estado de aquí en lugar de guardar el suyo.
  • No lo uses cuando se trate de un conjunto de actores y no de un par con estado: eso es un grupo, y un grupo por cada par significaría millones de grupos de dos personas, cada uno con su propio ciclo de vida y sus reglas de ingreso.

Quién hace qué

ActorPuedeNo puede
playerproponer una relación o seguir a alguien; aceptar, rechazar o retirar una propuesta; romper una relación mutua; bloquear y desbloquear; leer sus propias relaciones y la presencia de los actores relacionados; suscribirse a los cambios; enviar una petición de ingresoleer la lista de relaciones de otra persona, sea cual sea la relación que tenga con ella
moderatordecidir sobre invitaciones y peticiones de ingreso donde tenga el permiso atómico de administración de miembrosdecidir sobre una solicitud (intent) para la que no tiene permiso: la respuesta es forbidden

El modelo

Qué incluye la declaración de una relación.

DeclaraciónQué es
kindsimétrica: el par necesita que las dos partes estén de acuerdo, y a ella se refiere la máquina de estados de abajo; o unilateral: seguir a alguien, cuyo único estado es active. La unicidad por par y la idempotencia de una propuesta valen para ambas
regla de reinvitacióndespués de un rechazo: prohibido · permitido tras un período declarado · permitido de inmediato. Se declara porque “volver a preguntar” es una decisión de producto
visibilidad de la presenciaun predicado: para todos · solo para quienes tienen una relación mutua · para nadie. No hay valor predeterminado
modo de ingreso (en el tipo de grupo)abierto · por petición con una decisión · solo por invitación
retención de rechazadas y rotasdespués del período declarado, la relación se elimina y se vuelve a poder invitar, sin importar la regla de reinvitación

Los estados de una relación simétrica.

EstadoSignificado
proposedel iniciador hizo la propuesta y la otra parte no respondió
mutuallas dos partes están de acuerdo
declinedla otra parte se negó. La relación se conserva, porque la regla de reinvitación necesita saberlo
brokenuna de las partes abandonó una relación mutua
blockeduna parte bloqueó a la otra

Lo que se cumple en toda relación.

SiempreQué es
una entidad por parno dos registros espejo. “A le propuso a B” y “B recibió una propuesta de A” son un mismo hecho leído desde dos lados
un iniciadorestá declarado: quién hizo la propuesta, un dato que necesitan tanto la interfaz como la regla de reinvitación
blocked mandadesde ese estado no hay transición a proposed ni a mutual
un bloqueoes asimétrico en el control y simétrico en el efecto: solo quien lo puso puede quitarlo, y actúa en ambos sentidos
el estado de bloqueosu dueño es este módulo y lo consumen otros: Messaging y los demás lo leen; ninguno lo modifica y ninguno guarda una copia
la presenciase deriva de las sesiones: nadie la escribe, y el predicado de visibilidad se aplica para cada solicitante, no una sola vez por actor
una solicitud pendienteno ocupa un lugar (seat): una invitación o una petición de ingreso nunca cuenta para la capacidad del grupo, así que cien peticiones no pueden llenar un clan de cincuenta
un gruposiempre conserva un administrador: al menos un actor tiene que tener el permiso atómico de administración de miembros, y el último no puede simplemente irse. Un clan cuyo último administrador se fue nunca podría volver a admitir a nadie
no hay roles dentro del grupo“oficial del clan” es un actor que tiene un permiso atómico, no un rango guardado en una lista
una importación nunca sobrescribelas relaciones que llegan desde un proveedor de inicio de sesión solo se suman: alguien bloqueado no se vuelve amigo porque lo diga un proveedor

Errores

  • Una relación que ya es mutua es un conflicto: no hay nada que proponer.
  • Una propuesta a uno mismo es un rechazo de validación.
  • Si una de las partes bloqueó a la otra, la respuesta es not found, no forbidden, porque un rechazo que distinguiera los dos casos revelaría el bloqueo. No tiene sentido repetir.
  • Una reinvitación antes del plazo es un conflicto; vale la pena repetirla cuando el plazo vence.
  • Un límite agotado — de relaciones, de solicitudes — es un conflicto, no una prohibición: el permiso está, pero no queda capacidad. Reintenta cuando se libere un lugar o cuando se hayan decidido las solicitudes existentes.
  • Una solicitud vencida es un conflicto: crea una nueva en lugar de reintentar la anterior.
  • La salida del último administrador de un grupo es un conflicto hasta que transfiera el permiso a otro actor.
  • Decidir sobre la solicitud de otro sin el permiso recibe forbidden, y no tiene sentido repetir.
  • Una importación desde un proveedor que no está conectado recibe unavailable: reintenta con backoff.

Límites

Los números llegarán con el capítulo sobre los límites de la plataforma; lo que pasa al alcanzar cada tope ya está definido.

  • Relaciones mutuas por actor: una propuesta se rechaza como conflicto; las existentes nunca se rompen para hacer lugar.
  • Relaciones unilaterales por actor: se rechaza la nueva; las existentes se mantienen.
  • Propuestas salientes: se rechaza la nueva, y no se expulsa ninguna: una invitación expulsada se vería igual que una rechazada.
  • Bloqueos por actor: agregar uno se rechaza como conflicto, y los bloqueos antiguos no se expulsan, así que nadie queda desbloqueado en silencio.
  • Vida útil de una solicitud: expired, con un evento.
  • Frecuencia de propuestas por actor: un límite de frecuencia con plazo.
  • Frecuencia de cambios de presencia en el flujo (stream): se acota con la frecuencia de actualización, no descartando cambios.
  • Retención de relaciones rechazadas y rotas: se eliminan al cumplirse el período declarado.