{
"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.
sequenceDiagram
Application -->> Gateway: Websocket connection
Gateway ->> Application: Host
Application ->> Gateway: Connection request
Gateway ->> Application: Connection response
-
A conexão é estabelecida.
-
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]"
}
}
- 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]"
}
}
- O gateway responde com uma mensagem de status.
{
"id": "[id]",
"hostType": "GATEWAY",
"token": null,
"status": "[status]",
"operationType": "RESPONSE",
"payloadType": "APPLICATION_CONNECTION",
"payload": {
"token": "[token]"
}
}
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
-
O cliente se conecta e faz a requisição de login com REST.
-
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]"
}
}
- 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]"
}
}
-
O gateway avisa o cliente do roteamento pela conexão REST.
-
O cliente se conecta com o servidor de aplicação.
-
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]"
}
}
- 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]"
}
}
- 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]"
}
}
- 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]"
}
}
- 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
}
sequenceDiagram
Client -->> Application: Websocket disconnection
Application ->> Gateway: Closing request
Gateway ->> Application: Closing response
-
O cliente se desconecta.
-
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]"
}
}
- O gateway responde para o servidor.
{
"id": "[id]",
"hostType": "GATEWAY",
"token": null,
"status": "[status]",
"operationType": "RESPONSE",
"payloadType": "DISCONNECTION",
"payload": {
"message": "[message]"
}
}
- O cliente se desconecta.
sequenceDiagram
Client -->> Gateway: Creation request (REST)
Gateway -->> Client: Creation response (REST)
-
O cliente se conecta e faz a requisição de criação de usuário.
-
O Gateway informa o cliente sobre o status da criação de usuário.
sequenceDiagram
Client ->> Application: Get chat request
Application ->> Client: Get chat response
sequenceDiagram
Client ->> Application: Create group chat request
Application ->> Client: Create group chat response
sequenceDiagram
Client ->> Application: Add user to group chat request
Application ->> Client: Add user to group chat response
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
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