Skip to content
This repository has been archived by the owner on Jul 31, 2021. It is now read-only.

henriquecouto/chat-realtime

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Client Documentation

A aplicação faz uso do Express, para o gerenciamento de end-points, do Socket.io, para as conexões em tempo real, e do MongoDB, para armazenar as informações.

A pasta backend contém o código que faz todo o gerenciamento dos dados, enquanto a pasta frontend possui um exemplo de implementação para uso da ferramenta, feito usando HTML, CSS, Javascript e o socket.io-client.

End-points

Essa seção descreve todos os end-points existentes na aplicação

/users

  • POST /users → Criar novo usuário.

Parâmetros

  • (String) name → Nome do usuário a ser cadastrado.
  • GET /users → Carregar os usuários cadastrados

/activities

  • GET /activities/{userId} → Carregar todas as atividades de um usuário específico.

/messages

  • POST / → Carregar todas as mensagens entre dois usuários.

Parâmetros

  • (String) userId → O id do usuário que está realizando a requisição;
  • (String) partnerId → O id do usuário parceiro.

/groups

  • POST /groups → Criar um novo grupo.

Parâmetros

  • (String) name → Nome do grupo a ser cadastrado;
  • (String) creator → Id do usuário criador do grupo;
  • (Array) users → Lista de usuários que serão adicionados ao grupo;
  • PUT /groups → Atualizar algum grupo já existente.

Parâmetros

  • (String) id → Id do grupo a ser atualizado;
  • [opcional] (String) name → Nome do grupo a ser cadastrado;
  • [opcional] (Array) users → Lista de usuários que serão adicionados ao grupo.
  • GET /groups/{userId} → Carregar os grupos em que um usuário está inserido.
  • GET /groups/{groupId}/info → Carregar dos dados do grupo
  • GET /groups/{groupId}/messages → Carregar as mensagens de um grupo específico.

Socket.io

Essa seção descreve os eventos que devem ser utilizados quando se deseja atualizar dados em tempo real. Ao se "cadastrar" em um evento a aplicação passa a receber tudo relacionado a esse evento.

Conexão

A conexão deve ser realizada através da biblioteca Cliente do Socket.io

Parâmetros

  • (String) id → Id do usuário que está tentando se conectar;

Exemplo

const baseUrl = "http://localhost:3030";
const socket = io(baseUrl, {
	query: { _id: userId },
});

Interações

Existem dois tipos de interação:

  • emit → utilizada para transmitir uma mensagem em um evento;
  • on → utilizada para receber o que for transmitido em algum evento.

Atividades

  • emit update activity → Atualizar a atividade que está sendo realizada por um usuário.

Parâmetros

  • (String) userId → Id do usuário;
  • (String) activity → Nome da atividade;

Exemplo

socket.emit("update activity", userId, activity);
  • emit receive activities → Abrir a conexão para receber as atividades de um usuário.

Parâmetros

  • (String) partnerId → Id do usuário do qual se deseja receber as atividades;

Exemplo

socket.emit("receive activities", parterId);
  • on update activities → Receber as atividades de um usuário cadastrado.

Pré-requisitos

emit receive activities

Exemplos

  • Chamada do evento
socket.on("update activities", async ({ userId, activity }) => {
	console.log(userId, activity)
})
  • Resposta
{
	"5efb390fff58a54ca1cf676e": {
  	"socket": "emRjoWCa_hGRc-WaAAAF",
  	"status": "online",
  	"_id": "5efb390fff58a54ca1cf676e",
  	"name": "Henrique Couto",
  	"registrationDate": "2020-06-30T13:07:27.121Z"
  },
  "5efb3914ff58a54ca1cf676f": {
  	"socket": "7OQ8H6g6_6mGdg-aAAAG",
  	"status": "online",
  	"_id": "5efb3914ff58a54ca1cf676f",
  	"name": "Neo Ferreira",
  	"registrationDate": "2020-06-30T13:07:32.297Z"
  }
}

Conversas Privadas

  • emit open chat → Abrir a conexão para receber mensagens de um usuário.

Parâmetros

  • (String) partnerId → Id do usuário;

Exemplo

