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 :allright:

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:

Code: Alles auswählen

Delay(1)
sonst hat das programm eine CPU auslastung von 100%