[Visual Basic] user uit lijst

Pagina: 1
Acties:

  • ddkiller0900
  • Registratie: Juli 2001
  • Laatst online: 13:18
het gaat nog steeds over mijn chat dus voor wie daar eens heeft op geantwoord. Ik heb nu het zo gemaakt dat als een client connect met de server dat het ip van de client in een lijstje verschijnt. Nu wou ik dat als de client van de chat afgaat dat het ip ook verdwijnt. Ik heb het zo gedaan:

Private sub server_close(index as integer)
Lnaam.RemoveItem server(intconnection).index
End sub

intconnection is dus de hoeveelste connection het is dat de server aanneemt aangezien er meerdere tegelijk op de chat kunnen inloggen. Maar met bovenstaande code lukt het niet om de persoon die de chat verlaat uit het lijstje te verwijderen.

maw.: Het ip adres in de lijst moet verdwijnen als die persoon van de chat afgaat.

Dan ben ik bijna klaar met mijn chat, alleen nog ff iets maken zodat ie bestanden kan verzenden en misschien, heel misschien nog iets met een webcam

  • johnwoo
  • Registratie: Oktober 1999
  • Laatst online: 16:17

johnwoo

3S-GTE

Een listbox biedt de mogelijkheid om voor ieder item een getalletje te bewaren, namelijk de ListData property. Als de verbinding gesloten wordt krijg je de index van het betreffende Socket object mee.
Een logische oplossing lijkt mij dan om de socket index aan de betreffende list entry te koppelen met de ListData property. Bij het sluiten van een socket ga je dan gewoon zoeken in de lijst naar een entry waarvan de ListData overeenkomt met de socket index. Natuurlijk moet je hem er dan bij het toevoegen van de naam ook wel inzetten.

Stukje code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Private Sub Server_Connect(Index As Integer)
  Lnaam.AddItem "blaat"
  Lnaam.ItemData(Lnaam.NewIndex) = Index
End Sub

Private Sub Server_Close(Index As Integer)
  Dim r As Integer

  For r = 0 To Lnaam.ListCount - 1
    If Lnaam.ItemData(r) = Index Then
    Lnaam.RemoveItem r
    Exit For
    End If
  Next r
End Sub

Waarschijnlijk zal je de naam nog niet weten bij het connecten, maar dat maakt niet uit. Als je de naam binnenkrijgt in het DataArrival event dan krijg je ook de socket index mee, dus dan voeg je hem gewoon op dat tijdstip toe.

4200Wp ZO + 840Wp ZW + 1680Wp NW | 14xIQ7+ + 1xDS3-L | MTVenusE | HWP1


  • ddkiller0900
  • Registratie: Juli 2001
  • Laatst online: 13:18
die code had ik ook al gedeeltelijk, maar ik zit hier gewoon met 1 vreemd probleem. Als ik die server heb draaien en er komen dus aantal clients op dan zie je ze dus toegevoegd op die lijst, en als ze eraf gaan dan verdwijnen ze ook uit die lijst maar als ze opnieuw willen inloggen dan komt hun ip ineens niet meer op de lijst :? Ditzelfde probleem heb ik met de teller. Je ziet als er een persoon op de chat komt dat de teller vermeerderd wordt met 1. Zodra ie eraf gaat verminderd die ook met 1 maar als diezelfde persoon opnieuw wil verbinden dan gaat de teller ineens verminder met 1 inplaats van 1 op te tellen :? Dit terwijl de code volledig klopt.

Private Sub Server_ConnectionRequest(index As Integer, ByVal requestID As Long)
intconnection = intconnection + 1
Load Server(intconnection)
Server(intconnection).Accept requestID
aantalverbonden = aantalverbonden + 1 'teller vermeerderd
lblConnected.Caption = aantalverbonden
Lnaam.AddItem Server(intconnection).RemoteHostIP
Lnaam.ItemData(Lnaam.NewIndex) = inhoud
End Sub

Private Sub Server_Close(index As Integer)
aantalverbonden = aantalverbonden - 1 'teller verminderd
lblConnected.Caption = aantalverbonden
'Lnaam.RemoveItem Server(intconnection).Name
Dim r As Integer
For r = 0 To Lnaam.ListCount - 1
If Lnaam.ItemData(r) = inhoud Then
Lnaam.RemoveItem r
Exit For
End If
Next r
End Sub

ksnap er niks van, die code zou toch moeten kloppen of niet :?

Verwijderd

Voordat ik straks een heel intelligent antwoord ga geven, waar haal je de variabele 'inhoud' vandaan?
Moet dat gewoon niet 'Index' zijn?

  • ddkiller0900
  • Registratie: Juli 2001
  • Laatst online: 13:18
als ik index gebruik dan gaat ie die index van mijn socket gebruiken slimmerik :)
en met die inhoud heeft ie dus een nieuwe variabele en werkt het dus wel >:)

  • ddkiller0900
  • Registratie: Juli 2001
  • Laatst online: 13:18
maar hoe maak ik dan zo'n teller dat als er een client verbonden is met server dat ie bijtelt en als ie weggaat dat de teller wordt verminderd met 1. Die code wat hierboven staat geschreven zou dan toch moetne kloppen of niet???

Verwijderd

als ik index gebruik dan gaat ie die index van mijn socket gebruiken slimmerik :)
Hmmm, dat wil je toch ook???
Misschien als je het voorbeeld van johnwoo overneemt en 'intConnecties' bij _Connect verhoogt?
en met die inhoud heeft ie dus een nieuwe variabele en werkt het dus wel >:)
Maar ik zie nergens dat je ook daadwerkelijk de variabele 'inhoud' een waarde geeft, vandaar mijn opmerking.

Verder zou je beter moeten gaan nadenken over de variabele 'intConnecties'. 'intConnecties' zegt namelijk niets over welke index van Server je moet gaan laden.
Situatie:
- User 1 connect
- User 2 connect
- User 1 disconnect
- User 3 connect <--- Error

De fout ontstaat omdat je 'intConnecties' op 2 staat, en dus ook Socket(2) wil gaan laden, maar je hebt diezelfde Socket(2) al bij User 2 geladen...
Om te weten welke welke Socket-indexen je allemaal nog mag laden, zou je een array kunnen bijhouden (Dim aSocks(200) As Boolean), of je kan misschien de array van je control 'Server' gebruiken.

En nu staat me baas achter me en houd ik er dus ff mee op :)

  • ddkiller0900
  • Registratie: Juli 2001
  • Laatst online: 13:18
lolz, ik zal eens alles nakijken. heb juist ff optische muis gekocht.

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 18:36

Crazy D

I think we should take a look.

Op woensdag 02 januari 2002 17:22 schreef ddkiller0900 het volgende:
lolz, ik zal eens alles nakijken. heb juist ff optische muis gekocht.
Dan werkt het natuurlijk meteen :7 :+

Exact expert nodig?

Pagina: 1