Bonjour à tous ! :o)
Bon, j'avoue que le titre n'est peut-être pas très clair, en fait, c'est une classe un peu les NetworkPacket en DirectPlay. Vous écrivez différentes chaines de caractères, elles sont mises en une seule, puis vous pouvez les récuperer indépendemment... C'est très utile pour le réseau car ça permet de passer une commande et des arguments à un ordinateur distant... (pour un peu plus d'explication sur la problèmatique qui m'a amené à faire ça vous pouvez faire un tit tour sur mon blog:
http://www.livejournal.com/users/lordthrend ca vous aidera peut-être à mieux comprendre de quoi il retourne ;))
L'utilisation est assez simple: WriteString permet d'ajouter une string et ReadString permet de lire la string suivante et ToString permet de récuperer LA string qui contient toutes les strings (c'est celle-là qu'il faut envoyer lorsque vous utilisez un socket ;)) et LoadFromEncoded permet de recréer à partir d'une string donnée par ToString.
Source / Exemple :
Public Class StringPacket
Const charseparator As Char = "&"
Dim strings(0) As String
Dim c As Integer = 0
Dim t As Integer = 0
Public Sub WriteString(ByVal str As String)
' Add(HttpUtility.UrlEncode(str))
Add(URLEncode(str))
End Sub
Public Overrides Function ToString() As String
Return String.Join(" ", strings)
End Function
Private Sub Add(ByVal str As String)
ReDim Preserve strings(t)
strings(t) = str
t = t + 1
'If UBound(strings) > 1 Then
' ReDim Preserve strings(UBound(strings) + 1)
'End If
'strings(UBound(strings)) = str
'MsgBox(UBound(strings))
'If UBound(strings) = 0 Then
' ReDim Preserve strings(UBound(strings) + 1)
'End If
End Sub
Public Sub LoadFromEncoded(ByVal str As String)
strings = str.Split(" ")
Dim astr As String
Dim i As Integer
For i = 0 To UBound(strings)
strings(i) = URLDecode(strings(i))
Next
End Sub
Public Function ReadString() As String
c = c + 1
Return strings(c - 1)
End Function
Public Function URLEncode(ByVal strData As String) As String
Dim I As Integer
Dim strTemp As String
Dim strChar As String
Dim strOut As String
Dim intAsc As Integer
strTemp = Trim(strData)
For I = 1 To Len(strTemp)
strChar = Mid(strTemp, I, 1)
intAsc = Asc(strChar)
If (intAsc >= 48 And intAsc <= 57) Or _
(intAsc >= 97 And intAsc <= 122) Or _
(intAsc >= 65 And intAsc <= 90) Then
strOut = strOut & strChar
Else
strOut = strOut & "%" & Hex(intAsc)
End If
Next I
Return strOut
End Function
Private Function URLDecode(ByVal enStr)
Dim deStr
Dim c, i, v
deStr = ""
For i = 1 To Len(enStr)
c = Mid(enStr, i, 1)
If c = "%" Then
v = "&h" + Mid(enStr, i + 1, 2)
If v < 128 Then
deStr = deStr & Chr(v)
i = i + 2
Else
If isvalidhex(Mid(enStr, i, 3)) Then
If isvalidhex(Mid(enStr, i + 3, 3)) Then
v = "&h" + Mid(enStr, i + 1, 2) + Mid(enStr, i + 4, 2)
deStr = deStr & Chr(v)
i = i + 5
Else
v = "&h" + Mid(enStr, i + 1, 2) + CStr(Hex(Asc(Mid(enStr, i + 3, 1))))
deStr = deStr & Chr(v)
i = i + 3
End If
Else
deStr = deStr & c
End If
End If
Else
If c = "+" Then
deStr = deStr & " "
Else
deStr = deStr & c
End If
End If
Next
URLDecode = deStr
End Function
Private Function isvalidhex(ByVal str As String)
isvalidhex = True
str = str.ToUpper
If Len(str) <> 3 Then isvalidhex = False : Exit Function
If Left(str, 1) <> "%" Then isvalidhex = False : Exit Function
c = Mid(str, 2, 1)
If Not (((c >= "0") And (c <= "9")) Or ((c >= "A") And (c <= "Z"))) Then isvalidhex = False : Exit Function
c = Mid(str, 3, 1)
If Not (((c >= "0") And (c <= "9")) Or ((c >= "A") And (c <= "Z"))) Then isvalidhex = False : Exit Function
End Function
End Class
Conclusion :
Les fonctions d'urlencode et decode ont été trouvées sur le net (mais je ne sais plus trop où), je sais le framework en propose mais je visais aussi le Compact Framework qui lui ne les supporte pas...
Voilà ! J'espère que cela vous aidera !
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.