YooGoo

 
 
Bienvenue sur YooGoo
 
 

 
 
News

Description du Projet
Avancement du Projet
L'équipe
Photos du Projet et du reste
 
 

 
 
Téléchargement

Le Client
Le Serveur
Les Sources Serveur
Les Sources Client
Cahiers des Charges
Soutenance 1
Soutenance 2
Soutenance 3
Soutenance Finale
 
 

 
 
Contacts

Franck Tetzlaff CV Tessari Marco CV Bouhelier Stéphane CV Pouiller Jérôme CV
 
 

 
 

L'utilisateur

Un serveur de chat a pour but de permettre à plusieurs utilisateurs de dialoguer entre eux. Chaque utilisateur a la possibilité d'échanger des messages avec les autres. De plus pour permettre aux utilisateurs de se regrouper, certaines informations peuvent être publiées aux autres, et éventuellement, enregistrées sur le serveur.

Deux types d'utilisateur.

Non-enregistré

Un utilisateur qui se connecte ponctuellement sur YooGoo, peut ne pas vouloir fournir d'informations le concernant. Il est alors un peu comme un invité. Aucune des informations qu'il fournit ne sont conservées sur le serveur. A peine il sera déconnecté que son profil n'existera plus, il est obligé d'envoyer les informations à chaque fois. Un utilisateur à tout de même accès à toutes les fonctions de YooGoo.

Enregistré

Un utilisateur régulier de YooGoo a fortement intérêt à s'enregistrer. Toutes les informations qu'il fournit sont alors enregistrées sur le serveur. Ainsi à chaque connexion il retrouve toutes les informations qu'il a pu rentrer dans ses précédentes sessions.

Enregistrement

La commande REG PASSWORD permet d'enregistrer le pseudo sous lequel on est connecté. Par la suite cet utilisateur devra taper son mot de passe à la connexion pour pouvoir accéder au serveur. Ainsi on est sûr que ce soit toujours la même personne qui utilise ce nom. Pour se désenregistrer, on utilise la commande UNREG (sans paramètre). Chaque enregistrement crée une entrée dans une base de données d'utilisateur. Lorsqu'on se désinscrit l'entrée est supprimée, et il ne reste plus de trace de l'utilisateur.

Informations.

Les utilisateurs ont donc la possibilité d'enregistrer des informations les concernant afin de les rendre disponibles aux autres utilisateurs. Chaque utilisateur, enregistré ou pas, à un mini profil contenant son pseudo, sa ville, sa date de naissance et son genre. Un utilisateur enregistré a, quant à lui, un profil complet avec nom, prénom, adresse etc.

Pour modifier les valeurs des champs de son profil, on utilise les fonctions CHNICK, CHGENDER,... et ainsi de suite pour tous les champs du profil. Ces fonctions testent les arguments passés en paramètre pour voir s'il est acceptable. Si aucune valeur est passée en paramètre à la fonction, on efface le contenu du champ.

Toutes ces informations sont accessibles aux autres utilisateurs grâce à deux fonctions. La première est ASV USER qui renvoie RPL_ASV NICK STATUS GENRE VILLE. On obtient aussi tout le mini profil. Cette fonction est utilisable aussi bien sur les utilisateurs enregistrés que sur ceux non enregistrés. La seule restriction est qu'ils doivent être connectés. La deuxième fonction est WHO USER. Elle renvoie plusieurs réponses RPL_WHO. La fonction ne renvoie que les champs qui ont une valeur non nulle. Les différentes réponses sont :

  • RPL_WHO n°1 = Pseudo + genre + âge + ville
  • RPL_WHO n°2 = Nom + Prénom + Adresse + Code Postal + Langue + Pays
  • RPL_WHO n°3 = Téléphone 1 + Téléphone 2 + Mail 1 + Mail 2
  • RPL_WHO n°4 = Photo + Description
La fin de la transmission est marquée par le message RPL_ENDWHO. La valeur du champ est précédée par un identifiant par exemple :
        Rpl_who NOM= Angeline SEXE= FEMALE AGE= 19821006 VILLE= Paris
La commande WHO ne marche que sur les utilisateurs enregistrés, connectés ou non.

