Skip to content

Latest commit

 

History

History
387 lines (323 loc) · 8.39 KB

Documentation.md

File metadata and controls

387 lines (323 loc) · 8.39 KB

Protocolo

Formato

{
  "id": "[id]",
  "hostType": "[type]",
  "token": "[token]"
  |
  null,
  "status": "[status]"
  |
  null,
  "operationType": "[operationType]",
  "payloadType": "[payloadType]",
  "payload": {
    ...
  }
  |
  null
}
  • Host: Endereço do host que enviou a mensagem.
  • hostType: Tipo de host que enviou a mensagem.
    • CLIENT: Cliente.
    • GATEWAY: Servidor de gateway.
    • APPLICATION: Servidor de aplicação.
  • Token: Token de autenticação.
  • Status: Status da mensagem.
    • OK: Mensagem enviada com sucesso.
    • ERROR: Erro ao enviar a mensagem.
  • operationType: Tipo de operação.
    • REQUEST: Pedido.
    • RESPONSE: Resposta.
    • INFO: Informação
  • payloadType: Tipo de payload.
    • APPLICATION_CONNECTION: Conexão da aplicação.
    • CLIENT_CONNECTION: Conexão do usuário.
    • ROUTING: Roteamento.
    • USER_CREATION: Criação do usuário.
    • USER_LISTING: Listagem de usuários.
    • DISCONNECTION: Fechamento de conexão.
    • GROUP_CHAT_CREATION: Criação de conversa em grupo.
    • CHAT_LISTING: Listagem de conversas.
    • GROUP_CHAT_ADDITION: Adição de usuário na conversa.
    • MESSAGE: Mensagem.
    • MESSAGE_FORWARDING: Mensagem redirecionada.
    • MESSAGE_LISTING: Listagem de mensagens.
    • HOST: Host.
  • payload: Dados da mensagem, pode ser nulo.

Fluxo de conexões

Conexão entre servidor de aplicação e o gateway

sequenceDiagram
    Application -->> Gateway: Websocket connection
    Gateway ->> Application: Host
    Application ->> Gateway: Connection request
    Gateway ->> Application: Connection response
Loading
  1. A conexão é estabelecida.

  2. O Gateway informa o host do servidor de aplicação.

{
  "id": "[id]",
  "hostType": "GATEWAY",
  "token": null,
  "status": "[status]",
  "operationType": "INFO",
  "payloadType": "HOST",
  "payload": {
    "host": "[host]"
  }
}
  1. O servidor de aplicação envia uma mensagem de conexão para o gateway.
{
  "id": "[id]",
  "hostType": "APPLICATION",
  "token": null,
  "status": null,
  "operationType": "REQUEST",
  "payloadType": "APPLICATION_CONNECTION",
  "payload": {
    "identifier": "[id]",
    "password": "[password]",
    "host": "[host]",
    "externalPort": "[externalPort]"
  }
}
  1. O gateway responde com uma mensagem de status.
{
  "id": "[id]",
  "hostType": "GATEWAY",
  "token": null,
  "status": "[status]",
  "operationType": "RESPONSE",
  "payloadType": "APPLICATION_CONNECTION",
  "payload": {
    "token": "[token]"
  }
}

Conexão entre cliente e o gateway

sequenceDiagram
    Client -->> Gateway: Routing request (REST)
    Gateway ->> Application: Routing request
    Application ->> Gateway: Routing response
    Gateway -->> Client: Routing response (REST)
    Client -->> Application: Websocket connection
    Application ->> Client: Host
    Client ->> Application: Connection request
    Application ->> Gateway: Connection request
    Gateway ->> Application: Connection response
    Application ->> Client: Connection response
Loading
  1. O cliente se conecta e faz a requisição de login com REST.

  2. O gateway autentica e avisa um servidor de aplicação.

{
  "id": "[id]",
  "hostType": "GATEWAY",
  "token": null,
  "status": null,
  "operationType": "REQUEST",
  "payloadType": "ROUTING",
  "payload": {
    "userId": "[id]",
    "token": "[token]"
  }
}
  1. O servidor de aplicação confirma que recebeu a mensagem.
{
  "id": "[id]",
  "hostType": "APPLICATION",
  "token": "[token]",
  "status": "[status]",
  "operationType": "RESPONSE",
  "payloadType": "ROUTING",
  "payload": {
    "userId": "[id]",
    "token": "[token]"
  }
}
  1. O gateway avisa o cliente do roteamento pela conexão REST.

  2. O cliente se conecta com o servidor de aplicação.

  3. O servidor de aplicação envia para o cliente as informações de host (o id e o host retornados deverão ser usados pelo cliente nos próximos pacotes).

