J'ai pas beaucoup avancé ce week end,
mais j'ai quand même une question:
Edit: avant lecture du code: ce qu'il faut remarquer, c'est que je déclenche les évènements dans "compteNetwork"
dans des sub que j'appelle dans des threads différents parce que ce sont elles qui écoutent le serveur et le client
Ce qui fait que les sub sont aussi exécutées dans les threads, et du coup je suis obligé d'utiliser des delegate (Me.Invoke)
D'un côté j'ai ma classe 'CompteNetwork'
avec:
Private Sub _listeningThreadClient()
Dim buffer() As Byte
Dim receiverbuffer() As Byte
Dim bufferSize As Integer
While (True)
ReDim receiverbuffer(1000)
bufferSize = socketClient.Receive(receiverbuffer)
'Là je sais que je dois fermer la connexion si bufferSize==0
'Mais j'ai pas encore fait la méthode qui ferme la connexion
ReDim buffer(bufferSize)
Array.Copy(receiverbuffer, 0, buffer, 0, bufferSize)
RaiseEvent packetServerReceived(buffer)
End While
End Sub
Private Sub _listeningThreadServer()
Dim buffer() As Byte
Dim receiverbuffer() As Byte
Dim bufferSize As Integer
While (True)
ReDim receiverbuffer(1000)
bufferSize = socketServeur.Receive(receiverbuffer)
'idem ici
ReDim buffer(bufferSize)
Array.Copy(receiverbuffer, 0, buffer, 0, bufferSize)
RaiseEvent packetClientReceived(buffer
End While
End Sub
Public Event packetClientReceived(b() As Byte)
Public Event packetServerReceived(b() As Byte)
Et d'un autre côté j'ai ma form
Public Class Compte
Private WithEvents myAccount As CompteNetwork
Public Delegate Sub atPacketClientReceived(b() As Byte)
Public Delegate Sub atPacketServeurReceived(b() As Byte)
Sub New(ByVal s As Socket)
' Cet appel est requis par le concepteur.
InitializeComponent()
' Ajoutez une initialisation quelconque après l'appel InitializeComponent().
myAccount = New CompteNetwork(s)
myAccount.Start()
End Sub
Private Sub packetReceivedFromClient(b() As Byte) Handles myAccount.packetClientReceived
Me.Invoke(New atPacketClientReceived(AddressOf doAtPacketClientReceived), b)
End Sub
Private Sub packetReceivedFromServer(b() As Byte) Handles myAccount.packetServerReceived
Me.Invoke(New atPacketServeurReceived(AddressOf doAtPacketServeurReceived), b)
End Sub
Public Sub doAtPacketClientReceived(b() As Byte)
myAccount.sendToServer(b)
End Sub
Public Sub doAtPacketServeurReceived(b() As Byte)
myAccount.sendToClient(b)
End Sub
End Class
ça fonctionne, mais les Delegate là, c'est pas propre,
j'aimerais pouvoir utiliser les fonctions qui écoutent les évènements de la classe sans avoir à passer par une autre fonction,
et je sais pas du tout comment faire ^^
(en gros là les fonctions qui écoutent les évènements, elles sont appelées dans les threads qui écoutent serveur et client, du coup ya des erreurs)