Composant, socket et question de logique
Salut,
je suis en train d'écrire un composant qui implémente un protocole basé sur TCP.
Comme j'ai des sockets à gerer, j'utilise le composant Indy TidTCPClient.
jusque la ... tout va bien .
Ma premiere question est la suivante :
- L'instance de TidTCPClient doit-elle être autonome ?
Actuellement, j'ai encapsulé une TidTCPClient dans mon composant en tant qu'attribut privé. Ca marche, mais je ne suis pas sûr que cela soit la façon la plus "propre" de faire. J'ai pensé à deux autres possibilités :
:arrow: soit encapsuler aussi le TidTCPClient dans mon composant mais en le liant à une propriété (published),
:arrow: soit ne mettre qu'une propriété qui soit une référence pointant vers un objet TidTCPClient autonome (le développeur devrait poser un TidTCPClient sur la form de son application, et lier l'instance de mon composant au TidTCPClient par le biais de la propriété).
Bref, en tout ça me fait trois possibilités et je ne sais pas laquelle est la meilleure.
Voici ma deuxième question :
Mon composant (qui est un client), devra une fois qu'il sera connecté au serveur lire les informations que ce dernier envoie dans la socket.
Le problème, c'est que je ne sais pas QUAND le serveur va envoyer des données ni en quelle quantité.
De plus, je n'ai pas trouvé d'évenement du TidTCPClient qui me permette d'associer un traitement qui s'active uniquement quand des données arrivent (si de tels évenement éxistent, je ne sais pas comment m'en servir et j'aimerais bien savoir).
Pour l'instant, la seule solution que j'ai trouvé c'est de lire une quantité déterminée d'octets, mais cette solution ne me convient pas car en attendant qu'une quantité suffisante de données soient envoyées par le serveur, mon TidTCPClient bloque des ressources et en plus, cela créé des problèmes à la destruction de l'objet :(
voici donc ma question :
- Quelle est la bonne manière de procéder pour lire les données emises par le serveur avec un TidTCPClient ?
Voila ca fait déja pas mal de questions, merci à ceux qui ont eu le courage de me lire jusqu'au bout.
Je sais pas si j'ai été bien clair, mais si vous voulez que je donne plus de détails et/ou des sources y'a pas de problème mais ca sera seulement apres 19h (tout est chez moi et je suis au boulot).
Merci d'avance :D