Application client-serveur et événements
Publié : mer. 10/oct./2018 14:45
Bonjour/bonsoir,
Client et utilisateur de PureBasic depuis de nombreuses années, je me trouve face à une situation bloquante en programmation client serveur. Et ce à cause de la gestion du réseau par événements dans purebasic.
Je vous présente mon objectif :
avoir une application serveur qui écoute uniquement sur le port 2018 (par exemple)
avoir une application client A qui transmet à intervalles réguliers des données d'une taille L sur le port 2018
avoir une application client B qui transmet à intervalles réguliers des données d'une taille ~L sur le port 2018
A reçoit ce que B envoie grâce à l'application serveur
B reçoit ce que A envoie grâce à l'application serveur
avoir une application cliente C qui reçoit la moyenne des valeurs envoyées par A et B grâce à l'application serveur. Si B n'envoie rien alors C recevra uniquement ce que A envoie. Si A n'envoie rien alors C recevra uniquement ce que B envoie.
Par exemple
A envoie 1020304050
B envoie 60708090A0
C recevra 3848586878 (ou calculera par lui même ces valeurs)
Tout mon problème réside dans la réalisation, coté serveur, de la moyenne. En effet lorsque je lis les événements réseaux, coté serveur, du client A je n'ai la possibilité que plus loin dans mon code de voir s'il y a des données envoyées au serveur par le client B. Du coup je suis bien embêté. La documentation informe qu'il faut appeler ReceiveNetworkData() uniquement après avoir reçu un événement #PB_NetworkEvent_Data. Cette manière de structurer le code par événement m’empêche de réaliser mon objectif.
Dois-je plutot tenter de faire en sorte que la moyenne soit calculée par l'application cliente C?
En y pensant je me dis que placer un header dans le paquet contenant un identifiant attribué par le serveur permettrait de savoir quel client envoie quoi. Mais lorsque A et B enverront des données comment C fera-t-il apres avoir reçu un paquet de A pour savoir qu'il y a un autre paquet en attente de la part de B? Je n'ai jamais eu de mal avec une application réseau mais dans ce cas, devoir structurer avec des evenements me pose de gros soucis. C'est pourquoi je fais appel à votre aide. Je n'attends pas particulièrement un code en réponse, mais plus une idée, une manière de faire....mais pourquoi pas du code si c'est plus simple de répondre ainsi pour vous. Je vous remercie et vous souhaite une bonne journée.
Client et utilisateur de PureBasic depuis de nombreuses années, je me trouve face à une situation bloquante en programmation client serveur. Et ce à cause de la gestion du réseau par événements dans purebasic.
Je vous présente mon objectif :
avoir une application serveur qui écoute uniquement sur le port 2018 (par exemple)
avoir une application client A qui transmet à intervalles réguliers des données d'une taille L sur le port 2018
avoir une application client B qui transmet à intervalles réguliers des données d'une taille ~L sur le port 2018
A reçoit ce que B envoie grâce à l'application serveur
B reçoit ce que A envoie grâce à l'application serveur
avoir une application cliente C qui reçoit la moyenne des valeurs envoyées par A et B grâce à l'application serveur. Si B n'envoie rien alors C recevra uniquement ce que A envoie. Si A n'envoie rien alors C recevra uniquement ce que B envoie.
Par exemple
A envoie 1020304050
B envoie 60708090A0
C recevra 3848586878 (ou calculera par lui même ces valeurs)
Tout mon problème réside dans la réalisation, coté serveur, de la moyenne. En effet lorsque je lis les événements réseaux, coté serveur, du client A je n'ai la possibilité que plus loin dans mon code de voir s'il y a des données envoyées au serveur par le client B. Du coup je suis bien embêté. La documentation informe qu'il faut appeler ReceiveNetworkData() uniquement après avoir reçu un événement #PB_NetworkEvent_Data. Cette manière de structurer le code par événement m’empêche de réaliser mon objectif.
Dois-je plutot tenter de faire en sorte que la moyenne soit calculée par l'application cliente C?
En y pensant je me dis que placer un header dans le paquet contenant un identifiant attribué par le serveur permettrait de savoir quel client envoie quoi. Mais lorsque A et B enverront des données comment C fera-t-il apres avoir reçu un paquet de A pour savoir qu'il y a un autre paquet en attente de la part de B? Je n'ai jamais eu de mal avec une application réseau mais dans ce cas, devoir structurer avec des evenements me pose de gros soucis. C'est pourquoi je fais appel à votre aide. Je n'attends pas particulièrement un code en réponse, mais plus une idée, une manière de faire....mais pourquoi pas du code si c'est plus simple de répondre ainsi pour vous. Je vous remercie et vous souhaite une bonne journée.