Coder Social home page Coder Social logo

ft_irc's People

Contributors

julesmaisonneuve avatar s-stanley avatar

Watchers

 avatar  avatar

ft_irc's Issues

Gerer les auto reply de PRIVMSG

Permettre de :

  • set un away message
  • dire qu'on est away
  • dire qu'on est revenu
  • envoyer un message auto quand un utilisateur est away

Faut-il supprimer le code relatif a la map de commandes ?

if (all_users[i - 1].connected == true)
{
    // DBG(buffer)
    if (cmds.find(buffer) != cmds.end())    // On cherche dans la map si la commande existe
    {
        cmds.find(buffer)->second(fds, nfds, i);     // On exécute la fonction associée
    }
    else               // Ce n'est pas une commande connue, on envoie le message à tous les utilisateurs présents dans le channel
    {
        for (unsigned int j = 1; j <= (unsigned int)nfds; j++)
        {
            if (j != i)
            {
                send(fds[j].fd, buffer, strlen(buffer), 0);
            }
        }
    }
}
std::cout << buffer;

Problème avec delete_user_from_list

Par exemple avec la command QUIT, lorsqu'on supprime un utilisateur de la liste qui se trouve à la fin tout se passe bien, par contre quand il a un next il y a un problème avec la liste d'utilisateurs

Problème avec les messages dans les channels

Avec 2 utilisateurs connectés: si le 2eme à s'être connecté JOIN un channel et qu'il écrit un message dedans son propre message lui est envoyé 2 fois au lieu d'1 avec pour le 1er message en nick RPL WELCOME et pour le 2eme son nick. Quand le 1er utilisateur join le channel même chose et ils ne reçoivent pas les messages de l'un ou de l'autre

Définir ce qu'il y a à faire

Le but de cette issue est de définir un plan, une liste de taches a réaliser pour réaliser ce projet.

Pour le moment je pense à:

  • Setup le folder avec Makefile + main.cpp (#2)
  • Créer un basic serveur qui accept les connexions (#4)
  • Ajouter la vérification des arguments (port + password) et prévenir les erreurs + ajouter les tests nécessaires (#3)
  • Stocker les commandes et leur fonction associee dans une map (#10)
  • Stocker tous les clients dans une list chainée (#5)
  • Tester que le serveur irc reçoit bien les packets envoyées par le client (#6)
  • Permettre qu'un message reçu peut-être envoyer en broadcast a tous les clients (#7)
  • #13
  • #14
  • Filter les commandes et permettre de réaliser d'autres options (envoyées un message privé, changer son username, etc...)
  • Avoir un type d'utilisateur operator avec des droits différents

Probable leaks dans les return de server::exec

Dans la fonction membre server::exec nous faisons beaucoup de return, cependant nous ne liberons pas la memoire du split de la commande (comme c'est le cas en bas de la fonction avec delete[] value). Ce qui genere probablement des leaks

Erreur message chat

  • Quand un utilisateur a quitter un channel, il peut toujours encore des messages dedans. Ça ne devrait pas etre possible
  • Quand un channel n'existe pas, un message est quand meme envoye, ça ne devrait pas etre possible non plus

Quand 2 users join le même channel le programme crash

Ca viendrait de la boucle qui envoie un message lorsqu'un utilisateur rejoint un channel:

for (int it = 0; it < (chan->nb_users); it++)
{
    send_user_joined_channel(
        fds[chan->users_id[it]].fd,
        get_user(i -1, all_users)->nickname,
        get_user(i -1, all_users)->username,
        value[1]
    );
}

Buffer qui ne se vide pas après read

Le buffer utilisé pour stocker les données lues avec la fonction read() ne se vide pas.

Fix possible : Utiliser malloc et free pour l'allocation du buffer, augmenter la taille maximale

Retirer les fds update de poll()

Au bout d'un certain temps il y a un bug sur le server, poll ne fait qu'envoyer des changements de FD et ne bloque rien. Il est possible qu'il soit necessaire de retirer les fds une fois qu'ils ont renvoyer un event.

corriger le probleme d'espace de split

Quand on recupere les commandes envoyes par le client (et via telnet), le split fonctionne mal, exemple

PASS      password

au lieu de

PASS password

Renvoie ERR_NEEDMOREPARAMS alors qu'il devrait valider la commande

Avoir une liste répertoriant tous les channels

Utiliser une liste pour stocker tous nos channels qui seraient sous forme de structure avec pour attributs leur nom et un tableau contenant tous les membres du channel.

struct channel
{
     std::string name;
     user*       users;
}

std::list<channel> channels;

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.