Program bleibt hängen (Server)

Anfängerfragen zum Programmieren mit PureBasic.
cofter
Beiträge: 84
Registriert: 10.03.2006 19:07
Wohnort: Berlin
Kontaktdaten:

Program bleibt hängen (Server)

Beitrag von cofter »

Hi, ich habe einen Consolenserver programmiert, dieser funktioniert auch super. Jetzt möchte ich diesen aber mit Gadgets machen.
Also habe ich mit dem Visualdesigner mir eine Oberfläche erstellt.
Doch wenn ich das Programm jetzt ausführe bleibt es hängen.
Er Öffnet zwar das #MainWindow aber nicht mehr die Gadgets die in dem Window sind. Kann dann immer nur den Prozess killen.
Ich hoffe mir kann einer von euch sagen warum dies so ist und mir einen kleinen Tip geben.
Wäre sehr dankbar.

Verwende Pb 4.0

mfg
Cofter

Code: Alles auswählen

;- Window Constants
;
Enumeration
  #MainWindow
EndEnumeration

;- MenuBar Constants
;
Enumeration
  #MenuBar_0
EndEnumeration

Enumeration
  #Menu_Exit
  #MENU_Hilfe
  #MENU_Ueber
EndEnumeration

;- Gadget Constants
;
Enumeration
  #ServerFrame
  #ListPlayer
  #ConsoleStringGadged
  #CommandGadget
  #SendConsole
EndEnumeration

;- StatusBar Constants
;
Enumeration
  #StatusBar_0
EndEnumeration

