PandacraftUtils/NetworkAPI protocole.md

3.0 KiB

Protocole de NetworkAPI

Ce fichier défini simplement le fonctionnement du protocole qui sera implémenté dans le package net.mc_pandacraft.java.plugin.pandacraftutils.network_api

Il servira à faire communiquer le serveur Minecraft avec l'interface d'administration ou le site internet

Type de connexion

Connexion TCP

Cryptage

Les communications devant rester dans un réseau privé (loopback, VNP) entre les systèmes composant le serveur, il n'est pas vraiment nécessaire de crypter les connexions. En d'autres termes, les clients effectuant les requêtes ne correspondent pas aux utilisateurs finaux, se trouvant sur les réseaux d'accès.

Sécurité

Même si le cryptage ne semble pas nécessaire, il faut tout de même sécuriser avec un système de "mot de passe", qui sera décrit en dessous

Structure d'une requête

La requête est construite en mode texte, sur plusieurs lignes. Chaque ligne se fini par un '\n' :

  • Mot de passe alphanumérique + '\n'
  • Commande principale + '\n'
  • Longueur des données, en octets + '\n'
  • Valeur/données (pas de '\n' à la fin)

Pour que l'analyse de la requête côté serveur puisse s'effectuer côté serveur, le flux qui va du client vers le serveur doit être fermée après envoi des données.

Exemple de paquet

ervg1e3r2c
command
12
say Salut :)

Les commandes principaux

command

Exécute la commande passée dans la partie donnée de la requête, comme si elle avait été exécutée par la console (ConsoleCommandSender dans Bukkit). Le résultat de l'exécution de la commande (valeur de retour de CommandExecutor.onCommand()) ne peux pas être retourné en réponse. Cependant, la non exécution de la commande sera indiqué dans la console du serveur

command_async

Pareil que command mais cette fois, celle-ci n'est pas forcément exécutée dans le thread principal. Attention : certaines commandes ne peuvent pas fonctionner en asynchrone. Cette méthode est utile dans le cas où le thread principal ne répond plus

broadcast

Affiche un message sur le chat pour tout le monde connecté. Le message passé dans la partie donnée est diffusé

player_list

Renvoi la liste des joueurs connectés visibles, avec quelques infos utiles en convertissant les codes couleurs &x en §x

player_list_op

Renvoi la liste de tous les joueurs connectés (même vanish), avec quelques infos utiles en convertissant les codes couleurs &x en §x

Structure d'une réponse

La réponse est construite en mode texte, sur plusieurs lignes. Chaque ligne se fini par un '\n' :

  • Status de réponse (OK ou ERROR) + '\n'
  • Longueur des données
  • Données, si nécessaire,ou message d'erreur, si status != ok

Exemple de paquets

Réponse à une requête sans résultat qui a bien été exécuté

OK
0

Réponse à une commande inexistante

ERROR
24
command_not_exists

Réponse à une requête de type player_list

OK
56
player\0disp_name
marcbal\0§f[§4Admin§f]§4marcbal§r