Este documento especifica um protocolo da camada de aplicação com arquitetura Cliente-Servidor para transferência e execução de arquivos. Os serviços desse protocolo rodam sobre TCP, que foi escolhido em virtude de oferecer transferência confiável de dados. A porta utilizada pelo protocolo é a 30000.
- Porta padrão: 30000
- Arquitetura: Cliente-Servidor
- Protocolo na camada de transporte: TCP
- Padrão de caracteres: ASCII
A arquitetura utilizada neste protocolo é a Cliente-Servidor. Desta forma, para que o cliente possa enviar algum comando ao servidor, será necessário que uma conexão TCP (protocolo da camada de trasporte escolhido) já esteja estabelecida entre os dois hosts. Desta forma, somente após a conexão for estabelecida o cliente poderá enviar mensagens/comandos (descritos nas próximas seções) deste protocolo ao servidor.
A função básica do cliente é enviar arquivos para o servidor. O servidor irá aceitar arquivos no formatos Node ou JavaScript (.js) enviados pelo do usuário, interpretar estes arquivos e retornar uma resposta relativa à interpretação do arquivo e adicionalmente, uma mensagem relatando o sucesso ou erro no recebimento do arquivo e em sua execução.
Como os dados devem ser enviados estão definidos no item 3.2 deste documento.
As funções básicas do servidor são a de aceitar conexões de múltiplos clientes, aceitar os comandos e arquivos enviados pelos clientes. Ele também irá executar os arquivos (se estiverem no formato adequado) e retornar o resultado da execução, além de uma resposta relativa ao estado do envio e execução (sucesso ou erro).
Como a conexão entre o cliente e servidor já estará concreta, a comunicação entre os dois hosts será através de comandos e retornos descritos a seguir.
Os comandos descritos nessa seção, são exclusivamente enviados pelo cliente ao servidor. Os retornos descritos nessa seção são retornos enviados exclusivamente do servidor para o cliente.
- USER - Comando para pedir autorização para conectar no servidor
- SEND - Comando para enviar um arquivo .js para execução no servidor
- RUN - Comando utilizado para executar o último arquivo enviado ao servidor
- QUIT - Comando utilizado para encerrar a conexão
Este comando é utilizado para a que o usuário faça a autenticação no servidor para obter acesso (restrito de acordo com suas permissões) ao servidor. O nome do usuário e sua senha deveram, obrigatoriamente, ser formados por caracteres alfanuméricos.
user user.json
Exemplo do formato do arquivo JSON: user.json ->
{“usuario”:”<Meu_Usuario>”, “senha”:”<Minha_senha>”}
- 100 - Conectado;
- 101 - Não foi possível conectar;
- 102 - Usuário/senha incorretos;
return <numero_do_retorno>
Ex:
return 101
Comando utilizado para enviar arquivos para execução no servidor. O cliente poderá enviar apenas um arquivo por vez, assim como a execução será restrita a um arquivo por cliente simultaneamente. O arquivo que será executado no servidor consiste do último envio válido (formato .js).
send <path_to_file>
Ex:
send toto.js
- 200 - Arquivo recebido
- 201 - Erro ao receber o arquivo
return <numero_do_retorno>
Ex.
return 200
Comando utilizado para executar o último arquivo do usuário (cliente) enviado ao servidor. Este comando poderá retornar, além de informações referentes a execução, o resultado da aplicação executada (em formato .JSON).
run
- 300 - Execução concluída com sucesso
- 301 - Erro ao executar o arquivo - verifique a sintaxe
- 302 - Erro: Arquivo não encontrado
- 303 - Erro: Arquivo em formato incompatível
- 304 - Erro: Dependências não encontradas
- 305 - Resultado
return <numero_do_retorno>
Ex.
return 300
return 303
No caso do comando RUN, o único retorno que possui formato diferente é o retorno 305 que possui um parâmetro a mais e será detalhado na próxima subseção.
O resultado é retornado ao cliente através de um arquivo no formato JSON. Neste arquivo JSON estará contido a mensagem de retorno da execução da aplicação. O formato para este retorno JSON é descrito a seguir:
Formato:
return 305 result.json
Conteúdo de result.json -> { “result”: ”resultado_da_execucao_e_operacoes” }
Comando utilizado para encerrar a conexão entre servidor e o cliente.
quit<parametro>
onde pode ter valor 1 ou 2, sendo assim:
- quit 1 : Encerra a aplicação sem obter resultados
- quit 2 : Espera pelo resultado para encerrar a aplicação
Termina a execução, envia os retornos, e deleta os arquivos.
- 100 - Conectado
- 101 - Não foi possível conectar;
- 102 - Usuario/senha incorretos;
- 200 - Arquivo recebido;
- 201 - Erro ao receber o arquivo;
- 300 - Execução concluída com sucesso;
- 301 - Erro ao executar o arquivo - verifique a sintaxe
- 302 - Erro: Arquivo não encontrado
- 303 - Erro: Arquivo em formato incompatível
- 304 - Erro: Dependências não encontradas
- 305 - Resultado
- Quando a execução de um arquivo .js encerrar, o servidor envia os retornos correspondentes e deleta o arquivo
- Cada usuário poderá executar apenas uma aplicação (arquivo .js) no servidor
- O número máximo de arquivos sendo executados por cliente é 1
- O número máximo de clientes conectados ao servidor é 4
- Caso a conexão entre cliente-servidor seja perdida, todo o processo deverá ser reiniciado. Desta forma, todos os arquivos deverão ser enviados novamente do cliente ao servidor
- O tamanho máximo para o arquivo .js ser recebido é de 2Mb