Mais le plus grand intérêt du profil est de pouvoir effectuer des recherches dessus. Il existe une fonction de recherche qui renvoie la liste des utilisateurs correspondant aux critères que l'on a défini. Il est donc possible de faire une recherche multicritères. La fonction de recherche se prototype ainsi :

Search [Nick=Pseudo] [Age=Age][Birth=Date_Naissance] [Town=Ville]
       [Sex={Male|Female}][Status={OnLine|OffLine}]

On renvoie une réponse RPL_SEARCH PSEUDO pour chaque utilisateur trouvé.

Liste de contacts.

Principes.

La liste de contacts est une liste de personnes que l'on connaît et qui ont des droits spéciaux. Il y a deux types de personnes que l'on rajoute dans sa liste, des personnes que l'on aime bien avec qui on va partager certaines informations. D'autres qu'on essaye d'éviter, on pourra alors leur interdire certaines choses.

Les différentes fonctions.

La fonction permettant de gérer toute la liste de contacts est :

    contactlist add|get|del|change|accept|denie|status

Voici le détail de chaque sous fonction :

ADD USER [DROIT]
:
ajoute un utilisateur à la liste de contacts. Si droit n'est pas indiqué c'est la valeur par défaut qui sera donné comme droit. Si c'est un droit "mauvais" on envoie à l'utilisateur ajouté soit CL_BLACKLISTEDBY (l'utilisateur a été mis en liste noire) soit CL_IGNOREDBY (l'utilisateur est ignoré) soit CL_MUTEBY (l'utilisateur ne peut plus parler avec la personne). Si le droit est "ami" , on envoie alors une requête d'ajout à l'utilisateur concerné, sauf si celui-ci a aussi donné un droit "ami" à l'appelant.

DEL USER
:
supprime un utilisateur de la liste de contacts. Si l'utilisateur était un ami il est prévenu par CL_REMOVEDBY. Si l'utilisateur supprimé était un ami, on supprime le nom de l'appelant dans la liste des utilisateurs dont il est ami.

CHANGE USER [DROIT]
:
change les droits d'un utilisateur de la liste de contacts. Il faut faire attention aux cas où un "ennemi" devient un "ami" ou vice-versa. Si pas de droit la valeur par défaut est mise.

GET [USER]
:
permet de recevoir la liste de contacts d'un utilisateur. Sans paramètre la fonction renvoie la liste de contact de l'appelant. Sinon il faut que l'utilisateur ait les bons droits chez l'utilisateur dont il désire avoir la liste de contacts.
Renvoie RPL_CL PSEUDO DROIT (avec dix couples (pseudo, droit)maximum par réponse).

ACCEPT USER
:
permet d'accepter la demande d'ajout d'un ami.

DENIE USER
:
refuse la demande d'ajout d'un ami.

STATUS
:
renvoie le statut de tous les utilisateurs amis présents sur la liste de contacts.

Les droits.

Comme nous l'avons vu, il est possible de donner des droits "ami" comme des droits "mauvais" aux utilisateurs présents dans la liste de contacts.

Les différents droits sont :

CL_BLACKLIST
:
L'utilisateur cible est mis sur liste noire. Il n'a plus accès aux informations de l'utilisateur appelant (la fonction WHO et ASV lui sont inaccessibles). Il lui est impossible de parler avec l'utilisateur appelant. Si l'utilisateur cible essaye d'ajouter l'appelant à sa liste de contact, il obtiendra un refus automatiquement. De plus l'appelant ne reçoit plus les messages de la cible même lorsqu'il est connecté sur le même canal.

CL_NOREP
:
L'utilisateur appelant ne donne plus accès à ces informations (WHO et ASV inaccessibles). Un ajout sur la liste de contacts sera automatiquement refusé.

CL_MUTE
:
L'utilisateur appelant ne reçoit plus aucun message de la part de la cible, ni directement ni des canaux.

CL_NOINOF
:
L'utilisateur cache ces informations (WHO et ASV inaccessibles).

CL_ASVONLY
:
Le WHO est inaccessible à la cible.

CL_AMI1
:
L'utilisateur cible est un ami. La cible prévient de ses changements de statut, de ses connexions et déconnexions.

CL_AMI2
:
L'utilisateur cible est un ami. La cible prévient de ses changements de statut, de ses connections et déconnections. La cible peut avoir accès à la liste de contacts de l'appelant.

Le Statut.

Le statut permet d'indiquer dans quel état on est. Souvent certains utilisateurs restent connectés toute la journée, mais ils ne sont pas forcément devant leur ordinateur. Pour prévenir les autres dans un tel cas, il suffit de mettre son statut sur AWAY, pour indiquer que l'on est parti. Comme état il existe :

  • ONLINE, on est connecté et devant son ordinateur.
  • CHAT, on est disponible pour discuter.
  • AWAY, on n'est pas devant son écran.
  • DND, Do Not Disturb, on ne veut pas être dérangé.
  • OCCUPIED, on est occupé.
  • BRB, Be right Back, on revient tout de suite.
  • OFFLINE, non connecté.

A chaque changement de statut il faut prévenir toutes les personnes qui sont nos amis. Il faut aussi prévenir tous les utilisateurs qui sont connectés au même canal, ceci peut permettre à un client YooGoo de suivre l'évolution du statut des utilisateurs connectés sur un canal. Il faut aussi prévenir ses amis lorsqu'on se connecte et quand on se déconnecte. A la connexion il faut aussi recevoir les statuts de tous les utilisateurs amis présents dans la liste de contacts. Ceci se fait grâce à la fonction contactlist status. Cela est optionnel, donc ce n'est pas le serveur qui s'en occupe, c'est le client qui doit envoyer cette commande pour gérer une liste d'amis.

Communication avec les autres.

Que serait un serveur de chat sans commande pour dialoguer entre utilisateurs ? Dans YooGoo il existe deux façons de parler entre utilisateur, soit en passant par des canaux, soit en communiquant directement avec un utilisateur.

Pour une discussion directe il y a deux possibilités, soit en passant par le serveur, soit en connexion directe entre les deux personnes. Pour une connexion directe c'est la commande QUERY USER PORT qui sera utilisée. La commande query envoie à l'utilisateur cible l'adresse IP et le port où il doit se connecter pour parler avec l'autre utilisateur. C'est alors aux client de s'occuper d'établir la connexion et de communiquer. Le serveur ne s'occupe que de fournir l'adresse où se connecter. L'inconvénient de cette méthode est d'une part que chaque utilisateur connaît l'IP de l'autre, ce qui dans certains cas peut être dangereux (selon la personne avec qui on parle), d'autre part, on ne passe plus par le serveur, donc la communication n'est pas forcement cryptée. L'avantage est que le

trafic sur le réseau est beaucoupmoins important et plus rapide.

Si on communique en passant par le serveur, c'est la commande MSGUSER USER MSG qui sera utilisée. C'est le serveur qui s'occupe d'envoyer le message d'un utilisateur à l'autre. Le message est comme tous les autres, cryptés. De plus on n'a pas besoin de connaître l'IP de l'autre. Un autre grand avantage de cette méthode est que si l'utilisateur avec qui on parle est enregistré, on peut aussi lui envoyer des messages même s'il n'est pas connecté. Lors de sa prochaine connexion il recevra tous les messages qu'on lui a envoyés. Ceci est extrêmement pratique car souvent on ne peut pas être connecté en même temps, et il est difficile de croiser tout le monde.

L'autre possibilité de discussion est de passer par des canaux. Les canaux sont vus plus en détails dans la partie suivante.

 
 

 
 
Documentation

FAQ
Conception du Protocole
SDK en Ligne
Télécharger SDK
Cahiers des Charges
Soutenance 1
Soutenance 2
Soutenance 3
Soutenance Finale

Comment marche...
Les Canaux
Le Profile
L'administration
La Base de Données
La Cryptographie
Winsock
Le Multithreading
 
 

 
 
Liens

Epita
EpiTarget
Hallucinetik - Zone 42
poupouill.fr.st Minosis (Spé C2)
La Spé C1
La Sup C1
 
 


 
 
made in Epita Powered by ApachePHP Scripting Language

All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest © 2000 by YooGoo Team
Des remarques, des question, des choses pas claires? Hargos@ifrance.com