Seite 1 von 2
Network Frage
Verfasst: 28.08.2005 10:41
von Defmaster
Also ich und jemand anders haben uns mal an die Network funktionen rangetraut.
Nun wollen wir damit erstmal ne kleine chatsoftware machen.
Bisher funktionierte es so.
1xHost, 1xClient
Konnten wunderbar miteinander schreiben.
So...
Nun soll es so sein
1xHost, 2xClient
Der Host soll nun einfach wenn Client 1 schreibt dies an Client 2 weiter leiten,
und wenn 2 schreibt soll er es an 1 weiterleiten.
Nur weiß ich da nicht wie ich das unterscheiden soll
War bisher so:
Code: Alles auswählen
text.s = GetGadgetText(#String_2)
PokeS(buffer,text)
If SendNetworkData(NetworkClientID() ,buffer,1000)
SetGadgetText(#String_1,GetGadgetText(#String_1)+text+Chr(13)+Chr(10))
EndIf
Aber networkclientid() würde ja dann gleich wieder an den sender zurück senden, und nicht zum andern, könnt ihr mir da ein wenig unter die arme greifen?
Verfasst: 28.08.2005 10:44
von Christi
Du kannst die ID's der verbundenen Clienten z.B. in einer Liste speichern.
Verfasst: 28.08.2005 11:33
von Batze
Siehe meine Website als Beispiel

Verfasst: 28.08.2005 12:48
von zigapeda
schick es doch einfach an beide. also wenn client1 was schreibt wird es nicht vom client selber in das gadget eingetragen sondern erst wenn es wieder zurück geschickt wird.
Verfasst: 28.08.2005 12:58
von Defmaster
Genauso hab ichs ja auch vor

Hier mal was ausgearbeitetes:
Code: Alles auswählen
If NetworkServerEvent() = 1
Benutzer(verbundener) = NetworkClientID() ; In Array eintragen
verbundener = verbundener + 1 ; Beim nächstenmal den nächsten Array eintrag
EndIf
If NetworkServerEvent() = 2
gelesen = ReceiveNetworkData(NetworkClientID(),buffer_empfang,1000)
geschriebener_text = PeekS(buffer_empfang,gelesen)
SetGadgetText(#String_1,GetGadgetText(#String_1)+geschriebener_text+Chr(13)+Chr(10))
; An alle schicken!
For i = 0 To (verbundener-1)
SendNetworkData(Benutzer(i) ,buffer_empfang,1000) ; Macht er nicht
Next
MessageRequester("Benutzer:","Benutzer 1:"+Str(Benutzer(0))+" Benutzer 2:"+Str(Benutzer(1)))
EndIf
Weiß nicht aber ich speichere doch die ID's.
Dann wird bei eingehenden daten zum host die empfangenen daten zu allen verbundenen clienten geschickt, funtzt aber leider net

Warscheinlich wieder nur nen schussel fehler irgendwo drin.
Verfasst: 28.08.2005 13:10
von zigapeda
mach hald einfach SendNetworkString()
das ist doch erstmal viel einfacher zu handhaben als SendNetworkData()
dann würde ich nicht ein Array nehmen sondern eine LinkedList. mit der kann man im bezug auf user in einem chat viel einfacher umgehen
Code: Alles auswählen
If NetworkServerEvent() = 1
AddElement(Benutzer())
Benutzer() = NetworkClientID() ; In LL eintragen
EndIf
If NetworkServerEvent() = 2
*buffer_empfang = AllocateMemory(1000)
gelesen = ReceiveNetworkData(NetworkClientID(),*buffer_empfang,1000)
geschriebener_text = PeekS(*buffer_empfang,gelesen)
SetGadgetText(#String_1,GetGadgetText(#String_1)+geschriebener_text+Chr(13)+Chr(10))
; An alle schicken!
ForEach Benutzer()
SendNetworkString(Benutzer(),geschriebener_text)
Next
;MessageRequester("Benutzer:","Benutzer 1:"+Str(Benutzer(0))+" Benutzer 2:"+Str(Benutzer(1)))
EndIf
das mit dem messagerequester müsste man jetzt anderst machen aber brauchst du das wirklich?
Verfasst: 28.08.2005 14:35
von Defmaster
Nein das mit dem requester war nur zum etsten.
Aber es klappt bei mir dennoch nicht

Mit deinem Code.
Er sendet es einfach nicht zu den clienten zurück *heulundverzweifel*
Verfasst: 28.08.2005 19:14
von zigapeda
benutzt du windowevent oder waitwindowevent?
Verfasst: 28.08.2005 20:15
von Defmaster
ich nutz WaitWindowEvent()
lasse dann per selct abfragen ob menü,knopf ... gedrückt wird
und bevor schleife wiederholt werden halt einkommende daten abgefragt.
(Der Code oben halt)
So habs nun mit windowevent() gemacht und jetze gehts danke dafür

Verfasst: 28.08.2005 21:08
von zigapeda
jetzt musst du aber noch ein delay einbauen:
sonst hat das programm eine CPU auslastung von 100%