Netzwerkcode in einem Thread laufen lassen

Anfängerfragen zum Programmieren mit PureBasic.
smateja
Beiträge: 250
Registriert: 25.11.2004 19:51
Computerausstattung: Alienware Aurora / Intel Core i7 CPU @ 2.8 GHz / 64 Bit OS

Netzwerkcode in einem Thread laufen lassen

Beitrag von smateja »

Hallo zusammen - ich quäle mich gerade ein wenig mit Threads herum und dachte mir - es müsste doch eigetnlich möglich sein - Netzwerkanfragen in nem Thread verarbeiten zu lassen - hab auch fleißig (2 mins - sorry) mal rumexperimentiert - nur häng ich mal wieder - evtl. kann mir wer hier unter die Arme greifen:

Code: Alles auswählen

OpenWindow(0001,1,1,800,600,"Server Engine",#PB_Window_ScreenCentered)
CreateGadgetList(WindowID(0001))
InitNetwork()
Procedure UpdateServer()
  OpenConsole()
  ConsoleTitle("Console Output")
  CreateNetworkServer(0002, 7070,#PB_Network_TCP)
  UpdateServerEvent = NetworkServerEvent()
  If UpdateServerEvent
    ClientID = EventClient()
    Select UpdateServerEvent
    Case 1
      PrintN("PureBasic - Server"+ "A new client has connected !")
    Case 2
      PrintN("PureBasic - Server"+ "Client "+Str(ClientID)+" has send a packet !")
      PrintN("Info"+ "String: "+PeekS(Buffer))
    Case 3
      PrintN("PureBasic - Server"+ "Client "+Str(ClientID)+" has send a file via the network !")
    Case 4
      PrintN("PureBasic - Server"+ "Client "+Str(ClientID)+" has closed the connexion...")
    EndSelect
  EndIf
  WindowEvent()
EndProcedure
CreateThread(@UpdateServer(),0)
Repeat
  WaitWindowEvent()
Until Exit=1
Problematik ist hier - dass er die Console nicht Updatet - jemand n lösungsvorschlag etc?
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

Schiele ich oder sehe ich im Thread keine schleife :? ? Die ist wichtig, da
der Thread sonst nach einem Durchlauf sofort toter Mann spielt.
Bild
smateja
Beiträge: 250
Registriert: 25.11.2004 19:51
Computerausstattung: Alienware Aurora / Intel Core i7 CPU @ 2.8 GHz / 64 Bit OS

RE:

Beitrag von smateja »

gut erkannt - allerdings nicht mal einmal macht er das - somit mal einfach die schleife vergessen oki ? - Naja der CLient sagt dann schon dass er den Server gefunden hat und sich verbinden kann - aber ich bekomme absolut 0,0 output an der console ? mhmm ?!
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Beitrag von bobobo »

wirf deinen Code mal weg unbd nimm den mitgelieferten NetworkServercode im Example Sources Verzeichnis

den ver"threadest" Du dann mal

und beachte mal die Repeat-Schleife im Server
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
smateja
Beiträge: 250
Registriert: 25.11.2004 19:51
Computerausstattung: Alienware Aurora / Intel Core i7 CPU @ 2.8 GHz / 64 Bit OS

RE:

Beitrag von smateja »

das ist doch der code aus dem mitgeliefertem beispiel nur anstelle mir n popup zu machen (was anbei auch net geht wenns im thread steht) soller ers mir dank print befehl in die console ausgeben ?! und ob da ne schleife drin ist oder net - spielt das so ne große rolle zum testen - mir persönlich reicht das ja wenns genau einaml durchlaufenwürde ?! - ich checks irgendwie noch net?!
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

Kann da bo³ nur zustimmen. Serveraufgaben und Paketempfang machen
aber dann in einem extra Thread Sinn, wenn Pakete nicht im selben Thread
verarbeitet werden. Merken!

Edit:
sollte schnell werden. Du brauchst die Schleife, um mehrmals die Ereignisse
abzufragen. Wenn das ganze nur einmal durchläuft, fragst du ja nur einmal
das Ereigniss ab. Dann ist schluss. Wenn der Client danach erst connected,
schaust du ja im Postfach nicht mehr nach, ob da was neues drine ist.

Postfach - Ereignissschleife
Ereigniss - Events
Bild
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Beitrag von bobobo »

der networkserver von PB als Konsole und gethreadet und mit wenig resourcenVerbrauch dank ThreadPriority() und Delay()

Code: Alles auswählen

Global ClientID.l

Procedure server()
Port = 6832
Buffer = AllocateMemory(1000)
If CreateNetworkServer(0, Port)
  PrintN("PureBasic - Server "+ "Server created (Port "+Str(Port)+").")

  Repeat
    SEvent = NetworkServerEvent()
    If SEvent
      ClientID = EventClient()
      Select SEvent
      Case 1
        PrintN("PureBasic - Server "+ "A new client has connected !")
      Case 2
        PrintN("PureBasic - Server "+ "Client "+Str(ClientID)+" has send a packet !")
        ReceiveNetworkData(ClientID, Buffer, 1000)
        PrintN("Info" +"String: "+PeekS(Buffer))
      Case 3
        PrintN("PureBasic - Server "+ "Client "+Str(ClientID)+" has send a file via the network !")
        ReceiveNetworkFile(ClientID, "C:\TEST_Network.ftp3")
      Case 4
        PrintN("PureBasic - Server "+ "Client "+Str(ClientID)+" has closed the connexion...")
        Quit = 1
      EndSelect
    EndIf
    Delay(5) ; Systemresourccen runter
  Until Quit = 1
  PrintN("PureBasic - Server "+ "closeWindow to quit the server.")
  CloseNetworkServer(0)
Else
  PrintN("Error "+ "Can't create the server (port in use ?).")
EndIf
EndProcedure

OpenConsole()
If InitNetwork() = 0
  MessageRequester("Error", "Can't initialize the network !", 0)
  End
EndIf
tid=CreateThread(@server(),0)
PrintN("Prio von "+Str( ThreadPriority(tid,1))+" auf 1") ; Systemresourccen runter
Input()
CloseConsole()
End
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
smateja
Beiträge: 250
Registriert: 25.11.2004 19:51
Computerausstattung: Alienware Aurora / Intel Core i7 CPU @ 2.8 GHz / 64 Bit OS

re:

Beitrag von smateja »

okay - klingt eigentlich nur logisch - gleich mal checken *G

Nachtrag: Baut man die Schleife ein - schon rocked das Teil *G lol
Meric an alle die sich da haben rumquälen müssen mit mir :)
Zuletzt geändert von smateja am 28.06.2006 13:46, insgesamt 1-mal geändert.
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Beitrag von bobobo »

nimm das da oben
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Antworten