Forum Programmation.c Glib et les threads

Posté par  (site web personnel) .
Étiquettes : aucune
0
14
jan.
2006
Bonjour les moules (vouaaaiiii!)
Je débute tout juste en GTK et je tente de développer un petit logiciel d'IM, d'un côté l'interface graphique en GTK2 de l'autre la partie réseau qui s'occupera des échanges avec le serveurs.

Ma partie réseau étant bloquante je suis contraint d'utiliser des threads, alors autant faire les choses bien, je compte utiliser la Glib pour arriver à mes fins.

Mais il y a quelques points qui me posent problème.
Tout d'abord, imaginons que je reçoive un message, il est intercepté par la partie dite réseau. Comment faire pour qu'elle puisse appeler la fonction qui ouvrira la boite de message ? Et inversement lors de l'envoi d'un message, que la partie graphique puisse contacter la partie réseau et lui dire d'envoyer le message ?

Il y a trop peu de documentations claires à ce sujet, notamment pour la partie réseau. J'utilise pour l'instant une simple boucle infinie qui se chargera d'intercepter les messages et de les envoyer. Si quelqu'un à de bonnes ressources à me fournir je suis preneur.

Merci d'avance :o)
  • # Pour la doc ...

    Posté par  (site web personnel) . Évalué à 2.

    Je me suis récemment mis à gtk.

    Je ne l'ai jamais fait, mais avec la glib tu peut faire de la programmation évenementielle en associant des signaux à des pointeurs sur fonction.

    bonne chance.

    Pour la doc, je te recommande l'API reference guide (j'espere que tu comprends l'anglais)

    http://www.gtk.org/api/

    Il y a un nombre incalculable de tuto en ligne (voit gtk.org, gnome.org ...)

    je te recommande d'utiliser glade3 avec la librairie libglade, ca fait vraiment de la qualité.

    Adhérer à l'April, ça vous tente ?

    • [^] # Re: Pour la doc ...

      Posté par  (site web personnel) . Évalué à 1.

      Impeccable :)
      C'est vrai que j'aurai du commencer par rechercher sur gtk.org
      J'ai aussi pensé utiliser glade, mais dans un but purement éducatif, je compte tout faire à la main.

      Mais merci pout ton coup de pouce !
      • [^] # Re: Pour la doc ...

        Posté par  (site web personnel) . Évalué à 1.

        Je comprend, c'est en forkant qu'on deviens forkeron ....

        Cependant, la libglade, c'est vraiment l'avenir : ton interface est décrite dans un fichier xml (le fichier .glade, si t'as pas envie de l'écrire à la main ...), et tu viens parser le fichier .glade en une ligne ... c'est vraiment le pied !!! c'est plus portable, plus dynamique, plus propre, et c'est l'avenir !!!

        Adhérer à l'April, ça vous tente ?

  • # Réseau

    Posté par  (site web personnel) . Évalué à 3.

    Salut,

    Bon, je ne suis pas un expert en réseaux, mais si j'étais toi, j'aurais les éléments suivants :

    Pour un pogramme client :

    - un thread principal captant les interactions utilisateur sur l'interface graphique.
    - un thread écoutant le flux entrant et envoyant des appels à l'interface graphique dès qu'un message complet est reçu (message au sens texte, notification de connexion, ou tout autre type selon ce que peut faire ton IM).
    - un thread envoyant les données sur le flux sortant : ce thread recevrait des messages de l'interface graphique.

    Pour le programme serveur :

    - un thread principal acceptant les connexions entrantes et les dispatchant directement sur ...
    - ... un thread de traitement d'une connexion (il y en a donc n pour n connexions simultannées)

    Après tout cela dépend de :

    - la volumétrie : c'est juste pour 2 personnes qui dialoguent ou bien pour 10000 utilisateurs simultanés ?
    - la complexité du protocole

    Enfin bref, pour ce genre de programmes, il n'est surement pas inutile de faire un important travail de conception en premier lieu : répartition des tâches entre client et serveur (si tu utilises ce mode), description complète du protocole de communication entre les 2, ... les sujets de réflexion sont nombreux.

    Puisque ce projet est certainement destiné à apprendre des choses, je te propose de regarder le document suivant qui te donnera une idée de toutes ces problématiques, si jamais l'anglais n'est pas un problème :

    - http://www.faqs.org/rfcs/rfc2778.html - une synthèse sympa de ces problématiques
    - http://www.cse.ohio-state.edu/nrl/IM.htm - plein d'autres liens

    Sinon, Google est ton ami :o)

    J'espère ne pas avoir tapé trop à côté de ta question. Bonne chance !
    • [^] # Re: Réseau

      Posté par  (site web personnel) . Évalué à 1.

      Merci pour ton analyse, qui est on ne peut plus claire.
      En effet, je développe un client pour un réseau interne de mon école, pour lequel j'ai du faire du "reverse" afin de connaitre les spécificités techniques liés au réseau.
      Je vais de ce pas explorer tes pistes.

      Merci à toi en tout cas :o)
  • # Glib et Gnet

    Posté par  . Évalué à 3.

    Salut.

    Tu dis que ta partie réseau est bloquante. Admettons. La glib implémente des threads ( GThread ).
    Il existe tout de même une librairie, la Gnet ( http://www.gnetlibrary.org ) qui permet d'utiliser le réseau en serveur/client avec des fonctions non bloquantes. En plus, tu peux utiliser les GIOChannel pour intercepter les informations entrantes et sortantes ( affichage d'une fenêtre lors de la réception de données par exemple ).
    Enfin, histoire de faire un peu de pub, tu peux aller sur ce forum http://forums.apinc.org/index.php et aussi sur le wiki qui va avec : http://www.gtk-fr.org pour avoir de l'aide sur toutes ces libraires.

    Au plaisir de t'y voir et espérant t'avoir aidé un peu...

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.