IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Comment gérer une « chatroom »


Sujet :

C++

  1. #1
    Membre actif
    Homme Profil pro
    Inscrit en
    Avril 2005
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2005
    Messages : 61
    Par défaut Comment gérer une « chatroom »
    Bonjour, je travaille sur un serveur de chat (qui est une partie d'un plus gros projet) et je me demandais comment gérer les chat rooms. Est-ce que je devrais stocker les utilisateurs et les chat rooms créés dans des string array ? ou y a-t-il une solution plus efficace ?

    Merci de vos conseils.

  2. #2
    Membre émérite
    Avatar de Ekleog
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 448
    Par défaut
    Je pencherais pour un unordered_set<user> ; où user est une classe avec le pseudo, l'adresse IP, la socket à utiliser, toutes les informations sur un utilisateur, quoi.

    A la limite, il est envisageable de mettre à la place unordered_map<string, user> ; avec user toujours la même chose, mais pour permettre une récupération plus rapide à partir du pseudo, selon les commandes serveur à prendre en considération.

    Après, si on n'en sais pas plus, on pourra difficilement t'aider.

  3. #3
    Membre actif
    Homme Profil pro
    Inscrit en
    Avril 2005
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2005
    Messages : 61
    Par défaut
    Oui, j'aurais peut-être dû donner plus de détails.

    Donc, mon projet est un serveur d'un jeux vidéo. Je divise le tout en plusieurs serveurs (login server, chat server, matchmaking server, game server, et Database, bien entendu). J'utilise la bibliothèque RakNet. Raknet gère déjà un network ID par client, alors je pourrais utiliser ça, où ta suggestion user.

    Ce que j'avais en tête, est de créer un tableau de string par exemple, où le premier élément est le nom de la chat room, et tous les autres sont des users présents dans la « chat room », tant que les chat rooms n'ont pas besoin de détails particuliers, ça pourrait faire l'affaire…

    Je dois avouer ne pas connaître tous les trucs en C++ et, sincèrement, c'est nouveau pour moi. Utiliser des bibliothèques du genre de Raknet, c'est mon premier projet sérieux et même si plusieurs me diront que c'est trop pour mon niveau, avec ce que j'ai déjà de fait, je m'étonne moi-même. RakNet est très facile a utiliser et je crois que coté connaissances, il m'en manque très peut pour que le tout soit fini.

    Pour la suggestion que tu m'as donné, je ne suis pas sûr de la comprendre totalement. j'ai googlé un peu unordered_set / map. Si je comprends bien, je crée une classe qui définit tout simplement des variables génériques nécessaires à identifier un utilisateur et unordered_set/map en stockerait des copies. Donc, ce serait semblable à former un tableau qui contient les users et leurs données essentielles ? Mais plus facile d'utilisation bien sûr.

    C'est un peu la grosse partie manquante de mes connaissances, ça.. comment un serveur peut gérer plusieurs utilisateurs différents à partir de la même variable/déclaration d'une classe ? Au moins, pour ce qui me manque de connaissances, j'arrive a trouver des moyens « viables » de contourner le problème… j'ai commencé des fonctions qui s'occupent des chat rooms grâce à une base de données mais, à long terme, les performances vont en souffrir, c'est évident. Sinon, j'ai lu sur le Net de faire quelque chose de semblable mais avec des fichiers. Peut-être que ça pourrait être une solution décente mais j'aurais préféré faire ça uniquement dans la mémoire. Ça va de toutes évidence aider coté performance (quoi que les fichiers seraient sûrement suffisent et, coté base de données, le problème est juste que ça aide à éventuellement la surcharger, considérant que ce ne serait pas juste pour le chat server)

    Bon, je crois que ca résume tout.. apres ça, si tu as d'autres suggestions ou commentaires, n'hésite pas. J'apprécie beaucoup l'aide que l'on peut m'apporter.

  4. #4
    Membre émérite
    Avatar de Ekleog
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 448
    Par défaut
    Donc il n'y a que des chatrooms, pas de messages privés.
    Un exemple, non testé et probablement non fonctionnel à cause de ma non connaissance de RakNet (je n'aime que ce qui est vraiment libre, pas les trucs gratuits pour <100k$):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    struct user {
      std::string name;
      RaknetSocket socket;
    };
     
    std::unordered_map<std::string, std::unordered_set<user>> chatserver; // <chatroom, participants>
     
    // user rejoint chatroom :
    chatserver[chatroom].insert(user);
     
    // user lance message sur chatroom :
    for (user & u : chatserver[chatroom]) {
      u.socket.send(message);
    }
     
    // etc.

  5. #5
    Membre actif
    Homme Profil pro
    Inscrit en
    Avril 2005
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2005
    Messages : 61
    Par défaut
    Bien sur je comptais include des message privé, j'ai oublier de le précisé.. quoi que eux, je crois avoir une meilleur idée de comment y arrivé, surtout si j'Arrive a avoir les chat room, et c'est pas grave que tu ne conaisse pas raknet, je cherchais une solution générique (sinon, j'aurais posté sur le forum de raknet) allors merci pour ton aide, et pour ce qui est du coté non libre de raknet, personellement, j'adore la puissance derriere cette librairie, j'ai testé BEAUCOUP de librairie de network, et c'est de loin la meilleur existante (a mon avis) et je crois que, si tu dépasse le budjet de 100k.. tu peut te le payer, et dans mon cas c'est pour un projet qui vise etre commercial si tout va bien, ca fait plaisir d'encouragé les autres développeurs quan leurs produit sont disponible si facilement pour testé/travaillé/vendre sans avoir a payer dabbord.

    Mais, je comprend totalement ton point de vue, et dans un sens je le partage.. j'ai un grand respect pour le logiciel libre (je suis exclusivement sur linux (sauf pour testé mes programmes multiplateforme))


    J'essaye ce que tu m'as offert et je t'en redonne des nouvelle, merci beaucoup!

  6. #6
    Membre émérite
    Avatar de Ekleog
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 448
    Par défaut
    Citation Envoyé par Pierrick584 Voir le message
    Bien sur je comptais include des message privé, j'ai oublier de le précisé..
    Alors peut-être qu'avoir en plus un index sur les noms pourrait être plus avantageux.

    [...] dans mon cas c'est pour un projet qui vise etre commercial si tout va bien, ca fait plaisir d'encouragé les autres développeurs quan leurs produit sont disponible si facilement pour testé/travaillé/vendre sans avoir a payer dabbord.
    Pour un produit commercial, je te conseille de faire un peu plus attention à ton orthographe !

Discussions similaires

  1. [CF][PPC/VB.NET/Datagrid] Comment gérer une colonne CheckBox ?
    Par joefou dans le forum Windows Mobile
    Réponses: 5
    Dernier message: 28/08/2006, 17h08
  2. Réponses: 6
    Dernier message: 21/05/2006, 19h38
  3. [VB.NET] Comment gérer une DLL Delphi ?
    Par slimjoe dans le forum VB.NET
    Réponses: 2
    Dernier message: 09/01/2006, 00h10
  4. Site web : Comment gérer une version Officiel et Officieuse
    Par AlphaYoDa dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 05/12/2005, 08h48
  5. Comment gérer une Progressbar pendant un CopyFrom ?
    Par greg778 dans le forum Composants VCL
    Réponses: 7
    Dernier message: 25/07/2005, 15h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo