Ik heb eerder een topic geopend hierover maar die werd gesloten, nu gaat het niet om de box zelf maar om fouten die ik krijg er in waarvan ik bij sommige niet weet hoe ik het op zou moeten lossen... 1 voorbeeld :
Als mensen iets typen in de box, en op enter drukken zou het dus naar de server gestuurd moeten worden en de server stuurd het door naar alle clients. Dit werkt opzich goed maar nu is er een probleempje als er van 2 clients, op precies het zelfde moment tekst binnen komt. Getest door 2 clients te starten en met beide, ook met 2 mensen dus, zo snel mogelijk op het toetsenboord rammen en op enter rammen. Dit komt natuurlijk niet vaak voor, maar als er 50man in die chatbox zitten heb je dus een veel grotere kans dat er tekst precies op het zelfde moment binnenkomt.
Ok.. hier een stukje uit de client, die tekst verstuurd naar de server :
Hier geld TEXTNORM% als parameter die voor de tekst word gezet en verstuurd word zodat de server weet dat het "normale" tekst is die naar alle clients moet, daarnaast hebben we ook nog TEXTPRIV% (prive) en TEXTACTI% (net zoals bij IRC "/me")
Die parameters die ervoor worden gezet, worden in de client(als die dit binnenkrijgt van de server waar het eerst heen word gestuurd) uit elkaar getrokken om de text goed in beeld te krijgen.
Hier een stukje daarvan :
Dit staat dus in de client onder Winsock/DataArrival.
Zodra hij AddChat roept, word er gekeken naar eventuele smileys, de tabs worden goed gezet en als het prive is, worden de juiste instellingen daarvoor geladen, niet relevant dus voor mijn vraagstuk.
Hier volgt een stuk source van de server, m.b.t. TEXT (maakt niet uit wat... prive, action of normaal)
De documentatie lijkt me genoeg te zeggen.
Het probleem is dus.. als ik met 2 clients TE snel tekst stuur dat je de parameters ervoor gaat krijgen, dus gewoon zichtbaar in de chatbox, wat niet de bedoeling is..
TEXTNORM% komt er dan bijvoorbeeld in de chatbox te staan, maar de gebruiker moet dat uiteraard niet zien. Ik heb al zitten kloten met die timer op de client, maar het probleem blijft bestaan omdat er 3 verschillende mensen ook iets tegelijk kunnen sturen en op de server de fout zich dus voordoet.
Iemand een probleem hoe ik dit kan vertragen, zodat het wel goed op het beeld kom?
Als jullie meer info nodig hebben van andere subs, hoor ik het wel.
iig dank voor het lezen van me verhaal en voor eventuele reacties.
Als mensen iets typen in de box, en op enter drukken zou het dus naar de server gestuurd moeten worden en de server stuurd het door naar alle clients. Dit werkt opzich goed maar nu is er een probleempje als er van 2 clients, op precies het zelfde moment tekst binnen komt. Getest door 2 clients te starten en met beide, ook met 2 mensen dus, zo snel mogelijk op het toetsenboord rammen en op enter rammen. Dit komt natuurlijk niet vaak voor, maar als er 50man in die chatbox zitten heb je dus een veel grotere kans dat er tekst precies op het zelfde moment binnenkomt.
Ok.. hier een stukje uit de client, die tekst verstuurd naar de server :
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
| Private Sub txtType_KeyPress(KeyAscii As Integer) If Len(txtType.Text) < 1 Then Exit Sub 'Routine als iemand op enterdrukt, dus text wil sturen If KeyAscii = 13 And TextTime = 5 Then 'Als er op enter gedrukt word If Stil = True Then MsgBox "Je mag niet praten, alleen prive!", 64, "Silent": Exit Sub KeyAscii = 0 'dit moet anders krijg je zo een windowsgeluidje, PLING If Ws1.State = 7 Then 'Dus geconnect If chkPrive.Value = 1 Then Ws1.SendData "[PRIVTEXT%]" & txtName.Text & vbNullChar & txtPrive.Text & vbNullChar & txtType.Text Else If Mid$(txtType.Text, 1, 3) = LCase("/me") Then 'als het [ME=75923]is, dan action[/ME] txtType.Text = Mid$(txtType.Text, 4, Len(txtType.Text)) 'Action of gewone text? Ws1.SendData "[TEXTACTI%]" & "*" & txtName.Text & vbNullChar & " " & txtType.Text & vbCrLf Else Ws1.SendData "[TEXTNORM%]" & "<" & txtName.Text & ">" & vbNullChar & txtType.Text & vbCrLf End If End If End If txtType.Text = "" TextTime = 0 'die timer word gebruikt om te zorgen dat ze niet snel kunnen TText.Enabled = True 'flooden wat errors veroorzaakt en verkeerde text in beeld brengt End If End Sub |
Hier geld TEXTNORM% als parameter die voor de tekst word gezet en verstuurd word zodat de server weet dat het "normale" tekst is die naar alle clients moet, daarnaast hebben we ook nog TEXTPRIV% (prive) en TEXTACTI% (net zoals bij IRC "/me")
Die parameters die ervoor worden gezet, worden in de client(als die dit binnenkrijgt van de server waar het eerst heen word gestuurd) uit elkaar getrokken om de text goed in beeld te krijgen.
Hier een stukje daarvan :
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| ElseIf Mid$(inData, 1, 11) = "[TEXTNORM%]" Then inData = Mid$(inData, 12, Len(inData)) X = InStr(1, inData, vbNullChar) 'kijk op welke positie vbnull zit NaamText = Mid$(inData, 1, X) 'pak nickname eraf inData = Mid$(inData, X + 1, Len(inData)) 'pak text txtChat.SelColor = 8388608 'zet kleur voor naam txtChat.SelText = NaamText 'plaats naam in box txtChat.SelColor = vbBlack 'Voor zwarte text Call AddChat(inData, NaamText) 'roep addchat ElseIf Mid$(inData, 1, 11) = "[TEXTPRIV%]" Then 'Privetext inData = Mid$(inData, 12, Len(inData)) txtChat.SelColor = 8388736 AddChat inData, "" 'geen naam, daarom lege quotes Prive = True End If |
Dit staat dus in de client onder Winsock/DataArrival.
Zodra hij AddChat roept, word er gekeken naar eventuele smileys, de tabs worden goed gezet en als het prive is, worden de juiste instellingen daarvoor geladen, niet relevant dus voor mijn vraagstuk.
Hier volgt een stuk source van de server, m.b.t. TEXT (maakt niet uit wat... prive, action of normaal)
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
| If Mid$(InData, 1, 5) = "[TEXT" Then 'als eerste karakters [TEXT zijn 'txtChat.SelText = Mid$(InData, 12, Len(InData)) 'voeg in eigen box toe For x = 0 To wsConn().UBound 'ga allen winsocks af en zend de sjit If wsConn(x).State = 7 Then wsConn(x).SendData InData: DoEvents End If Next x End If If Mid$(InData, 1, 11) = "[PRIVTEXT%]" Then 'prive praten InData = Mid$(InData, 12, Len(InData)) 'haal het voorstuk weg x = InStr(1, InData, vbNullChar) 'zoek naar vbnullchar DOOR = Mid$(InData, 1, x - 1) 'bepaal welke user stuurde 'haal de eerste user + de vbnullchar van indata af : InData = Mid$(InData, x + 1, Len(InData)) x = InStr(1, InData, vbNullChar) 'zoek wederom vbnullchar USR = Mid$(InData, 1, x - 1) 'bepaal naar wie ,-1 om vbnullchar weg te halen InData = Mid$(InData, x + 1, Len(InData)) PraatPrive DOOR, USR, InData 'stuur de info naar de sub PraatPrive End If |
De documentatie lijkt me genoeg te zeggen.
Het probleem is dus.. als ik met 2 clients TE snel tekst stuur dat je de parameters ervoor gaat krijgen, dus gewoon zichtbaar in de chatbox, wat niet de bedoeling is..
TEXTNORM% komt er dan bijvoorbeeld in de chatbox te staan, maar de gebruiker moet dat uiteraard niet zien. Ik heb al zitten kloten met die timer op de client, maar het probleem blijft bestaan omdat er 3 verschillende mensen ook iets tegelijk kunnen sturen en op de server de fout zich dus voordoet.
Iemand een probleem hoe ik dit kan vertragen, zodat het wel goed op het beeld kom?
Als jullie meer info nodig hebben van andere subs, hoor ik het wel.
iig dank voor het lezen van me verhaal en voor eventuele reacties.
[ Voor 6% gewijzigd door Verwijderd op 03-03-2003 12:37 . Reden: Code-tags verkeerd ]