coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 23 oct. 2008 à 16:02
j'aime bien le concept.
idealement, t'aurais du faire une interface genre IrcReader avec des methodes genre :
OnPrivMsg
OnNotice
etc...
simonviei
Messages postés17Date d'inscriptionjeudi 13 avril 2006StatutMembreDernière intervention 1 décembre 2008 22 oct. 2008 à 08:49
Après avoir ajouté diverses focntion à mon bot, mais qui se trouvaient dans la class Irc_log elle même, j'ai décidé de refaire tout le code :
Une mini gestion des erreurs, une class de connexion, une class pour le bot, une class pour les stats.
J'ai encore des bugs, mais pour l'instant, rien de méchant, je me met dessus cette après midi.
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 2 juil. 2008 à 22:32
Hello,
je ne vais pas redire ce qui a été dit; donc, j'ajouterais juste que je trouve ça pas mal comme code : c'est propre, clair, pas mal codé...pour un débutant en PHP5, c'est très bien :-)
Morphinof
Messages postés255Date d'inscriptionvendredi 20 avril 2007StatutMembreDernière intervention 9 août 20134 2 juil. 2008 à 12:16
En fait c'est pas très compliqué, comme tu as pu le voir le bloc try{ ... }catch(Exception $e){ ... } est fait pour "attraper" les exceptions qui seraient "jetées" par ton application.
Tu dois identifier les erreurs qui peuvent survenir, pennons l'exemple de ta fonction connexion, une exception évidente serait : on n'as pas réussi à ouvrir notre socket parce que par exemple le serveur n'existe pas ou encore le port est bloqué, il te faudra donc tester le $errno de fsockopen et selon sa valeur tu va jeter une exception correspondant au type d'erreur et tu peu même incorporer dans le message de ton exception $errstr, exemple :
throw new UnknowServerException('Exception : '.$errstr);
throw new PortException('Exception : '.$errstr);
(Ce ne sont que deux rapides exemples)
Bien évidement tu vas devoir créer les classes correspondant aux exceptions en les faisant hériter de la classe Exception et ensuite dès que tu va faire appel à ta fonction connexion c'est la que tu met ton bloc try{}catch(){} :)
codefalse
Messages postés1123Date d'inscriptionmardi 8 janvier 2002StatutModérateurDernière intervention21 avril 20091 2 juil. 2008 à 12:06
De là à dire que tu es "débile", quand même ! :p J'en serai presque à supprimer ton post pour non respect de ... toi même ;)
Si tu passe tes scripts de php4 à 5, c'est forcément sur que tu oublie des choses, tu peux pas penser à tout ! Tes erreurs sont justifiées et ton acte est louable (enfin un qui comprends le fait de ne plus utiliser php4 !).
Tu verra, __get et __set, c'est que du bonheur !
Mes remarques ne sont pas très lourdes, ton code est corrigeable en une heure (sauf la dernière partie).
Bonne recherches :) n'hésite pas si tu bloque
simonviei
Messages postés17Date d'inscriptionjeudi 13 avril 2006StatutMembreDernière intervention 1 décembre 2008 2 juil. 2008 à 11:44
J'ai longtemps codé en php4 et j'essaye de tout passer mes script en php5 et comme je suis autodidacte...enfin bref commençons :p :
codefalse :
- Pour le constructeur, je suis débile car en plus je le fais sur d'autres scripts, donc je vais vite corriger ça *se tape sur la main*
- En ce qui concerne les setters/getters, je vais vite me documenter après ce message pour mettre ça en place !
- Pour ping c'est en effet un peu débile...je corrige ça vite aussi :p
- Pour la dernière remarque, je vais voir ce que je peux faire :) Je ne promet rien ^^
Morphinof
- Pourquoi mais j'ai encore des flous dans ma tête concernant les exceptions, j'attends de comprendre à peu plus le sujet pour éventuellement faire ma propre gestion des exceptions :p
/me part coder
Je met à jour le code dès que j'ai convenablement avancé.
Morphinof
Messages postés255Date d'inscriptionvendredi 20 avril 2007StatutMembreDernière intervention 9 août 20134 2 juil. 2008 à 10:35
C'est simple et efficace, je rajouterai rien CodeFalse à déjà relevé tout ce à quoi j'ai pensé. Ah non ! Il à oublié une petite chose ! :D
try { ... }catch (Exception $e) {
die(...);
}
Comment sa die?? ^^ Tu devrais faire ta propre gestion des exception et enlever ces horribles die ;)
Bonne continuation !
codefalse
Messages postés1123Date d'inscriptionmardi 8 janvier 2002StatutModérateurDernière intervention21 avril 20091 2 juil. 2008 à 10:22
J'aime bien le principe perso, c'est un truc tout simple mais qui est bien pensé :)
Sinon au niveau des remarques, je trouve bizar que ton constructeur propose des variables à modifier tel que server ou port, et pas d'autres, tel que nick, host, mail. C'est incohérent. Par ailleur, en php5 la syntaxe conseillée pour le constructeur est __construct. On garde généralement le nom de la classe en tant que fonction pour les compatibilité descendantes avec les anciennes versions de php mais dans ton cas, l'usage des propriétés public/privée/protegée ne rendront pas ton code compatible avec php4 donc ...
Pour ce qui est des setters et des getters, je te conseille aussi d'utiliser les méthodes magiques __set et __get, et de mettre toutes tes variables "propriétés" dans un tableau, comme ca dans tes setters/getters, tu n'a qu'à tester si l'entrée du tableau existe et agir en conséquence, c'est plus simple.
Parce qu'en fait là tu ne peux modifier que les trois entrées que tu n'a pas pu mettre dans le constructeur. Du coup avec l'idée des méthodes magiques, tu peux tout modifier ou non.
Du coup dans ton constructeur tu ne met que l'essentiel, du genre le serveur, le port, l'host, et éventuellement le nom et l'email du bot. Le reste tu attribue des valeurs prédéfinies.
L'utilisateur pourra modifier ce qu'il veux ensuite grace aux méthodes magiques.
Ensuite j'ai pas regardé attentivement toutes tes méthodes, mais la méthode pong m'interpelle. Tu teste dans analyseLine si la requete est "PING", si oui tu appele la méthode pong qui RE-teste si la requete est PING. Pourquoi le faire deux fois ? tu fait tous tes tests dans analyseLine et dans la méthode pong, tu ne fait que fwrite($this->connexion, 'PONG '.$line[1]);
Ma derniere remarque portera sur quelque chose de plus inutile mais à envisager si tu a le temps et la motivation. C'est au niveau conception POO. Tu définit un instance de Irc_Log, et dans cette instance, tu gère les informations concernant le bot (nom, mail, etc).
Normallement, tu devrait faire une classe IrcBot ou tu indique les informations concernant le bot, que tu passe à une classe Irc (par exemple, qui se chargera de la connection) et tu instancie IrcLog (avec les informations qu'il faut) que tu passera aussi à la classe Irc.
Tu sépare ainsi la gestion de la communication sur le serveur, de ton utilisateur (ici le bot) et d'un service d'enregistrement d'évenement (ici le log). Bon apres ca c'est l'extra bonus ! :)
23 oct. 2008 à 16:02
idealement, t'aurais du faire une interface genre IrcReader avec des methodes genre :
OnPrivMsg
OnNotice
etc...
22 oct. 2008 à 08:49
Une mini gestion des erreurs, une class de connexion, une class pour le bot, une class pour les stats.
J'ai encore des bugs, mais pour l'instant, rien de méchant, je me met dessus cette après midi.
2 juil. 2008 à 22:32
je ne vais pas redire ce qui a été dit; donc, j'ajouterais juste que je trouve ça pas mal comme code : c'est propre, clair, pas mal codé...pour un débutant en PHP5, c'est très bien :-)
2 juil. 2008 à 12:16
Tu dois identifier les erreurs qui peuvent survenir, pennons l'exemple de ta fonction connexion, une exception évidente serait : on n'as pas réussi à ouvrir notre socket parce que par exemple le serveur n'existe pas ou encore le port est bloqué, il te faudra donc tester le $errno de fsockopen et selon sa valeur tu va jeter une exception correspondant au type d'erreur et tu peu même incorporer dans le message de ton exception $errstr, exemple :
throw new UnknowServerException('Exception : '.$errstr);
throw new PortException('Exception : '.$errstr);
(Ce ne sont que deux rapides exemples)
Bien évidement tu vas devoir créer les classes correspondant aux exceptions en les faisant hériter de la classe Exception et ensuite dès que tu va faire appel à ta fonction connexion c'est la que tu met ton bloc try{}catch(){} :)
Pour une meilleure explication : http://classes.scriptsphp.org/article.PHP-5-et-les-exceptions
2 juil. 2008 à 12:06
Si tu passe tes scripts de php4 à 5, c'est forcément sur que tu oublie des choses, tu peux pas penser à tout ! Tes erreurs sont justifiées et ton acte est louable (enfin un qui comprends le fait de ne plus utiliser php4 !).
Tu verra, __get et __set, c'est que du bonheur !
Mes remarques ne sont pas très lourdes, ton code est corrigeable en une heure (sauf la dernière partie).
Bonne recherches :) n'hésite pas si tu bloque
2 juil. 2008 à 11:44
codefalse :
- Pour le constructeur, je suis débile car en plus je le fais sur d'autres scripts, donc je vais vite corriger ça *se tape sur la main*
- En ce qui concerne les setters/getters, je vais vite me documenter après ce message pour mettre ça en place !
- Pour ping c'est en effet un peu débile...je corrige ça vite aussi :p
- Pour la dernière remarque, je vais voir ce que je peux faire :) Je ne promet rien ^^
Morphinof
- Pourquoi mais j'ai encore des flous dans ma tête concernant les exceptions, j'attends de comprendre à peu plus le sujet pour éventuellement faire ma propre gestion des exceptions :p
/me part coder
Je met à jour le code dès que j'ai convenablement avancé.
2 juil. 2008 à 10:35
try { ... }catch (Exception $e) {
die(...);
}
Comment sa die?? ^^ Tu devrais faire ta propre gestion des exception et enlever ces horribles die ;)
Bonne continuation !
2 juil. 2008 à 10:22
Sinon au niveau des remarques, je trouve bizar que ton constructeur propose des variables à modifier tel que server ou port, et pas d'autres, tel que nick, host, mail. C'est incohérent. Par ailleur, en php5 la syntaxe conseillée pour le constructeur est __construct. On garde généralement le nom de la classe en tant que fonction pour les compatibilité descendantes avec les anciennes versions de php mais dans ton cas, l'usage des propriétés public/privée/protegée ne rendront pas ton code compatible avec php4 donc ...
Pour ce qui est des setters et des getters, je te conseille aussi d'utiliser les méthodes magiques __set et __get, et de mettre toutes tes variables "propriétés" dans un tableau, comme ca dans tes setters/getters, tu n'a qu'à tester si l'entrée du tableau existe et agir en conséquence, c'est plus simple.
Parce qu'en fait là tu ne peux modifier que les trois entrées que tu n'a pas pu mettre dans le constructeur. Du coup avec l'idée des méthodes magiques, tu peux tout modifier ou non.
Du coup dans ton constructeur tu ne met que l'essentiel, du genre le serveur, le port, l'host, et éventuellement le nom et l'email du bot. Le reste tu attribue des valeurs prédéfinies.
L'utilisateur pourra modifier ce qu'il veux ensuite grace aux méthodes magiques.
Ensuite j'ai pas regardé attentivement toutes tes méthodes, mais la méthode pong m'interpelle. Tu teste dans analyseLine si la requete est "PING", si oui tu appele la méthode pong qui RE-teste si la requete est PING. Pourquoi le faire deux fois ? tu fait tous tes tests dans analyseLine et dans la méthode pong, tu ne fait que fwrite($this->connexion, 'PONG '.$line[1]);
Ma derniere remarque portera sur quelque chose de plus inutile mais à envisager si tu a le temps et la motivation. C'est au niveau conception POO. Tu définit un instance de Irc_Log, et dans cette instance, tu gère les informations concernant le bot (nom, mail, etc).
Normallement, tu devrait faire une classe IrcBot ou tu indique les informations concernant le bot, que tu passe à une classe Irc (par exemple, qui se chargera de la connection) et tu instancie IrcLog (avec les informations qu'il faut) que tu passera aussi à la classe Irc.
Tu sépare ainsi la gestion de la communication sur le serveur, de ton utilisateur (ici le bot) et d'un service d'enregistrement d'évenement (ici le log). Bon apres ca c'est l'extra bonus ! :)
Courage pour la suite ! :)