Pular para o conteúdo principal
Serviços em torno do jogo

Esta página ainda não foi traduzida: mostrando a versão em inglês.

Social

O Social acrescenta um conceito: a relação entre dois atores, com estado próprio e um iniciador. Um clã, uma guilda ou um esquadrão é um grupo com uma camada de relações por cima, não um segundo tipo de coisa; e o bloqueio, de que vários módulos precisam, fica aqui para que um único lugar seja o dono dele.

Quando usar

  • Os jogadores precisam encontrar uns aos outros pelo nome: amigos, seguidores (follower), listas de bloqueio.
  • Um clã ou guilda precisa de regras de entrada: um convite do grupo, um pedido de entrada de um ator e uma decisão sobre cada um.
  • A lista de amigos precisa mostrar quem está online: a presença é derivada das sessões, e quem pode vê-la é um predicado que você declara.
  • Outro módulo precisa saber que alguém está bloqueado: ele lê esse estado daqui, em vez de manter o seu próprio.
  • Dispensável quando se trata de um conjunto de atores, e não de um par com estado: isso é um grupo. Um grupo por par significaria milhões de grupos de duas pessoas, cada um com ciclo de vida e regras de entrada próprios.

Quem faz o quê

AtorPodeNão pode
playerpropor uma relação ou seguir; aceitar, recusar ou retirar; desfazer uma relação mútua; bloquear e desbloquear; ler as próprias relações e a presença dos atores relacionados; assinar as mudanças; enviar um pedido de entradaler a lista de relações de qualquer outra pessoa, seja qual for a relação entre os participantes
moderatordecidir sobre convites e pedidos de entrada onde tem a permissão atômica de administrar a participaçãodecidir sobre uma intenção para a qual não tem permissão — a resposta é forbidden

O modelo

O que a declaração de uma relação contém.

DeclaraO que é
kindsimétrica — o par precisa que os dois lados concordem, e a máquina de estados abaixo trata dela; ou unilateral — seguir, cujo único estado é active. A unicidade por par e a idempotência da proposta valem para as duas
regra de novo convitedepois de uma recusa: proibido · permitido após um período declarado · permitido na hora. É declarada porque “pedir de novo” é uma decisão de produto
visibilidade da presençaum predicado — para todos · só para quem tem relação mútua · para ninguém. Não há padrão
modo de entrada (no tipo de grupo)aberto · por pedido com decisão · só por convite
retenção das recusadas e desfeitasdepois do período declarado, a relação é removida, e um novo convite volta a ser possível independentemente da regra de novo convite

Os estados de uma relação simétrica.

EstadoSignificado
proposedo iniciador propôs e o outro lado ainda não respondeu
mutualos dois lados concordam
declinedo outro lado recusou. A relação é mantida, porque a regra de novo convite precisa dessa informação
brokenum dos lados saiu de uma relação mútua
blockedum lado bloqueou o outro

O que vale para toda relação.

SempreO que é
uma entidade por pare não dois registros espelhados. “A fez uma proposta a B” e “B recebeu uma proposta de A” são um só fato, lido dos dois lados
um iniciadoré declarado: quem propôs, informação de que tanto a exibição quanto a regra de novo convite precisam
o bloqueio prevalecea partir dele não há transição para proposed nem para mutual
um bloqueioé assimétrico no controle e simétrico no efeito: só quem bloqueou pode desfazer o bloqueio, e ele vale nos dois sentidos
o estado de bloqueiopertence a este módulo e é consumido por outros: o módulo Messaging e outros o leem; nenhum deles o altera nem guarda uma cópia
a presençaé derivada das sessões: ninguém a escreve, e o predicado de visibilidade é aplicado a cada solicitante, e não uma vez por ator
uma intenção pendentenão ocupa vaga (seat): um convite ou um pedido de entrada nunca conta para a capacidade do grupo, então cem pedidos não esgotam um clã de cinquenta
um gruposempre tem um administrador: pelo menos um ator precisa ter a permissão atômica de administrar a participação, e o último não pode simplesmente sair — um clã cujo último administrador foi embora nunca mais poderia aceitar ninguém
sem papéis internos ao grupo“oficial do clã” é um ator que tem uma permissão atômica, não um cargo guardado numa lista
a importação nunca sobrescreveas relações trazidas de um provedor de login só se somam às existentes: alguém bloqueado não vira amigo porque um provedor diz que é

Erros

  • Relação já mútua é um conflito; não há o que propor.
  • Uma proposta para si mesmo é uma recusa de validação.
  • Um dos lados bloqueou responde not found — e não forbidden, porque uma recusa que diferenciasse os casos revelaria o bloqueio. Não adianta repetir.
  • Um novo convite antes do prazo é um conflito; vale repetir depois dele.
  • Um limite esgotado — de relações, de intenções — é um conflito, não forbidden: a permissão existe, mas não sobrou capacidade. Tente de novo quando uma vaga for liberada ou quando as intenções existentes tiverem sido decididas.
  • Uma intenção expirada é um conflito: crie uma nova em vez de repetir a antiga.
  • A saída do último administrador de um grupo é um conflito até a permissão ser repassada.
  • Decidir sobre a intenção de outra pessoa sem a permissão responde forbidden, e não adianta repetir.
  • Uma importação de um provedor não conectado responde unavailable: tente de novo com backoff.

Limites

Os números chegam com o capítulo de limites da plataforma; o que acontece em cada teto já está definido.

  • Relações mútuas por ator: a proposta é recusada como conflito; as existentes nunca são desfeitas para abrir espaço.
  • Relações unilaterais por ator: uma nova é recusada; as existentes ficam.
  • Propostas enviadas: uma nova é recusada, e nenhuma é descartada: um convite descartado pareceria um convite recusado.
  • Bloqueios por ator: adicionar mais um é recusado como conflito, e os bloqueios antigos não são descartados, então ninguém é desbloqueado em silêncio.
  • Validade de uma intenção: expired, com um evento.
  • Frequência de propostas por ator: um rate limit com prazo.
  • Frequência de mudanças de presença no fluxo (stream): limitada pela taxa de atualização, e não pelo descarte de mudanças.
  • Retenção de relações recusadas e desfeitas: remoção conforme o período declarado.