UDP Server mit GUI

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

kog

Betreff: UDP Server mit GUI

BeitragMo, Aug 14, 2006 11:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Guten Tag an alle,
Als ich heute ein kleines Serverprogramm schrieb, musste ich was feststellen, das empfangen und senden an einen BlitzBasic clienten ist kein Problem, doch BlitzMax empfängt nur etwas wenn das Fenster vom Server offen ist, gibt es eine möglichkeit dies auch zu minimieren und der Server trotzdem noch empfangen kann?
 

Dreamora

BeitragMo, Aug 14, 2006 13:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Via WinAPI sollte das möglich sein, ja. So wie bei den alten Blitz ja auch schon.

Was vielleicht auch hilft, habe ich aber noch nicht ausprobiert, wäre den entsprechenden Event abzufangen und ins leere laufen zu lassen.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

kog

BeitragMo, Aug 14, 2006 13:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich benutze das BNetEX modul, doch leider habe ich keine ahnung wie du mein, in einer repeat schleife frage ich den UDP Status ab ob eine Nachricht hineinkommt oder nicht.

Hier der schleifen code:
BlitzBasic: [AUSKLAPPEN]
If window
Repeat
If udp.RecvAvail() Then
If udp.RecvMsg() > 0 Then
'UsereInformation
userip=udp.GetMsgIP()
userport=udp.GetMsgPort()

'Set UDP Senderstream
udp2.SetRemoteIP(userip)
udp2.SetRemotePort(userport)

'UDP Packet
id=udp.ReadByte()
Select id
Case 250
id2=udp.ReadByte()
Select id2
Case 0
addtxt("Serverinforequest from "+TNetwork.StringIP(userip)+":"+userport)

wb(250)
wb(1)
wl("Testserver")

s()
End Select
End Select
EndIf
EndIf

Select WaitEvent()

Case EVENT_WINDOWCLOSE
End

End Select

Forever

EndIf


p.s.: Vo wo genau us dr Schwiz? Wele Kanton?
 

Dreamora

BeitragMo, Aug 14, 2006 14:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Das hat damit nichts zu tun.
Was du machen musst, falls du keine WinAPI nutzen willst, ist einen EventHook erzeugen um damit den verlorenen Fokus zu kompensieren. Weiss jedoch nicht ob das hier wirklich funktioniert, müsstest du probieren.

Das ganze hat mti dem UDP Code rein garnix zu tun, es ist nur so das BM Apps (oder blitz allgemein) stehen bleiben wenn man sie minimiert, bis man sie wieder reinholt. Und dem musst du mit einem EventHook entgegen wirken und den Event verwerfen anstatt ihn weiterzuleiten.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

kog

BeitragMo, Aug 14, 2006 15:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Irgendwie bin ich zu blöd für Hook, habe es so versucht wie im tutorial:
Code: [AUSKLAPPEN]

AddHook EmitEventHook, renderUDP

Function renderUDP:Object(iId:Int,tData:Object,tContext:Object)
   Local Event:TEvent=TEvent(tData)

   UDPUpdate()

   Return tData
End Function
 

Dreamora

BeitragMo, Aug 14, 2006 15:39
Antworten mit Zitat
Benutzer-Profile anzeigen
sorry, wenn du versucht hättest das Tut zu verstehen, dann hätteste nicht sowas geschrieben.

Ich bin allerdings gerne bereit dir zu helfen, wenn du nicht mehr copy-paste machst und sagst du hättest das tut wirklich gemacht ... Sprich frühestens morgen oder übermorgen, da man das nicht in 2min versteht.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

kog

BeitragMo, Aug 14, 2006 16:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe das Tutorials mit den Eventhooks nochmal in ruhe durchgelesen, auch herausgefunden welche ID heraus kommt wenn man das fenster aktiviert, doch wie findet man es heraus wenn es nicht aktiviert ist?

ich habe ihn jetzt so erweitert:
Code: [AUSKLAPPEN]
   If Event.Source=window And Event.ID = 16388
      UDPUpdate()
   EndIf

doch immer noch keine lösung
 

Dreamora

BeitragMo, Aug 14, 2006 17:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn die Anwendung "pausiert" wird, wird der EVENT_APPSUSPEND gesendet, entsprechend wird ein Event erzeugt wenn die Anwendung fortgesetzt wird.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

kog

