Indy savoir le nombre de readln a faire ...

Résolu
cs_cyber37 Messages postés 110 Date d'inscription mardi 25 octobre 2005 Statut Membre Dernière intervention 19 novembre 2010 - 26 avril 2008 à 09:36
cs_cyber37 Messages postés 110 Date d'inscription mardi 25 octobre 2005 Statut Membre Dernière intervention 19 novembre 2010 - 27 avril 2008 à 12:41
Salut a tous,
Je suis en train de refaire un programme en se moment mais je suis un peut embetter, je doit utiliser un socket BLOQUANT (obliger), j'ai donc utiliser indy, en faite sa me permetras de gerer un serveur de jeux a distance, la pluspar des commandes sonts faites car ces commandes une fois envoiller (donc writeln) necessitent 1 seul readln ... maintenant j'ai d'autres commandes un peut plus embettantes auxquelles je ne peut pas savoir combient de ligne le serveur renveras donc combient de readln je devrais faire ... meme apres avoir poser le composants de la palette indy pour pas bloquer les aplications je suis embetter puisque quand on stope le programme sa provoque 5 erreurs ...
Car si je fait 1 readln en trop sa rame bien plus !

Donc je voulais savoir si il y a une commande pour savoir le nombre de ligne que le serveur a envoiller avant de faire un readln (si yen a trois par exemple, ma procedure feras 3 readln ...) j'ai deja essailler de faire avec le reglages "connexion time out" de indy client TCP mais sa provoque un message "connexion time out"  mais au moin sa amrche mais voila ya un message ...

Donc voila,
Cordialement cyber37
@+
Et merci.

3 réponses

OcHre Messages postés 44 Date d'inscription mercredi 23 mars 2005 Statut Membre Dernière intervention 26 avril 2008
26 avril 2008 à 11:56
Salut,

si tu veux éviter l'apparition de messages d'erreur pense à utiliser les bloques


try

...

except

...

finally


qui te permettront de réagir (ou pas) suivant les erreurs générées.
Sinon une solution envisageable est tout simplement d'envoyer le nombre
de lignes à lire avant de les envoyer. Enfin juste une remarque, les
composants indy étants bloquants font toujours plus ou moins ramer
l'application cliente donc si tu veux les implémenter pour un jeu tu
as, à mon avis, tout interet à le faire dans un thread.

Rions un peu en attendant la mort.
3
cs_cyber37 Messages postés 110 Date d'inscription mardi 25 octobre 2005 Statut Membre Dernière intervention 19 novembre 2010
26 avril 2008 à 13:25
En faite le serveur de jeux existe deja !  Et le jeu aussi dailleur c'est BF 2142 et oui en effet sa rame au debut quand toute mes procedures demandent les reponses genre une qui demande a combien est regler le feu amis, une autre demande a combien est regler le ... mais apres sa vas.

Merci de ta reponse, pour l'instant je vais la garder mais j'atted voir s'il y a d'autre reponses car toi ta reponse me vas mais sa vas juste "cacher le message d'erreur" par exemple. Pour l'instant j'attend voir s'il y a d'autres reponses et s'il n'y en a pas je ferais a ta fason.  En gros je ferais le systeme avec le readtimeout et avec ton code sa n'afficheras pas le message "connexion time out" .. .
Si non merci de ta reponse, PS j'ai trouver sa sur le net :

   1. while not FTerminated do
   2.       begin
   3.          tmp := FTCP.ReadLn('', 5);
   4.          application.processmessages;
   5.          if tmp <> '' then
   6.             begin
   7.                do_dbg (tmp);
   8.                // mettre ici votre code
   9.             end;
  10.
  11.       end;

mais a parement sa c'est pas pour indy, en faite se bout de code il est bien le seul probleme c'est de savoir si il y a la fonction "Terminated" avec le client TCP indy :-)
Je vasi essailler de voir d'ailleur, ou alors s'il y a un equivalent
0
cs_cyber37 Messages postés 110 Date d'inscription mardi 25 octobre 2005 Statut Membre Dernière intervention 19 novembre 2010
27 avril 2008 à 12:41
Merci beaucoup, topic clos :-),
En effet je n'avais jamais utiliser les theards, mais en revanche "try except et finally" oui.

Au revoir et merci beaucoup.
0
Rejoignez-nous