• S'inscrire
    • Se connecter
    • Recherche
    • Récent
    • Mots-clés
    • Populaire
    • Utilisateurs
    • Groupes

    Résolu Envoit d'un packet avec un tableau "lourd" au serveur

    1.9.x et 1.10.x
    1.10.x
    2
    4
    942
    Charger plus de messages
    • Du plus ancien au plus récent
    • Du plus récent au plus ancien
    • Les plus votés
    Répondre
    • Répondre à l'aide d'un nouveau sujet
    Se connecter pour répondre
    Ce sujet a été supprimé. Seuls les utilisateurs avec les droits d'administration peuvent le voir.
    • N
      nargacu83 dernière édition par

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

      1 réponse Dernière réponse Répondre Citer 0
      • robin4002
        robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par

        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.

        1 réponse Dernière réponse Répondre Citer 0
        • N
          nargacu83 dernière édition par

          @‘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.

          1 réponse Dernière réponse Répondre Citer 0
          • N
            nargacu83 dernière édition par

            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 🙂

            1 réponse Dernière réponse Répondre Citer 0
            • 1 / 1
            • Premier message
              Dernier message
            Design by Woryk
            Contact / Mentions Légales

            MINECRAFT FORGE FRANCE © 2018

            Powered by NodeBB