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,>


  • Administrateurs

    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 🙂


Log in to reply