{
  "id": "[id]",
  "hostType": "APPLICATION",
  "token": "[token]",
  "status": "[status]",
  "operationType": "INFO",
  "payloadType": "HOST",
  "payload": {
    "host": "[host]"
  }
}
  1. O cliente envia as informações de conexão para o servidor direcionado.
{
  "id": "[id]",
  "hostType": "CLIENT",
  "token": "[token]",
  "status": null,
  "operationType": "REQUEST",
  "payloadType": "CLIENT_CONNECTION",
  "payload": {
    "host": "[host]",
    "userId": "[id]"
  }
}
  1. O servidor avisa o gateway da conexão do cliente.
{
  "id": "[id]",
  "hostType": "APPLICATION",
  "token": "[token]",
  "status": null,
  "operationType": "REQUEST",
  "payloadType": "CLIENT_CONNECTION",
  "payload": {
    "userId": "[userId]",
    "clientId": "[clientId]"
  }
}
  1. O gateway avisa o servidor de aṕlicação que a conexão está ok.
{
  "id": "[id]",
  "hostType": "APPLICATION",
  "token": null,
  "status": "[status]",
  "operationType": "RESPONSE",
  "payloadType": "CLIENT_CONNECTION",
  "payload": {
    "userId": "[userId]",
    "clientId": "[clientId]"
  }
}
  1. O servidor de aplicação avisa o cliente que a conexão foi feita.
{
  "id": "[id]",
  "hostType": "APPLICATION",
  "token": "[token]",
  "status": null,
  "operationType": "REPONSE",
  "payloadType": "CLIENT_CONNECTION",
  "payload": null
}

Fechamento de conexão com o cliente

sequenceDiagram
    Client -->> Application: Websocket disconnection
    Application ->> Gateway: Closing request
    Gateway ->> Application: Closing response
Loading
  1. O cliente se desconecta.

  2. O servidor envia uma requisição de fechamento para o gateway.

{
  "id": "[id]",
  "hostType": "APPLICATION",
  "token": "[token]",
  "status": null,
  "operationType": "REQUEST",
  "payloadType": "DISCONNECTION",
  "payload": {
    "userId": "[id]"
  }
}
  1. O gateway responde para o servidor.
{
  "id": "[id]",
  "hostType": "GATEWAY",
  "token": null,
  "status": "[status]",
  "operationType": "RESPONSE",
  "payloadType": "DISCONNECTION",
  "payload": {
    "message": "[message]"
  }
}
  1. O cliente se desconecta.

Criação de usuário

sequenceDiagram
    Client -->> Gateway: Creation request (REST)
    Gateway -->> Client: Creation response (REST)
Loading
  1. O cliente se conecta e faz a requisição de criação de usuário.

  2. O Gateway informa o cliente sobre o status da criação de usuário.


Obtenção de uma conversa

sequenceDiagram
    Client ->> Application: Get chat request
    Application ->> Client: Get chat response
Loading

Criação de uma conversa em grupo

sequenceDiagram
    Client ->> Application: Create group chat request
    Application ->> Client: Create group chat response
Loading

Adição de usuário em uma conversa em grupo

sequenceDiagram
    Client ->> Application: Add user to group chat request
    Application ->> Client: Add user to group chat response
Loading

Envio de mensagem

Cenário em que os dois usuários estão conectados em um mesmo servidor.

sequenceDiagram
    Client A ->> Application: Message
    Application ->> Client A: Response
    Application ->> Client B: Message
Loading

Cenário em que os dois usuários estão conectados em servidores diferentes.

sequenceDiagram
    Client A ->> Application A: Message
    Application A ->> Client A: Response
    Application A ->> Gateway: Message
    Gateway ->> Application A: Response
    Gateway ->> Application B: Message
    Application B ->> Gateway: Response
    Application B ->> Client B: Message
Loading