Psykobot : fonction d'attente pour winsock

Soyez le premier à donner votre avis sur cette source.

Snippet vu 3 849 fois - Téléchargée 30 fois

Contenu du snippet

Tous les programmeurs en Visual Basic 6 ont rencontrés le problème de l'envoit de plusieurs messages avec winsock qui les concatène avant l'émission, et le problème d'attente de la connexion avant l'envoit des premières données, avoir j'ai fait une fonction d'attente.
Veuillez lire le texte apres le code source, c'est important pour que le code fonctionne !
PS : Code à placer dans un module

Source / Exemple :


Const Connected = 1
Const SendComplete = 2

Public Bot As Winsock
Public DataSended As Boolean, Abord As Boolean, lpConnected As Boolean

Sub Wait(ByVal Condition As Long)
    'Conditions :
        '1 : Connected
        '2 : SendComplete
    If Condition = Connected Then
        While lpConnected = False
            DoEvents
        Wend
    ElseIf Condition = SendComplete Then
        While DataSended <> True And Abord = False
            DoEvents
        Wend
    Else
        If Condition = Connected Then Exit Sub
        If Condition = SendComplete Then Exit Sub
    End If
    DataSended = False
    Abord = False
    If Bot.State <> 7 Then Wait Connected
End Sub

Conclusion :


Vous avez surement remarqué le Abord, le DataSended et le lpConnected. Abord, c'est en fait une variable pour éviter une boucle infinie. Si le temps passé dans la boucle est trop lent, un simple Abord = True arrète la boucle. DataSended est une variable qui vérifit que les données ont été envoyées, et lpConnected vérifit si la connexion est vraiment établie lors de la réception du premier message, dans la procédure Private Sub Sock_DataArrival(ByVal bytesTotal As Long). Pour cela, il faut ajouter dans la procédure SendComplete() de votre winsock cette ligne :
DataSended = True
et dans Private Sub Sock_DataArrival(ByVal bytesTotal As Long) :
lpConnected = True

A voir également

Ajouter un commentaire

Commentaires

Messages postés
123
Date d'inscription
lundi 30 juin 2003
Statut
Membre
Dernière intervention
5 juin 2007

Pas bête du tout, je trouve ça bien pratique.
je mettrais un 10/10 !
Jack : ta technique est bien sauf que ton datagrame ne doit pas être long, sinon les boucles dans les boucles c'est pas terrible.
Merci et bonne continuation psyckocrash.
Messages postés
240
Date d'inscription
vendredi 14 juin 2002
Statut
Membre
Dernière intervention
17 mars 2009

Oui mais je ne peut pas changer le protocole IRC ;o) donc je me pli à la regle et le travail en conséquance
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
70
Salut PsyKrash
Oui, c'est une solution propre et logique, mais qui peut faire perdre du temps en cas de quantité importante.
L'autre consiste a ajouter un caractère spécial à la fin de chaque message envoyé, comme un Chr(0) et de séparer les chaines à la réception grace à ce caractère.
Personnellement, j'utilise cette dernière technique :
-1- Début de message : mot clé (style Message, Système, Infos) qui permettent de trier à la réception le style d'infos qui arrivent. Le serveur à qqfois besoin d'infos (comme le pseudo ou le nom de la machine)
-2- Caractère de séparation : Chr(1)
-3- Contenu de l'envoi (texte du message, nom du pseudo ou de la machine selon le mot clé)
-4- Caractère de séparation : Chr(1) s'il y a plusieurs infos à transmettre
-5- Suite des infos ... (-4- et -5- en boucle si tableau d'infos)
-6- Caractère de fin de message : Chr(0)

Vala

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.