Correction de bug du NetworkAPI et prise en charge des codes couleurs en &
This commit is contained in:
@@ -1,28 +1,28 @@
|
||||
Protocole de NetworkAPI
|
||||
====================
|
||||
Ce fichier d<EFBFBD>fini simplement le fonctionnement du protocole qui sera impl<EFBFBD>ment<EFBFBD> dans le package `net.mc_pandacraft.java.plugin.pandacraftutils.network_api`
|
||||
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 <EFBFBD> faire communiquer le serveur Minecraft avec l'interface d'administration ou le site internet
|
||||
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<EFBFBD>seau priv<EFBFBD> (loopback, VNP) entre les syst<EFBFBD>mes composant le serveur, il n'est pas vraiment n<EFBFBD>cessaire de crypter les connexions. En d'autres termes, les clients effectuant les requ<EFBFBD>tes ne correspondent pas aux utilisateurs finaux, se trouvant sur les r<EFBFBD>seaux d'acc<EFBFBD>s.
|
||||
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<EFBFBD>curit<EFBFBD>
|
||||
M<EFBFBD>me si le cryptage ne semble pas n<EFBFBD>cessaire, il faut tout de m<EFBFBD>me s<EFBFBD>curiser avec un syst<EFBFBD>me de "mot de passe", qui sera d<EFBFBD>crit en dessous
|
||||
## 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<EFBFBD>te
|
||||
La requ<EFBFBD>te est construite en mode texte, sur plusieurs lignes. Chaque ligne se fini par un '\n' :
|
||||
## 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<EFBFBD>rique + '\n'
|
||||
- Mot de passe alphanumérique + '\n'
|
||||
- Commande principale + '\n'
|
||||
- Longueur des donn<EFBFBD>es, en octets + '\n'
|
||||
- Valeur/donn<EFBFBD>es (pas de '\n' <EFBFBD> la fin)
|
||||
- Longueur des données, en octets + '\n'
|
||||
- Valeur/données (pas de '\n' à la fin)
|
||||
|
||||
Pour que l'analyse de la requ<EFBFBD>te c<EFBFBD>t<EFBFBD> serveur puisse s'effectuer c<EFBFBD>t<EFBFBD> serveur, le flux qui va du client vers le serveur doit <EFBFBD>tre ferm<EFBFBD>e apr<EFBFBD>s envoi des donn<EFBFBD>es.
|
||||
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
|
||||
@@ -34,46 +34,44 @@ La requ
|
||||
### Les commandes principaux
|
||||
|
||||
#### `command`
|
||||
Ex<EFBFBD>cute la commande pass<EFBFBD>e dans la partie **donn<EFBFBD>e** de la requ<EFBFBD>te, comme si elle avait <EFBFBD>t<EFBFBD> ex<EFBFBD>cut<EFBFBD>e par la console (`ConsoleCommandSender` dans Bukkit). Le r<EFBFBD>sultat de l'ex<EFBFBD>cution de la commande (valeur de retour de CommandExecutor.onCommand()) ne peux pas <EFBFBD>tre retourn<EFBFBD> en r<EFBFBD>ponse. Cependant, la non ex<EFBFBD>cution de la commande sera indiqu<EFBFBD> dans la console du serveur
|
||||
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<EFBFBD>ment ex<EFBFBD>cut<EFBFBD>e dans le thread principal. Attention : certaines commandes ne peuvent pas fonctionner en asynchrone. Cette m<EFBFBD>thode est utile dans le cas o<EFBFBD> le thread principal ne r<EFBFBD>pond plus
|
||||
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<EFBFBD>.
|
||||
Le message pass<EFBFBD> dans la partie **donn<EFBFBD>e** est diffus<EFBFBD> tel quel dans le chat et sur la console (attention <20> la bonne utilisation des codes couleurs)
|
||||
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<EFBFBD>s. La valeur pass<73> dans la partie **donn<6E>e** doit contenir, selon les besoins :
|
||||
Renvoi la liste des joueurs connectés visibles, avec quelques infos utiles en convertissant les codes couleurs `&x` en `§x`
|
||||
|
||||
- `disp_name` pour donner les noms d'affichage du genre [Admin]Pseudo
|
||||
- `location` pour donner la localisation du joueur
|
||||
- `ip` pour donner l'IP du joueur
|
||||
- ...
|
||||
#### `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<EFBFBD>ponse
|
||||
La r<EFBFBD>ponse est construite en mode texte, sur plusieurs lignes. Chaque ligne se fini par un '\n' :
|
||||
## 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<EFBFBD>ponse (`OK` ou `ERROR`) + '\n'
|
||||
- Longueur des donn<EFBFBD>es
|
||||
- Donn<EFBFBD>es, si n<EFBFBD>cessaire,ou message d'erreur, si status != `ok`
|
||||
- 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<EFBFBD>ponse <EFBFBD> une requ<EFBFBD>te sans r<EFBFBD>sultat qui a bien <EFBFBD>t<EFBFBD> ex<EFBFBD>cut<EFBFBD>
|
||||
Réponse à une requête sans résultat qui a bien été exécuté
|
||||
|
||||
OK
|
||||
0
|
||||
----
|
||||
R<EFBFBD>ponse <EFBFBD> une commande inexistante
|
||||
Réponse à une commande inexistante
|
||||
|
||||
ERROR
|
||||
24
|
||||
command_not_exists
|
||||
----
|
||||
R<EFBFBD>ponse <EFBFBD> une requ<EFBFBD>te de type `player_list`
|
||||
Réponse à une requête de type `player_list`
|
||||
|
||||
OK
|
||||
56
|
||||
player\0disp_name
|
||||
marcbal\0<EFBFBD>f[<EFBFBD>4Admin<EFBFBD>f]<EFBFBD>4marcbal<EFBFBD>r
|
||||
marcbal\0§f[§4Admin§f]§4marcbal§r
|
||||
|
||||
|
@@ -61,7 +61,7 @@ public class RequestAnalyser {
|
||||
|
||||
data = sB_data.toString();
|
||||
|
||||
if (data.length() != data_size)
|
||||
if (data.getBytes().length != data_size)
|
||||
throw new BadRequestException("wrong_data_size");
|
||||
|
||||
|
||||
|
@@ -1,5 +1,7 @@
|
||||
package net.mc_pandacraft.java.plugin.pandacraftutils.network_api.request_executors;
|
||||
|
||||
import org.bukkit.ChatColor;
|
||||
|
||||
import net.mc_pandacraft.java.plugin.pandacraftutils.network_api.Response;
|
||||
|
||||
public class RequestExecutorBroadcast extends AbstractRequestExecutor {
|
||||
@@ -12,7 +14,7 @@ public class RequestExecutorBroadcast extends AbstractRequestExecutor {
|
||||
@Override
|
||||
protected Response run(String data) {
|
||||
|
||||
plugin.broadcast(data, false);
|
||||
plugin.broadcast(ChatColor.translateAlternateColorCodes('&', data), false);
|
||||
|
||||
Response rep = new Response();
|
||||
rep.good = true;
|
||||
|
Reference in New Issue
Block a user