;- Procedures
  Procedure Open_MainWindow()

  If OpenWindow(#MainWindow, 240, 147, 746, 524, "Solania Server v0.2b",  #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered )
    If CreateMenu(#MenuBar_0, WindowID(#MainWindow))
      MenuTitle("File")
      MenuItem(#Menu_Exit, "Exit")
      MenuTitle("Options")
      MenuTitle("Info")
      MenuItem(#MENU_Hilfe, "Hilfe")
      MenuItem(#MENU_Ueber, "Über")
      EndIf

      If CreateStatusBar(#StatusBar_0, WindowID(#MainWindow))
        EndIf

        If CreateGadgetList(WindowID(#MainWindow))
          Frame3DGadget(#ServerFrame, 20, 70, 520, 380, "Console")
          ListViewGadget(#ListPlayer, 560, 80, 170, 370)
          StringGadget(#ConsoleStringGadged, 30, 90, 500, 350, "Console v0.2b", #PB_String_ReadOnly)
          StringGadget(#CommandGadget, 20, 460, 520, 30, "Commands")
          ButtonGadget(#SendConsole, 550, 460, 80, 30, "Send Console")
          GadgetToolTip(#SendConsole, "Send Command to Console")
          
        EndIf
      EndIf
EndProcedure

  Procedure recieve_information()
*Buffer = AllocateMemory(50000) ; frisst den speicher auf!!!!
  SEvent = NetworkServerEvent()
  
  If SEvent
    ConsoleColor(15,0)
    ClientID = EventClient()
    
    Select SEvent    
      Case 1
        SetGadgetText(#ConsoleStringGadged,"Neuer Client Connectet! " +Str(ClientID))
      Case 2
        ReceiveNetworkData(ClientID, *Buffer, 50000)
        PrintN(PeekS(*Buffer))
      Case 3
        SetGadgetText(#ConsoleStringGadged,"Client " +Str(ClientID)+ " versucht Datei zu schicken!")
      Case 4
        SetGadgetText(#ConsoleStringGadged,"Client " +Str(ClientID)+ " verlässt den Server")
    EndSelect
  
  EndIf
FreeMemory(*Buffer)
EndProcedure

If InitNetwork()
    in_db = InitDatabase()
    db_examine = ExamineDatabaseDrivers()
    db_driver = NextDatabaseDriver()
    db_descript$ = DatabaseDriverDescription()
    db_driver_name$ = DatabaseDriverName()

    If CreateNetworkServer(0,7000)

        Open_MainWindow()
    Else
        MessageRequester("Error","Server konnte nicht gestartet werden!")
    EndIf
Else
    MessageRequester("Error","Netzwerk konnte nicht initialisiert werden!")
EndIf

Repeat

  recieve_information()
  Delay(1)
ForEver

Was ich nicht kenne das mach ich kaputt! :D
----------------------------------------------------
Purebasic v4.0
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

In der Hauptscheife musst du doch per WindoeEvent() abfragen, welche Ereignisse auftreten, sonst kannst du darauf nicht reagieren!

Außerdem wird die CPU sehr stark ausgelastet, wenn du z. B. kein Delay() verwendest - bei mir passiert dies auch manchmal bei Delay(1).

Das mit WindowEvent() sollte die helfen, siehe Hilfe.
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
cofter
Beiträge: 84
Registriert: 10.03.2006 19:07
Wohnort: Berlin
Kontaktdaten:

Beitrag von cofter »

Au man, da hätte ich echt selber drauf kommen können. :roll: :oops:
Danke für die schnell Antwort!

mfg
Cofter
Was ich nicht kenne das mach ich kaputt! :D
----------------------------------------------------
Purebasic v4.0
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Kein Problem. Und schnell war ich, weil ich gerade zufällig (wie so oft) hier bin. Programmiere aber gerade ein Tool, mit dem ich noch schneller vor Ort sein kann 8)
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

Unendlicher-Unwahrscheinlichkeits-Drive oder
Bistro-O-Matic?
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
cofter
Beiträge: 84
Registriert: 10.03.2006 19:07
Wohnort: Berlin
Kontaktdaten:

Beitrag von cofter »

Habe noch eine kleine Frage.
Kann ich für die WindowEvent() eine Procedure schreiben das ich dann in der repeat Schleife nur noch WindowProcedure() habe?


Edit:

Ok hat sich erledigt, funktioniert super mit Procedure. :mrgreen:
Was ich nicht kenne das mach ich kaputt! :D
----------------------------------------------------
Purebasic v4.0
Benutzeravatar
Karl
Beiträge: 520
Registriert: 21.07.2005 13:57
Wohnort: zu Hause

Beitrag von Karl »

Nee, Matrix-Online-Mikrosoft für die neuronale Schnittstelle hinterm Ohr.

:)

Gruß Karl
cofter
Beiträge: 84
Registriert: 10.03.2006 19:07
Wohnort: Berlin
Kontaktdaten:

Beitrag von cofter »

Habe doch noch eine Frage. :oops:
Wenn der Client jetzt seine Daten an den Server schickt werden diese in ein StringGadget gepackt.
Wie stelle ich es an das er mir die ankommenden Daten in immer in eine neue Zeile packt und nicht das alte überschreibt?
Muss ich da ein SetGadgetData und eine for Schleife verwenden?
Habe jetzt schon ein wenig probiert komme aber nichtzum gewünschtem Ergebnis.

Danke im Vorraus für eure Hilfe.

mfg
Cofter
Was ich nicht kenne das mach ich kaputt! :D
----------------------------------------------------
Purebasic v4.0
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Mit addgadgetitem


Beispiel :

Code: Alles auswählen

  OpenWindow(0,#PB_Ignore,#PB_Ignore,320,240,"")
  
  CreateGadgetList(WindowID(0))
  EditorGadget(0,10,10,300,220)
  
  Repeat
    uMsg = WaitWindowEvent()  
    
    If uMsg = #WM_MOUSEMOVE
      
      AddGadgetItem(0,0,"Mauszeiger bewegt sich " + str(i))
      
      i + 1
      
    EndIf
    
  Until uMsg = #WM_CLOSE
Benutzeravatar
Tafkadasom2k5
Beiträge: 1578
Registriert: 13.08.2005 14:31
Kontaktdaten:

Beitrag von Tafkadasom2k5 »

@Edel:
Stringgadget glaube ich meinte er, nicht ListGadget...

In dem Fall wär es glaube ich:

Code: Alles auswählen

altText.s = GetGadgetText(#GadgetNummer) + Chr(10) + Chr(13)

SetGadgetText(#GadgetNummer,altText + neuText)
Bei den Chr's bin ich mir nicht mehr so ganz sicher- es muss ein
"Carridge Return" und ein "Line Feed" sein, um den gewünschten Zeilenumbruch zu erzeugen...

Gr33tz
Tafkadasom2k5
OpenNetworkConnection() hat geschrieben:Versucht eine Verbindung mit dem angegebenen Server aufzubauen. 'ServerName$' kann eine IP-Adresse oder ein voller Name sein (z.B.: "127.0.0.1" oder "ftp.home.net").
php-freak hat geschrieben:Ich hab die IP von google auch ned rausgefunden!
Antworten