[vb] List refresh na verbreken winsock verbinding

Pagina: 1
Acties:

  • Vulpecula
  • Registratie: April 2001
  • Laatst online: 18-08 21:00
Via een winsock verbinding is het mogelijk om op de server alle ip adressen te zien die verbonden zijn. Maar wanneer nu iemand de verbinding verbreekt met de server wil ik dat die uit de lijst wordt verwijderd. Ik dacht dan wanneer het form wordt ge-unload dat dan een string wordt overgestuurd om zo aan te geven dat de verbinding wordt verbroken.

In de client heb ik het volgende gedaan.

Visual Basic:
1
2
3
Private Sub Form_Unload(Cancel As Integer)
    wsMain.SendData "q" & Chr(1) & wsMain.LocalIP
End Sub


Op de server doe ik dan het volgende

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
Private Sub wsArray_DataArrival(Index As Integer, ByVal bytesTotal As Long)
    Dim Data As String, CtrlChar As String, X As Integer
    wsArray(Index).GetData Data
    
    CtrlChar = Left(Data, 1)
    
    Data = Mid(Data, 3)
    
    Select Case LCase(CtrlChar)
        Case "q"
            X = RetrieveUser(Data)
            lstConnectedIp.RemoveItem X
....
   end select
end sub

Private Function RetrieveUser(IpAddress As String) As Integer
    Dim X As Integer

    'Check to see if nothing was selected
    If IpAddress = "" Then
        
        'OK, nothing selected, let's see how full
        ' the list is!
        If lstConnectedIp.ListCount = 0 Then
            
            'Nothing in the list, so return -1
            RetrieveUser = -1
            Exit Function
        End If
        
        'If there is something in the list, send it to
        ' the first one =)
        IpAddress = lstConnectedIp.List(0)
    End If
    
    ' Count through the users
    For X = 0 To 100
        
        'Check username to see if it is the right one
        If Users(X) = IpAddress Then
        
            'Ok, this is our man, so let's return his
            ' winsock index
            RetrieveUser = X
            Exit Function
        End If
    Next X
    RetrieveUser = -1
End Function


Maar helaas wordt ie dan niet uit de listbox verwijderd. Kan iemand me svp helpen zodat ie wel uit de lijst wordt verwijderd?

  • Sponge
  • Registratie: Januari 2002
  • Laatst online: 15-08 11:47

Sponge

Serious Game Developer

Kan je niet gewoon de list gebruiken van de listbox, als er Ip's in de listbox staan?

Ongeveer:
code:
1
2
3
4
5
6
7
Dim I as Long

For I = Listbox.Listcount to 0 step -1
 If listbox.list(i) = strIpAddress then
   Listbox.removeitem I
 End if
Next I


Werkt dat niet gewoon? :)

  • Vulpecula
  • Registratie: April 2001
  • Laatst online: 18-08 21:00
41.6C.6D.61.72 schreef op 17 maart 2003 @ 22:29:
Kan je niet gewoon de list gebruiken van de listbox, als er Ip's in de listbox staan?

Ongeveer:
code:
1
2
3
4
5
6
7
Dim I as Long

For I = Listbox.Listcount to 0 step -1
 If listbox.list(i) = strIpAddress then
   Listbox.removeitem I
 End if
Next I


Werkt dat niet gewoon? :)
Ik heb het geprobeerd, maar helaas, het werkt niet. Ik heb in de case gezet bij "q".

  • Sponge
  • Registratie: Januari 2002
  • Laatst online: 15-08 11:47

Sponge

Serious Game Developer

Je weet trouwens zeker dat die string aankomt? :)

  • Vulpecula
  • Registratie: April 2001
  • Laatst online: 18-08 21:00
41.6C.6D.61.72 schreef op 17 maart 2003 @ 22:45:
Je weet trouwens zeker dat die string aankomt? :)
Ik zet er een breakpoint maar daar komt ie niet als ik de client form afsluit.

[ Voor 3% gewijzigd door Vulpecula op 17-03-2003 22:52 ]


  • Sponge
  • Registratie: Januari 2002
  • Laatst online: 15-08 11:47

Sponge

Serious Game Developer

Hmm, probeer dit dan eens:

code:
1
2
3
Private Sub Form_Unload(Cancel As Integer)
    wsMain.SendData "q" & Chr(1) & wsMain.LocalIP & vbcrlf
End Sub


Overigens zal je ook een andere methode moeten bedenken, als bijv de user een reset doet..komt er mooi niet een quit message aan! :)

btw: Ik ben nu weg, kan dus ff niet meer helpen (Me heeft ook :z nodig ;))

[ Voor 16% gewijzigd door Sponge op 17-03-2003 22:55 ]


  • Vulpecula
  • Registratie: April 2001
  • Laatst online: 18-08 21:00
41.6C.6D.61.72 schreef op 17 March 2003 @ 22:52:
Hmm, probeer dit dan eens:

code:
1
2
3
Private Sub Form_Unload(Cancel As Integer)
    wsMain.SendData "q" & Chr(1) & wsMain.LocalIP & vbcrlf
End Sub


Overigens zal je ook een andere methode moeten bedenken, als bijv de user een reset doet..komt er mooi niet een quit message aan! :)

btw: Ik ben nu weg, kan dus ff niet meer helpen (Me heeft ook :z nodig ;))
Hoe zou je het dan doen?

Verwijderd

Uit de losse pols:

Visual Basic:
1
2
3
4
5
6
7
8
Private Sub wsArray_Close(Index As Integer)
    Dim X As Integer

    X = RetrieveUser(wsArray(index).RemoteIP)
    lstConnectedIp.RemoveItem X

    wsArray(Index).Close
end sub


Implementatie van het q commando is dan overbodig

[ Voor 11% gewijzigd door Verwijderd op 17-03-2003 23:47 ]

Pagina: 1