Résolu Envoit d'un packet avec un tableau "lourd" au serveur
-
Bonsoir,
J’ai une image à envoyer au serveur car elle est générée par le joueur sur le menu principal et sauvegardée sous forme de tableau ```java
int[][] imageData;Une fois connecté, on envoi l'image au serveur et pour ça j'ai fais ceci : La classe où je détecte que le joueur est connecté : ```java @SubscribeEvent public void playerLoggedInEvent(PlayerLoggedInEvent event) { System.out.println("yolo le logged event"); MS_Main.network.sendToServer(new MS_PacketCharacter(MS_Main.instance.playerData.character.getOwnerUUID().toString(), MS_Main.instance.playerData.character.getCharacterSkinData())); }
La classe du packet :
public class MS_PacketCharacter implements IMessage { private String uuid; private int skin[][]; public MS_PacketCharacter(){} public MS_PacketCharacter(String uuid, int[][] skin) { this.uuid = uuid; this.skin = skin; } @Override public void fromBytes(ByteBuf buf) { uuid = ByteBufUtils.readUTF8String(buf); for(int x = 0; x < 64; x++) { for(int y = 0; y < 64; y++) { skin[x][y] = ByteBufUtils.readVarInt(buf, Int.MaxValue()); } } } @Override public void toBytes(ByteBuf buf) { ByteBufUtils.writeUTF8String(buf, uuid); for(int x = 0; x < 64; x++) { for(int y = 0; y < 64; y++) { ByteBufUtils.writeVarInt(buf, skin[x][y], Int.MaxValue()); } } } public static class Handler implements IMessageHandler <ms_packetcharacter, imessage="">{ @Override public IMessage onMessage(MS_PacketCharacter message, MessageContext ctx) { System.out.println("server packet received"); //ici je suis sensé sauvegarder le skin MS_Main.instance.serverData.LoadCharacter(message.uuid); return null; } } }
Le problème c’est que je n’arrive pas à envoyer à mon serveur sans crasher ou une réponse simple de la part du serveur.
Je pense que j’ai justement fais l’envoi de la pire manière possible ^^
En me renseignant sur le web, j’en ai vu quelque uns parler de thread et de socket ici.
Pensez vous qu’il faut que je fasses un thread ? il y a t’il une autre manière possible ?
Je vous avoue que je sèches un petit peu.
Merci de votre attention :)</ms_packetcharacter,>
-
Salut,
Pourquoi ne pas faire un simple buf.readInt() et un buf.writeInt(skin[x][y]) ?Sinon netty passe déjà sur un thread à part pour gérer les paquets et heureusement sinon le traitement d’un paquet causerait un blocage du jeu.
-
@‘robin4002’:
Salut,
Pourquoi ne pas faire un simple buf.readInt() et un buf.writeInt(skin[x][y]) ?Sinon netty passe déjà sur un thread à part pour gérer les paquets et heureusement sinon le traitement d’un paquet causerait un blocage du jeu.
Ah oui … j’avais zappé ces méthodes x)
En fait j’étais dans l’état d’esprit d’être catégorique sur l’ordre d’envoi je pense.
Donc je vais régler ça.
-
Je te remercie de m’avoir éclairé là dessus, il se trouve que j’avais oublier d’instancier le tableau :
private int[][] skin;
ça me retournait une nullexception, j’étais inquiet parce que le paquet me retournait pas de System.out.println() mais c’est réglé maintenant !
Merci encore