Partage
  • Partager sur Facebook
  • Partager sur Twitter

Detecte la deconnexion d'un client winsock2

pour mon emulateur world of warcraft

    21 juin 2007 à 6:05:56

    Bonjour, bonjour ! :p

    Je suis entrain de coder un emulateur world of warcraft que je ne partagerais pas car je ne veux pas devenir illegal, je fais pour le savoir.
    J'avance tres bien, je gere le multi thread, le serveur est configurable pour les packets et les diffrentes variables possible en fonction des packets recus j'ai cree un language de programmetion proche du pascal. Celui est compile par le serveur pour etre cree en .bec...
    Il y a la possibilite de choisir entre service, console ou interface GUI.

    Bon bref.

    Je viens de finir le serveur en lui meme (reste le script et mon petit probleme)

    Ca va vous paraitre tout bete mais impossible de trouver comment detecte la deconnexion d'une socket.

    Car si l'un des client quitte sans annoncer une suite de packet indiquant la deconnexion... mon serveur lance une boucle infinit sur le thread du client qui a quitter.
    A ce moment la mon serveur passe en overflux sur la thread et donc crash !

    Merci de votre aide.
    • Partager sur Facebook
    • Partager sur Twitter
      21 juin 2007 à 19:37:27

      un timeout? après x temps sans réponse on ferme la connexion automatiquement
      • Partager sur Facebook
      • Partager sur Twitter
        21 juin 2007 à 20:56:13

        c'est le but du ping :p , dans les serveur IRC il t'envois un Ping pour vérifier que tu es bien présent . Si tu réponds pas... fini !

        (Dans les serveurs WoW officiel si je laisse mon compte ouvert sans touché à rien, ça se déconnecte au bout de 30min environ)
        • Partager sur Facebook
        • Partager sur Twitter
          21 juin 2007 à 21:46:28

          je suis super impressioné par tes parole (tu es proche de mon nouveau dieu) ça fait combien de temps que tu codes ? parce que moi je code depuis une année grâce au site du zéro et j'aimerais bien savoir comment et depuis combien de temps tu codes des trucs pareil ^^

          icare
          • Partager sur Facebook
          • Partager sur Twitter
            21 juin 2007 à 22:34:14

            Je code depuis quelque temps deja.
            J'ai fait 1 an d'etude en C/C++ a West La college (Los angeles). Et depuis je code par moi meme en lisant tout ce que je trouve et en apprenant le plus de chose possible.
            Je vais donc faire un ping.
            Je penses faire 4 thread par client.
            Une qui recois, une qui send, une qui calcul et une qui ping.

            Merci de vos reponse
            • Partager sur Facebook
            • Partager sur Twitter
              22 juin 2007 à 10:17:31

              y a vraiment pas moyen que tu nous l'envoye après ? ^^

              icare
              • Partager sur Facebook
              • Partager sur Twitter
                22 juin 2007 à 10:37:29

                Non car ça serait illégal. Déjà qu'on laisse ouvert car pour le moment ça reste qu'une discussion si vous commencez à donner des indications sur "comment cracker Wow" ça serait plus légal et donc un modo fermera.

                • Partager sur Facebook
                • Partager sur Twitter
                  22 juin 2007 à 14:35:35

                  Sinon, enfin je pense que c'est déjà ce que tu as fait, mais tu peux voir comment les projets mangos ou antrix ont fait...

                  Perso je suis en train d'étudier leurs codes, eux-même à la base à but éducatif et non pour héberger un serveur en lui-même, et c'est fou ce qu'on peut apprendre sur les packets, connexions, sql...

                  Voilà les svns pour les codes sources :

                  Mangos : https://mangos.svn.sourceforge.net/svnroot/mangos/trunk

                  antrix :
                  svn://emupedia.com/svn/antrix

                  Sinon, juste comme ça, comment comptes-tu intégrer ta base de données ?

                  Sql ? ou bien sous forme de fichiers ?
                  • Partager sur Facebook
                  • Partager sur Twitter
                    22 juin 2007 à 15:14:41

                    Je te conseille de laisser un "temps de grâce" à ton client tu ping et tu attend disons 1 minute, tu re-ping et si tu n'as toujours pas de réponse après 1 ou 2 minutes tu flush la connexion.

                    Faudrait aussi t'adapter avec le client (ici le client de WoW) à savoir après combien de temps sans ping ou sans transfert de données il décide que la connexion a été perdu. Cela te donnera une bonne idée...

                    Si tu possède un compte pour jouer (légalement) à WoW, connectes-toi et débranche ton fil réseau en partant un chrono. Je ne connais pas le client WoW, je n'y ai jamais joué, mais il devrait apparaître une fenêtre avec un message du style : "La connexion avec le serveur à été interrompu"...

                    C'est le genre de détail qui peuvent rendre une connexion Client/Serveur hazardeuse et difficile ou complètement légère et transparente.

                    Tu peux aussi faire que deux threads qui gèrent les pings... tu ping chaque client tour à tour dans un thread avec un temps (ticks) d'envoi et avec l'autre tu reçois les réponses, tu n'as qu'à comparer les temps de réponse où le dépassement du temps d'attente.


                    Bonne chance
                    • Partager sur Facebook
                    • Partager sur Twitter
                      22 juin 2007 à 18:29:34

                      C'est bon j'ai reussi.

                      Je ne prefere pas etudier les sources de mangos parce que il est bugguer et je ne compte pas faire de la meme facon. Deja je vais faire un gestionnaire de collisions reel.
                      Je draw la map de facon virtuel sans fenetre...
                      Et avec des cubes qui represente les personnages, monstre etc...
                      Je gere les collisions.
                      Le systeme de mangos est vraiment mal fichu.

                      Je ne le passerais a personne car j'ai dit que l'emulateur est concu seulement pour le savoir !

                      PS : Je vais utiliser le sql qui est deja implenter (le plus simple d'apres moi). Mais aussi le DMFS qui le serveur de base de donne exeperimental que je code.

                      (comme vous pouvez le voir je suis a fond reseau)
                      • Partager sur Facebook
                      • Partager sur Twitter

                      Detecte la deconnexion d'un client winsock2

                      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                      • Editeur
                      • Markdown