BeitragMo, Aug 14, 2006 17:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich weiss, ich nerve hier ziemlich rum, doch leider funktioniert dies nicht, zum testen habe ich ein End hineingebaut:
Code: [AUSKLAPPEN]
Function renderUDP:Object(iId:Int,tData:Object,tContext:Object)
   Local Event:TEvent=TEvent(tData)
      
   If Event.Source=window And Event.ID = EVENT_APPSUSPEND
      End
      UDPUpdate()
   EndIf

   Return tData
End Function


aber dies funktioniert nicht, ich wäre sehr froh wenn du mir ein beispiel machen würdest, wenn dieses Problem geklärt wäre, könnte ich endlich mit dem UDP Code weitermachen..
 

Dreamora

BeitragMo, Aug 14, 2006 17:58
Antworten mit Zitat
Benutzer-Profile anzeigen
EVENT_APPRESUME und EVENT_APPSUSPEND haben kein Source, denn das würde keinen Sinn machen da nur 1 Anwendung laufen kann.

Sprich wenn du das raus nimmst, wird er drauf reagieren.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

kog

BeitragMo, Aug 14, 2006 18:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe die Event.ID abfrage rausgenommen und in der schleife mit waitevent() abgefragt EVENT_APPRESUME und EVENT_APPSUSPEND, doch leider funktioniert es immernochnicht.

Hmm BlitzBasic war einfacher^^

nX^ hat mir auch versucht mit dem Code zu helfen doch leider funktioniert dies nicht, gibt es noch eine andere möglichkeit?

Vertex

BeitragMo, Aug 14, 2006 23:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Also die Nachrichten sollten dir zumindest in BNetEx nicht verloren gehen.

Also laut BlitzPlus ist es ja folgendermaßen:
Zitat:
Früher oder später wird jeder auf ein kleines Problem stoßen. Wenn man ein anderes Programmfenster auswählt, dann läuft das BB-Programm weiterhin. Dies lässt sich mit einigen Tricks verhindern (Event $2001). Doch viel einfacher ist es mit diesem Befehl. Normalerweise ist diese Funktion deaktiviert. Wird es aktiviert, dann wird das Programm automatisch angehalten, bis das BB-Fenster wieder aktiviert wird.


Ob das bei BMax auch so ist, weiß ich nicht.

mfg olli
 

Dreamora

BeitragDi, Aug 15, 2006 7:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Eine Möglichkeit wäre sonst auch das ganze via Timer zu steuern (denn Timer erzeugen den Event

Code: [AUSKLAPPEN]
Strict

Global window:tgadget = CreateWindow("Test" , 0 , 0 , 200 , 200)
Global panel:tgadget = CreatePanel(0 , 0 , ClientHeight(window) , ClientWidth(window) , window)
AddHook 0,renderUDP
SetHotKeyEvent(Key_Q,modifier_control ) ' Ctrl + Q um Anwendung zu beenden

Global timer:ttimer = CreateTimer(100)   ' Alle 10ms auf neue Nachrichten prüfen

Repeat
   
   WaitEvent()
   
   If EventID() = event_hotkeyhit And EventMods() = modifier_control And EventData() = key_q
      End
   EndIf
Forever

End

Function renderUDP:Object(iId:Int,tData:Object,tContext:Object)
   Local Event:TEvent = TEvent(tData)

   If event And Event.ID = EVENT_TIMERTICK And event.source = timer
         Print "Zeit: " + MilliSecs()
   EndIf
   Return tData
End Function


Der EventHook sonst hätte nämlich keinen Sinn, da wie der Name sagt, der Hook an Events gebunden ist und wenn eine Anwendung nicht mehr fokusiert ist, erhält sie eigentlich keine Events mehr, ausgenommen APPRESUME und TIMERTICK ... Und ersterer ist ein einmaliger Event.


Ich weiss das es auch eine Möglichkeit gab das "lose Focus" Verhalten zu manipulieren, allerdings leider nimmer aus dem Kopf, da muss ich erst ein wenig rumschauen.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
  • Zuletzt bearbeitet von Dreamora am Di, Aug 15, 2006 14:14, insgesamt einmal bearbeitet

kog

BeitragDi, Aug 15, 2006 12:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielen Dank!
Ich kann Ihnen gar nicht genug danken, es funktioniert endlich, danke!

@Dreamora: Us welem kanton chuntsch?

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group