Mit EventGadget = EventGadget() stürzt der Server ab.

Für allgemeine Fragen zur Programmierung mit PureBasic.
funkheld
Beiträge: 651
Registriert: 31.12.2009 11:58

Mit EventGadget = EventGadget() stürzt der Server ab.

Beitrag von funkheld »

Hallo...mit
If GetAsyncKeyState_(#VK_S) funktioniert das Daten übertragen zum Client:

Code: Alles auswählen

Procedure sprite_neu(Sprite, x, y, xx, yy, w.f, dx, dy, h)
  w = w * (#PI/180)
  r.f = Sqr(Pow(xx,2)+Pow(yy,2))/2
  t.f = ATan(xx/yy)
  w1.f = w       - t : w2.f = w       + t : w3.f = w + #PI - t : w4.f = w + #PI + t
  TransformSprite3D(Sprite, Cos(w1)*r, Sin(w1)*r, Cos(w2)*r, Sin(w2)*r, Cos(w3)*r, Sin(w3)*r, Cos(w4)*r, Sin(w4)*r)
  Start3D()
    DisplaySprite3D(Sprite, x-Cos(w)*dy+Sin(w)*dx, y-Sin(w)*dy-Cos(w)*dx, h)
  Stop3D()
EndProcedure

Global Quit.l, Port.l, conID.l, status.l, EventID.l
Global sData.l,rData.l,offs.l,geschw.l, motor.l , bremsdr.f, div_m.l,fahrst.l,z.l
Global *sbuffer.l, *rbuffer.l,z.l,wert.l
Global ClientID.l, ClientIP.l, Command.s,sevent.l

Declare zeige_daten()

Enumeration
  #Window_0
  #Button_0
  #Button_1
  #Button_2
  #String_0
  #String_1
  #String_2
  #String_3
  #String_4
  #zeiger1
  #anzeiger1
  #zeiger2
  #anzeiger2
  #checkbox_1
  #checkbox_2
  #text_1
EndEnumeration

If InitNetwork() = 0
  ;PrintN("Konnte Netzwerk nicht initialisieren!")
  End
EndIf

If CreateNetworkServer(1, 1435) = 0
  ;PrintN("Server konnte nicht erstellt werden!")
  End
EndIf

*rbuffer = AllocateMemory(256)
*sbuffer = AllocateMemory(256)

InitSprite()
InitSprite3D()
 
	 OpenWindow(#Window_0,0,0,420,780,"sprites!",#PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_ScreenCentered)
	 OpenWindowedScreen(WindowID(#Window_0),5,200,400,560,0,0,0)

 	 CreateSprite(#zeiger1,200,200, #PB_Sprite_Texture)
   CreateSprite3D(#zeiger1, #zeiger1)
   CreateSprite(#anzeiger1, 200,200, #PB_Sprite_Texture)
   CreateSprite3D(#anzeiger1, #anzeiger1)
   
   CreateSprite(#zeiger2,200,200, #PB_Sprite_Texture)
   CreateSprite3D(#zeiger2, #zeiger2)
   CreateSprite(#anzeiger2, 200,200, #PB_Sprite_Texture)
   CreateSprite3D(#anzeiger2, #anzeiger2)
   
   StartDrawing(SpriteOutput(#anzeiger1))
     Box(0,0,200,200,RGB(255,0,255))
     Circle(100,100,90,RGB(50,50,50))
   StopDrawing()
   StartDrawing(SpriteOutput(#zeiger1))
     Box(0,0,200,200,RGB(255,0,255))
     RoundBox(100,98,55,6,3,3,RGB(0,255,0))
     Line(100,100,74,2,RGB(0,255,0))
   StopDrawing()
     
   StartDrawing(SpriteOutput(#anzeiger2))
     Box(0,0,200,200,RGB(255,0,255))
     Circle(100,100,90,RGB(50,50,50))
   StopDrawing()
   StartDrawing(SpriteOutput(#zeiger2))
     Box(0,0,200,200,RGB(255,0,255))
     RoundBox(100,100,55,6,3,3,RGB(255,0,0))
     Line(100,102,74,2,RGB(255,0,0))
   StopDrawing()
 
   TransparentSpriteColor(#zeiger1, RGB(255, 0, 255))
   TransparentSpriteColor(#anzeiger1, RGB(255, 0, 255))
   TransparentSpriteColor(#zeiger2, RGB(255, 0, 255))
   TransparentSpriteColor(#anzeiger2, RGB(255, 0, 255))
   
   Sprite3DQuality(#PB_Sprite3D_NoFiltering)
   Sprite3DQuality(#PB_Sprite3D_NoFiltering)
  
   StringGadget(#String_0, 200, 10, 100, 20, "")
   StringGadget(#String_1, 5, 80, 80, 30, "")
   StringGadget(#String_2, 100, 80, 80, 30, "")
   StringGadget(#String_3, 200, 80, 80, 30, "")
   StringGadget(#String_4, 5, 150, 80, 30, "")
   CheckBoxGadget(#checkbox_1, 125, 58, 20,20,"")
   TextGadget(#text_1, 145,61, 50,15,"/10")
   ButtonGadget(#Button_0,5, 10,60, 20, "Verbinden")
   
   Quit = 0
   div_m=10
   
   ClearScreen(RGB(140,140,140))
   
   sprite_neu(#anzeiger1,100,100,200,200,0,0,0,255)
   sprite_neu(#zeiger1,100,100,200,200,geschw+45,0,-3,255)
    
   sprite_neu(#anzeiger2,300,100,200,200,0,0,0,255)
   sprite_neu(#zeiger2,300,100,200,200,motor/10,0,-3,255)
Repeat
	
	EventID = WaitWindowEvent(5)    
  Select EventID
    Case #PB_Event_CloseWindow
      Quit = 1
    Case #PB_Event_Gadget
      EventGadget = EventGadget()
      EventType = EventType()
      If EventGadget = #Button_0
        
      EndIf
      
  EndSelect
  
  If GetAsyncKeyState_(#VK_S)
    offs = 0 
    PokeL(*sbuffer + 0, $03) : offs + 4
    PokeA(*sbuffer + 4, $00) : offs + 1
    PokeA(*sbuffer + 5, $02) : offs + 1
    PokeA(*sbuffer + 6, $00) : offs + 1
    SendNetworkData(ClientID, *sbuffer, offs)
    Delay(100)
    
    offs = 0 
    PokeL(*sbuffer + 0, $08) : offs + 4
    PokeA(*sbuffer + 4, $00) : offs + 1
    PokeA(*sbuffer + 5, $03) : offs + 1
    PokeA(*sbuffer + 6, $00) : offs + 1
    PokeL(*sbuffer + 7, $0A) : offs + 1
    PokeA(*sbuffer + 8, $01) : offs + 1
    PokeA(*sbuffer + 9, $02) : offs + 1
    PokeA(*sbuffer + 10, $09) : offs + 1
    PokeA(*sbuffer + 11, $33) : offs + 1 
    SendNetworkData(ClientID, *sbuffer, offs)
    Delay(100) 
    
    offs = 0 
    PokeL(*sbuffer + 0, $04) : offs + 4
    PokeA(*sbuffer + 4, $00) : offs + 1
    PokeA(*sbuffer + 5, $03) : offs + 1
    PokeA(*sbuffer + 6, $00) : offs + 1
    PokeA(*sbuffer + 7, $00) : offs + 1
    SendNetworkData(ClientID, *sbuffer, offs)
    Delay(100)
  EndIf
  
  SEvent = NetworkServerEvent()
  If SEvent   
    ClientID = EventClient()

  Select SEvent
    Case 1     
      ClientIP = GetClientIP(ClientID)
      ;PrintN("Client <" + IPString(ClientIP) + "> ist dem Server beigetreten.")
    Case 2
      FillMemory(*rbuffer, 256)
      rdata=ReceiveNetworkData(ClientID, *rbuffer, 256)
      For z=6 To rData Step 5
      	wert=PeekB(*rbuffer+z)
      	
        If wert=1
          PokeB(*sbuffer + 0, PeekB(*rbuffer+z+1))
          PokeB(*sbuffer + 1, PeekB(*rbuffer+z+2))
          PokeB(*sbuffer + 2, PeekB(*rbuffer+z+3))
          PokeB(*sbuffer + 3, PeekB(*rbuffer+z+4))
          geschw=Int(PeekF(*sbuffer))
        ElseIf wert=2
          PokeB(*sbuffer + 0, PeekB(*rbuffer+z+1))
          PokeB(*sbuffer + 1, PeekB(*rbuffer+z+2))
          PokeB(*sbuffer + 2, PeekB(*rbuffer+z+3))
          PokeB(*sbuffer + 3, PeekB(*rbuffer+z+4))
          bremsdr=PeekF(*sbuffer)       
        ElseIf wert=9
          PokeB(*sbuffer + 0, PeekB(*rbuffer+z+1))
          PokeB(*sbuffer + 1, PeekB(*rbuffer+z+2))
          PokeB(*sbuffer + 2, PeekB(*rbuffer+z+3))
          PokeB(*sbuffer + 3, PeekB(*rbuffer+z+4))
          motor=Int(PeekF(*sbuffer)) 
        ElseIf wert=51
        	PokeB(*sbuffer + 0, PeekB(*rbuffer+z+1))
        	PokeB(*sbuffer + 1, PeekB(*rbuffer+z+2))
        	PokeB(*sbuffer + 2, PeekB(*rbuffer+z+3))
        	PokeB(*sbuffer + 3, PeekB(*rbuffer+z+4))
        	fahrst=Int(PeekF(*sbuffer))    
      	EndIf   
        zeige_daten()
      Next
    Case 4
    ClientIP = GetClientIP(ClientID)
    ;PrintN("Client <" + IPString(ClientIP) + "> hat den Server verlassen.")
  EndSelect
EndIf

FlipBuffers()
  
Until Quit = 1 Or EventID = #PB_Event_CloseWindow

Procedure zeige_daten()
    sprite_neu(#anzeiger1,100,100,200,200,0,0,0,255)
    sprite_neu(#zeiger1,100,100,200,200,geschw+45,0,-3,255)
    
    sprite_neu(#anzeiger2,300,100,200,200,0,0,0,255)
    sprite_neu(#zeiger2,300,100,200,200,motor/div_m,0,-3,255)
    
    FlipBuffers()
    
    SetGadgetText(#String_1,Str(geschw))
    SetGadgetText(#String_2,Str(motor))
    SetGadgetText(#String_3,StrF(bremsdr,1))
    SetGadgetText(#String_4,Str(fahrst))
  EndProcedure
Aber mit Case #PB_Event_Gadget stürzt das Programm ab, warum?:

Code: Alles auswählen

EventID = WaitWindowEvent(5)    
  Select EventID
    Case #PB_Event_CloseWindow
      Quit = 1
    Case #PB_Event_Gadget
      EventGadget = EventGadget()
      EventType = EventType()
      If EventGadget = #Button_0
        offs = 0 
    		PokeL(*sbuffer + 0, $03) : offs + 4
    		PokeA(*sbuffer + 4, $00) : offs + 1
    		PokeA(*sbuffer + 5, $02) : offs + 1
    		PokeA(*sbuffer + 6, $00) : offs + 1
    		SendNetworkData(ClientID, *sbuffer, offs)
    		Delay(100)
    
    		offs = 0 
    		PokeL(*sbuffer + 0, $08) : offs + 4
    		PokeA(*sbuffer + 4, $00) : offs + 1
    		PokeA(*sbuffer + 5, $03) : offs + 1
    		PokeA(*sbuffer + 6, $00) : offs + 1
    		PokeL(*sbuffer + 7, $0A) : offs + 1
    		PokeA(*sbuffer + 8, $01) : offs + 1
    		PokeA(*sbuffer + 9, $02) : offs + 1
    		PokeA(*sbuffer + 10, $09) : offs + 1
    		PokeA(*sbuffer + 11, $33) : offs + 1 
    		SendNetworkData(ClientID, *sbuffer, offs)
    		Delay(100) 
    
    		offs = 0 
    		PokeL(*sbuffer + 0, $04) : offs + 4
    		PokeA(*sbuffer + 4, $00) : offs + 1
    		PokeA(*sbuffer + 5, $03) : offs + 1
    		PokeA(*sbuffer + 6, $00) : offs + 1
    		PokeA(*sbuffer + 7, $00) : offs + 1
    		SendNetworkData(ClientID, *sbuffer, offs)
    		Delay(100)
      EndIf    
  EndSelect
Andreas21
Beiträge: 390
Registriert: 30.08.2004 09:05
Computerausstattung: Desktop
Windows 10 Pro x64
CPU: AMD Ryzen 5 2600 3.40 GHz
Ram: 16GB RAM
Grafik: NVIDA Geforce 1060
PB: 5.72 X86/X64
Wohnort: Heidelberg

Re: Mit EventGadget = EventGadget() stürzt der Server ab.

Beitrag von Andreas21 »

Bei welcher zeile genau stürtzt er den ab?

SendNetworkData(ClientID, *sbuffer, offs) -> ConnectionID Unbekannt
Zeile 135
Windows 10 x64 Pro - PB 5.61 X64 / x32 - PB 4.6 x32
funkheld
Beiträge: 651
Registriert: 31.12.2009 11:58

Re: Mit EventGadget = EventGadget() stürzt der Server ab.

Beitrag von funkheld »

Wenn ich den Button_0 drücke (also über Gadged-Event), stürzt es ab:
If EventGadget = #Button_0

Der gleiche Ladevorgang funktioniert beim Programm oben mit der Taste "s":
If GetAsyncKeyState_(#VK_S)

Danke.
Zuletzt geändert von funkheld am 02.03.2012 01:41, insgesamt 1-mal geändert.
Andreas21
Beiträge: 390
Registriert: 30.08.2004 09:05
Computerausstattung: Desktop
Windows 10 Pro x64
CPU: AMD Ryzen 5 2600 3.40 GHz
Ram: 16GB RAM
Grafik: NVIDA Geforce 1060
PB: 5.72 X86/X64
Wohnort: Heidelberg

Re: Mit EventGadget = EventGadget() stürzt der Server ab.

Beitrag von Andreas21 »

Mit Debugger gestartet und geschaut was er als Fehler sagt?

SendNetworkData(ClientID, *sbuffer, offs) -> ConnectionID Unbekannt
Zeile 135

ClientID muss gültieg sein.

Du hast zwar einen Server gestartet aber kein Client an den du was senden köntest.
Ist ein Client verbunden mit dem Server und ist die ClientID auch gültieg?

ClientID = 0 Fehler.
Zuletzt geändert von Andreas21 am 02.03.2012 01:45, insgesamt 1-mal geändert.
Windows 10 x64 Pro - PB 5.61 X64 / x32 - PB 4.6 x32
funkheld
Beiträge: 651
Registriert: 31.12.2009 11:58

Re: Mit EventGadget = EventGadget() stürzt der Server ab.

Beitrag von funkheld »

Warum ist die ClientID im Button-Event ungültig und bei der GetAsyncKeyState_(#VK_S) funktioniert es ?
SendNetworkData(ClientID, *sbuffer, offs) -> ConnectionID Unbekannt.

Oben das erste Programm läuft ja , es wird eine Verbindung zum Clienten hergestellt und dann wenn ich die Taste "s" drücke funktioniert es. Nur wenn ich dieses Button-Event als Ersatz für GetAsyncKeyState_(#VK_S) reinsetze geht es nicht, bricht das Programm ab.

Kommt durch das Event keine Verbindung zustande ?

Gruss
Zuletzt geändert von funkheld am 02.03.2012 01:50, insgesamt 4-mal geändert.
Andreas21
Beiträge: 390
Registriert: 30.08.2004 09:05
Computerausstattung: Desktop
Windows 10 Pro x64
CPU: AMD Ryzen 5 2600 3.40 GHz
Ram: 16GB RAM
Grafik: NVIDA Geforce 1060
PB: 5.72 X86/X64
Wohnort: Heidelberg

Re: Mit EventGadget = EventGadget() stürzt der Server ab.

Beitrag von Andreas21 »

Ich habe kein Cient zum testen nur den Server.

Du fragst ClientID auch erst nach GetAsyncKeyState_(#VK_S) ab.
....
If GetAsyncKeyState_(#VK_S)
offs = 0
PokeL(*sbuffer + 0, $03) : offs + 4
PokeA(*sbuffer + 4, $00) : offs + 1
PokeA(*sbuffer + 5, $02) : offs + 1
PokeA(*sbuffer + 6, $00) : offs + 1
SendNetworkData(ClientID, *sbuffer, offs)
Delay(100)

offs = 0
PokeL(*sbuffer + 0, $08) : offs + 4
PokeA(*sbuffer + 4, $00) : offs + 1
PokeA(*sbuffer + 5, $03) : offs + 1
PokeA(*sbuffer + 6, $00) : offs + 1
PokeL(*sbuffer + 7, $0A) : offs + 1
PokeA(*sbuffer + 8, $01) : offs + 1
PokeA(*sbuffer + 9, $02) : offs + 1
PokeA(*sbuffer + 10, $09) : offs + 1
PokeA(*sbuffer + 11, $33) : offs + 1
SendNetworkData(ClientID, *sbuffer, offs)
Delay(100)

offs = 0
PokeL(*sbuffer + 0, $04) : offs + 4
PokeA(*sbuffer + 4, $00) : offs + 1
PokeA(*sbuffer + 5, $03) : offs + 1
PokeA(*sbuffer + 6, $00) : offs + 1
PokeA(*sbuffer + 7, $00) : offs + 1
SendNetworkData(ClientID, *sbuffer, offs)
Delay(100)
EndIf

SEvent = NetworkServerEvent()
If SEvent
ClientID = EventClient()
....
bei GetAsyncKeyState_(#VK_S) ist ClientID noch unbekannt da du die erst bei ClientID = EventClient() zuweist.
Windows 10 x64 Pro - PB 5.61 X64 / x32 - PB 4.6 x32
funkheld
Beiträge: 651
Registriert: 31.12.2009 11:58

Re: Mit EventGadget = EventGadget() stürzt der Server ab.

Beitrag von funkheld »

Es ist eine Repeat-schleife, die wird ja sofort gestartet.
Wie geschrieben, mit der GetAsyncKeyState_(#VK_S) funktioniert es.

Danke.
Gruss
Andreas21
Beiträge: 390
Registriert: 30.08.2004 09:05
Computerausstattung: Desktop
Windows 10 Pro x64
CPU: AMD Ryzen 5 2600 3.40 GHz
Ram: 16GB RAM
Grafik: NVIDA Geforce 1060
PB: 5.72 X86/X64
Wohnort: Heidelberg

Re: Mit EventGadget = EventGadget() stürzt der Server ab.

Beitrag von Andreas21 »

Es ist egal ob es eine Repeat- schleiffe ist.
Sobalt du s drückst und er ist gerade an der position in der repeart schleiffe giebts einen fehler wenn noch kein ClientId zugewissen wurde.
Kannst ja mal die if abfrage raus nehmen und es sofort ausführen.
Irgentwann wirts da fehler geben.

Du sagst auch nicht was genau dir der Debuger sagt?

Einfach mal das checken.

Code: Alles auswählen

EventID = WaitWindowEvent(5)   
  Select EventID
    Case #PB_Event_CloseWindow
      Quit = 1
    Case #PB_Event_Gadget
      EventGadget = EventGadget()
      EventType = EventType()
      If EventGadget = #Button_0
      debug ClientID
      end
        offs = 0
          PokeL(*sbuffer + 0, $03) : offs + 4
          PokeA(*sbuffer + 4, $00) : offs + 1
          PokeA(*sbuffer + 5, $02) : offs + 1
          PokeA(*sbuffer + 6, $00) : offs + 1
          SendNetworkData(ClientID, *sbuffer, offs)
          Delay(100)
   
          offs = 0
          PokeL(*sbuffer + 0, $08) : offs + 4
          PokeA(*sbuffer + 4, $00) : offs + 1
          PokeA(*sbuffer + 5, $03) : offs + 1
          PokeA(*sbuffer + 6, $00) : offs + 1
          PokeL(*sbuffer + 7, $0A) : offs + 1
          PokeA(*sbuffer + 8, $01) : offs + 1
          PokeA(*sbuffer + 9, $02) : offs + 1
          PokeA(*sbuffer + 10, $09) : offs + 1
          PokeA(*sbuffer + 11, $33) : offs + 1
          SendNetworkData(ClientID, *sbuffer, offs)
          Delay(100)
   
          offs = 0
          PokeL(*sbuffer + 0, $04) : offs + 4
          PokeA(*sbuffer + 4, $00) : offs + 1
          PokeA(*sbuffer + 5, $03) : offs + 1
          PokeA(*sbuffer + 6, $00) : offs + 1
          PokeA(*sbuffer + 7, $00) : offs + 1
          SendNetworkData(ClientID, *sbuffer, offs)
          Delay(100)
      EndIf   
  EndSelect
Das natürlich mit dem Debuger lauffen lassen.
funkheld hat geschrieben:Warum ist die ClientID im Button-Event ungültig und bei der GetAsyncKeyState_(#VK_S) funktioniert es ?
SendNetworkData(ClientID, *sbuffer, offs) -> ConnectionID Unbekannt.
Weil du s nicht sofort drückst sondern erst wenn ein Client verbunden ist.
Mach das mal wenn keiner verbunden ist.

Da ich aber nicht mal weis was genau für einen fehler kommt kann ich dir da nicht helfen.
Dabei steht der fehler im Debuger wenn man das mit debuger startet.
Windows 10 x64 Pro - PB 5.61 X64 / x32 - PB 4.6 x32
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Re: Mit EventGadget = EventGadget() stürzt der Server ab.

Beitrag von PMV »

Irgend wann hast du so viele Fragen gestellt, dass wirklich
jeder hier mal an dir die Zähne ausgebissen hat. :lol:
Ich würd ja lachen, wenns nicht so traurig wäre.


baue eine Prüfung für die ClientID vor SendNetworkData() ein:
Debug ClientID
Und versuche dann raus zu finden, warum das Ergebnis das ist
was es ist. Selbst ist der Programmierer. Tipp: Die Ausgabe
könnteste dann auch wo anders hin verschieben.

MFG PMV
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
funkheld
Beiträge: 651
Registriert: 31.12.2009 11:58

Re: Mit EventGadget = EventGadget() stürzt der Server ab.

Beitrag von funkheld »

Hmm..., es wird eine positive Ziffer angezeigt als ID.

Unter Task-Manager/Prozesse wurde die Purebasic-Exe nicht rausgenommen/geschlosssen wenn ich das Programm im Purebasic-Editor beendet hatte zum verbessern und dann wieder neu gestartet hatte im Editor. Warum..., weiss ich nicht.

Als externe EXE lief dann das Beispielprogramm.

Gruss
Antworten