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 :

Création d'objet dynamique.


Sujet :

C#

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2013
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2013
    Messages : 86
    Points : 56
    Points
    56
    Par défaut Création d'objet dynamique.
    Bonjour,
    Je suis sur un soft de messagerie instantanée.
    Les users peuvent choisir de joindre des chatroom. Cependant, les "room" sont des objets.
    Comment puis-je dynamiquement créer plusieurs mêmes objets ?
    Ci joint le bout de code permettant de créer l'objet "room" et de rejoindre la chatroom.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    var roomName = "X";
                    var serverName = "X";
                    var userName = jc.User;
                    var jid = new jabber.JID(roomName, "conference." + serverName, userName);
                    Room room = r.GetRoom(jid);
                    room.OnJoin += new RoomEvent(room_OnJoin);
                    room.Join();
    Je pensais faire une fonction prenant en parametre le "roomName" de la chatroom à rejoindre mais du coup la variable "room" resterait la même ce qui ecraserait la chatroom créée précedemment... ( ça fait bcp de room dans la même phrase ahah)

    J'espère que mes explications sont claires.

    talkk

  2. #2
    Membre confirmé Avatar de Jabbal'H
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2004
    Messages
    403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2004
    Messages : 403
    Points : 580
    Points
    580
    Par défaut
    Mais ta room doit être commune à tous les utilisateurs qui y participent. J'entend par la que l'instance de la Room doit être identique, il ne faut créer une nouvelle room à chaque connexion.


    A l’initialisation du programme, toutes les Rooms doivent probablement être créé, et, à chaque fois qu'un utilisateur cherche à s'y connecter, il récupère l'instance de la room en question.


    Ou c'est la Room qui reçoit une instance de l'utilisateur et celui-ci ne fait que s'inscrire à des événements.


    D'ailleur, en terme d'architecture, je ne suis pas sur qu'il soit bien que l'utilisateur ait une instance de la Room, et que la Room ait une instance de l'utilisateur, cela dit c'est à confirmer
    " Je préfère comprendre les gens qui ne me comprennent pas "

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2013
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2013
    Messages : 86
    Points : 56
    Points
    56
    Par défaut
    En fait, la chatroom est créée et existe sur un serveur local.
    La classe "Room" sert à me connecter a cette chatroom.
    Donc pour rejoindre une chatroom je dois procéder de la façon montrée au dessus : créer un objet Room, indiquer les paramètres de connexion et la rejoindre.
    Donc si je ne rejoins qu'une chatroom, il n'y a pas de pb car je ne créé qu'un objet Room appelé "room1" par exemple.
    Mais dans le cas présent, l'user doit se connecter a plusieurs chatrooms au démarrage de l'application, donc je cherche un moyen de créé dynamiquement plusieurs objet Room en fonction des chatrooms auxquels veut se connecter l'user.

  4. #4
    Membre confirmé Avatar de Jabbal'H
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2004
    Messages
    403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2004
    Messages : 403
    Points : 580
    Points
    580
    Par défaut
    Si je comprend bien çà
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    var jid = new jabber.JID(roomName, "conference." + serverName, userName);
    Te donne l'identifiant ainsi que la chatroom sur lequel il souhaite se connecter ?
    Ensuite tu passe cet identifiant à la Room, qui est se connecte à la Chatroom identifié par "roomName", c'est bien çà ?
    Et que devient l'objet Room ensuite ? Il est stocké dans quoi ?


    J'ai l'impression qu'il y a un problème de conception, d'après ce que tu sous entend, un utilisateur ne peut être connecté et ne connait qu'une seule Room, est ce qu'il ne devrait pas au contraire connaitre X Room ?

    Est ce que tu pourrais détailler un peu plus ta conception ?
    " Je préfère comprendre les gens qui ne me comprennent pas "

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2013
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2013
    Messages : 86
    Points : 56
    Points
    56
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    var roomName = "X";
                    var serverName = "X";
                    var userName = jc.User;
                    var jid = new jabber.JID(roomName, "conference." + serverName, userName);
                    Room room = r.GetRoom(jid);
                    room.OnJoin += new RoomEvent(room_OnJoin);
                    room.Join();
    En gros, ce bout de code ne me sert qu'a rejoindre la chatroom qui, elle, a été créée sur mon serveur de messagerie.
    Pour rejoindre une chatroom, je dois créer une instance d'objet Room ( ligne 5) qui s'appelle ici "room" ( un peu redondant, je l'avoue), qui prend en paramètres les données de connexion ( nom de la chatroom, le nom du serveur, et l'username ).

    Donc pour chaque chatroom que je souhaite rejoindre, je dois instancier une nouvelle fois l'objet Room.
    En gros réutiliser ce code en changeant la variable ligne 5 et les parametres ( roomName etc.. )

  6. #6
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2013
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2013
    Messages : 86
    Points : 56
    Points
    56
    Par défaut
    Petit up svp ^^

  7. #7
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2013
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2013
    Messages : 86
    Points : 56
    Points
    56
    Par défaut
    Bon, pas de réponse alors j'essaye des trucs ...
    J'ai essayé de créer un tableau de type "Room", qui pourrait me permettre de réaliser mon projet.
    Voici donc le bout de code que j'ai pondu .

    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
    17
    18
    19
            public Room[] rooms;
            public int nbRoom = 0;
    
            private void roomConnection(string datroom)
            {
                    
                    var roomName = datroom;
                    var serverName = "X";
                    var userName = jc.User;
                    var jid = new jabber.JID(roomName, "conference." + serverName, userName);
    
                    rooms[nbRoom] = r.GetRoom(jid);
                    r.OnJoin += new RoomEvent(r_OnJoin);
                    rooms[nbRoom].Join();
                    nbRoom += 1; 
    
              
            }
    J'obtiens une erreur sur la ligne en rouge "La référence d'objet n'est pas définie à une instance d'un objet." .
    J'avoue que j'ai fait ça un peu en mode "en avant guingamp, croisons les doigts" . Je sais pas si c'est correct, si c'est possible etc...

    A savoir que le type "Room" existe, je l'ai pas inventé !

  8. #8
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 93
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2014
    Messages : 13
    Points : 20
    Points
    20
    Par défaut
    Citation Envoyé par talkk Voir le message
    Bon, pas de réponse alors j'essaye des trucs ...
    J'ai essayé de créer un tableau de type "Room", qui pourrait me permettre de réaliser mon projet.
    Voici donc le bout de code que j'ai pondu .

    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
    17
    18
    19
            public Room[] rooms;
            public int nbRoom = 0;
    
            private void roomConnection(string datroom)
            {
                    
                    var roomName = datroom;
                    var serverName = "X";
                    var userName = jc.User;
                    var jid = new jabber.JID(roomName, "conference." + serverName, userName);
    
                    rooms[nbRoom] = r.GetRoom(jid);
                    r.OnJoin += new RoomEvent(r_OnJoin);
                    rooms[nbRoom].Join();
                    nbRoom += 1; 
    
              
            }
    J'obtiens une erreur sur la ligne en rouge "La référence d'objet n'est pas définie à une instance d'un objet." .
    J'avoue que j'ai fait ça un peu en mode "en avant guingamp, croisons les doigts" . Je sais pas si c'est correct, si c'est possible etc...

    A savoir que le type "Room" existe, je l'ai pas inventé !
    Pour utiliser la syntaxe que tu as mis en rouge, il faut que tu disposes d'une instance de tableau de type Room, à moins que tu ne créés une liste générique de rooms au moyen d'une collection générique List<Room>.

  9. #9
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2013
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2013
    Messages : 86
    Points : 56
    Points
    56
    Par défaut
    J't'avoue que j'ai jamais utilisé de list jusqu'ici, si tu pouvais m'éclaircir rapidement à ce sujet ça serait sympa !

    une instance de tableau room ? C'est pas ce que j'ai fait au début ?

  10. #10
    Membre éprouvé
    Homme Profil pro
    Architecte technique
    Inscrit en
    Septembre 2005
    Messages
    462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 462
    Points : 1 056
    Points
    1 056
    Par défaut
    Aujourd'hui l'utilisation des tableaux est assez rare.

    Une liste (List<T>) est beaucoup plus facile a manier qu'un tableau. List possède les méthode Add, Remove, et avec Linq il est vraiment très facile de "requêter" une liste.
    Un tableaux est utilisé quand tu sais que tu n'aura pas d'ajout ou de suppression de données dans ton tableau (un tableau a une taille fixe) et que tu veux "optimiser" ton code...

    Dans ton code tu n'as pas instancié ton tableau (il manque "new ...") mais je pense que tu as besoin d'une liste. A moins que tu es un nombre de room bien défini et qui ne peux pas changer !

  11. #11
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2013
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2013
    Messages : 86
    Points : 56
    Points
    56
    Par défaut
    Bah justement, non, le nb de room n'est pas défini a l'avance !
    Du coup j'vais m’intéresser au liste !

  12. #12
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2013
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2013
    Messages : 86
    Points : 56
    Points
    56
    Par défaut
    Je viens de me rendre compte que le type "Room" n'avait pas de constructeur.
    J'avoue que je suis complètement perdu du coup..

  13. #13
    Membre éprouvé
    Homme Profil pro
    Architecte technique
    Inscrit en
    Septembre 2005
    Messages
    462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 462
    Points : 1 056
    Points
    1 056
    Par défaut
    Une classe à toujours un constructeur.

    Si il n'est pas déclaré c'est un constructeur sans paramètre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        public class Bonjour
        {
            // Constructeur par défaut
            // Il n'y a pas besoin de le déclarer
            public Bonjour()
            {
     
            }
        }

  14. #14
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2013
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2013
    Messages : 86
    Points : 56
    Points
    56
    Par défaut
    D'accord, mais pour remplir ma liste quelle démarche dois-je suivre ?
    Pour rejoindre ma chatroom j'ai besoin de faire un ".Join" sur la variable de type Room.
    Et cette variable je dois la remplir avec un " mavariable = r.GetRoom(jid)"

    Je ne connais vraiment pas les listes et les seuls exemples que j'ai trouvé sont des listes "int" ou "string" très simple...

  15. #15
    Membre actif
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Juin 2010
    Messages : 210
    Points : 243
    Points
    243
    Par défaut
    Bonjour,
    cela ne change rien que le type de ta liste soit un int ou un "room".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    List<Room> MyListOfClassRomm = new List<Room>();
    Room MyRoom;
     
    MyRoom = new Room();
     
    MyRoom.Property1 = "blabla";
    MyRoom. ... "tu peux instancier tes property".
    ...
     
    MyListOfClassRomm.Add(MyRoom);
    Voila rapidement comment remplir ta liste.

    A+

  16. #16
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2013
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2013
    Messages : 86
    Points : 56
    Points
    56
    Par défaut
    D'accord, merci pour l'info !
    Sachant que je vais mettre cette procédure dans une fonction, est-ce gênant d'utiliser tjs la même variable ?

  17. #17
    Membre actif
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Juin 2010
    Messages : 210
    Points : 243
    Points
    243
    Par défaut
    Du coup j'aurais pu compléter avec l'exploitation.

    Désolé.

    Donc ensuite tu auras ta liste rempli et cela te permettra de faire ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    foreach (Room MyRoom in MyListOfClassRomm)
    {
       //Ici tu pourras exploiter chacune des classe Room présente dans ta liste
    }

    A+

  18. #18
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 93
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2014
    Messages : 13
    Points : 20
    Points
    20
    Par défaut
    Citation Envoyé par egautier18 Voir le message
    Du coup j'aurais pu compléter avec l'exploitation.

    Désolé.

    Donc ensuite tu auras ta liste rempli et cela te permettra de faire ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    foreach (Room MyRoom in MyListOfClassRomm)
    {
       //Ici tu pourras exploiter chacune des classe Room présente dans ta liste
    }

    A+
    Attention, ici MyRoom ne pourra être modifié car il n'est accessible qu'en lecture, si mes souvenirs sont bons.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Création d'objets dynamiquement et accès à un serveur
    Par NoviceJava dans le forum Général Conception Web
    Réponses: 7
    Dernier message: 26/05/2007, 16h45
  2. [PowerBuilder] Création d'objets dynamiques
    Par Béné123456789 dans le forum Powerbuilder
    Réponses: 3
    Dernier message: 12/06/2006, 00h33
  3. [VB.NET] Création d'objet dynamique
    Par Torkan dans le forum Windows Forms
    Réponses: 9
    Dernier message: 29/05/2006, 03h18
  4. création d'objets dynamique
    Par cilies38 dans le forum Langage
    Réponses: 10
    Dernier message: 06/03/2006, 18h43
  5. [FLASH MX2004] Création d'objet dynamiquement
    Par noarno dans le forum Flash
    Réponses: 3
    Dernier message: 15/12/2004, 11h00

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