socket.emit("open chat", partnerId);
  • emit send message → Enviar mensagem para um usuário.

Parâmetros

  • (String) partnerId → Id do usuário que receberá a mensagem;
  • (String) message → Mensagem a ser enviada;

Exemplo

socket.emit("send message", partnerId, message);
  • on update messages → Receber as mensagens de uma conversa ativa com outro usuário.

Pré-requisitos

  • emit open chat

Exemplos

  • Chamada do evento
socket.on("update messages", async ({ userId, message, type }) => {
  // O atributo type pode conter um desses valores: "sended", "received"
  // O atributo userId refere-se ao id do parceiro da conversa
	console.log(userId, message, type)
})
  • Resposta
{
  "type": "sended",
  "userId": "5efb3914ff58a54ca1cf676f",
  "message": {
  	"_id": "5efb3dddff58a54ca1cf6783",
  	"emitter": "5efb390fff58a54ca1cf676e",
  	"receptor": "5efb3914ff58a54ca1cf676f",
  	"text": "has",
  	"registrationDate": "2020-06-30T13:27:57.962Z"
  }
}

Grupos

  • emit open group → Abrir a conexão para receber mensagens de um grupo.

Parâmetros

  • (String) groupId → Id do grupo;

Exemplo

socket.emit("open group", groupId);
  • emit send group message → Enviar mensagem para um grupo.

Parâmetros

  • (String) groupId → Id do grupo;
  • (String) message → Mensagem a ser enviada;

Exemplo

socket.emit("send group message", groupId, message);
  • emit update groups → Informar que os usuários devem receber uma atualização dos grupos.

Exemplo

socket.emit("update groups");
  • on update groups → Indicar que a lista de grupos deve ser atualizada.

Exemplo

  • Chamada do evento
socket.on("update groups", async () => {
  // Deve ser executada alguma função que carrega os grupos em que o usuário está inserido
})
  • on update group messages → Receber as mensagens de uma conversa de grupo ativa.

Pré-requisitos

  • emit open group

Exemplos

  • Chamada do evento
socket.on("update group messages", async ({ groupId, message, type, emitter }) => {
  // O atributo type pode conter um desses valores: "sended", "received"
	console.log(userId, message, type)
})
  • Resposta
{
  "type": "sended",
  "groupId": "5efb3fcdff58a54ca1cf6784",
  "message": {
  	"_id": "5efb429aff58a54ca1cf6786",
  	"emitter": "5efb390fff58a54ca1cf676e",
  	"group": "5efb3fcdff58a54ca1cf6784",
  	"text": "opj",
  	"registrationDate": "2020-06-30T13:48:10.109Z"
  }
}
  • emit update group users → Informar que os usuários devem receber uma atualização dos grupos.

Parâmetros

  • (String) groupId → Id do grupo;

Exemplo

socket.emit("update groups", groupId);
  • on update group users → Indicar que a lista de usuários de uma conversa de grupo ativa deve ser atualizada.

Exemplo

  • Chamada do evento
socket.on("update group users", async (groupId) => {
  // Deve ser executada alguma função que carrega os usuários do grupo
	console.log(groupId)
})

Usuários

  • on update users → Receber a lista de usuários para saber quem está online e offline e a atividade que está sendo executada, se houver.

Exemplos

  • Chamada do evento
socket.on("update users", async (users) => {
	console.log(users)
})
  • Resposta
{
	"5efb390fff58a54ca1cf676e": {
  	"socket": "emRjoWCa_hGRc-WaAAAF",
  	"status": "online",
  	"_id": "5efb390fff58a54ca1cf676e",
  	"name": "Henrique Couto",
  	"registrationDate": "2020-06-30T13:07:27.121Z"
  },
  "5efb3914ff58a54ca1cf676f": {
		activity: "Criando Matéria"
  	"socket": "7OQ8H6g6_6mGdg-aAAAG",
  	"status": "online",
  	"_id": "5efb3914ff58a54ca1cf676f",
  	"name": "Neo Ferreira",
  	"registrationDate": "2020-06-30T13:07:32.297Z"
  }
}

About

Chat com NodeJS e Socket.io

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published