Thema: Delphi Spielwiese - SocketTest

Einzelnen Beitrag anzeigen

Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#18

AW: Spielwiese - SocketTest

  Alt 24. Okt 2016, 15:20
Also das wäre meine bevorzugte Lösung -> non blocket sockets aber ohne an Windows(-Nachrichten) gebunden zu sein.
Aber so etwas gibt es nicht - oder?
...
ähh
...
halt
...
Ok, man könnte sich in der OnClientRead-Behandlung eine Liste von eigenen Nachrichten erzeugen...
Dann wäre es nur Aufgabe des Mainthreads, die Nachrichten für den Manager aufzubereiten, wo diese dann verarbeitet werden.
In dem Sinne habe ich jetzt etwas realisiert und muss noch ein paar Details fertig stellen und testen.

Im Grunde gibt es mehrere Module (Interfaces), die miteinander verbunden - aber auch austauschbar - sind.
Die Businesslogik und die GUI-Logik können IMessages für die Gegenseite erstellen und diese ihrem Handler übergeben.
Der Handler entscheidet, wann er die Message wirklich versendet und übernimmt das gesamte Protokoll.
Ebenso zerlegen die Handler beim Empfang von Nachrichten die (verbunden)Pakete in einzelne Häppchen, fordern sich von der Businesslogik bzw. GUI-Logik (bzw. von deren MessageResolvern) entsprechende MessageInterfaces ab und entscheiden wiederum selbstständig, wann sie diese Messages tatsächlich zur Verarbeitung weiter geben.

Man kann Messages eine Priorität zuweisen oder den Status Singleton oder einen Timerwert.
Messages mit Priotät werden in der Messagequeue vorn eingefügt.
Singletons werden, falls sich schon eine gleichartige Message in der Queue befindet, durch die neue Message überschrieben (so lange die alte halt noch nicht verarbeitet wurde).
Timerwerte bewirken, dass Nachrichten dieser Identität frühestens n ms nach dem letzten Versand verschickt bzw. verarbeitet werden.

So kann man durch die Einstellung der IMessage-Eigenschaften den Handlern direkt vorgeben, wie sie den Versand optimieren sollen.

In der Buinesslogik und GUI-Logik muss man nur noch die Messages erzeugen, aus erhaltenen StringListen wieder parsen und in der Logik verarbeiten.


Die Handler nutzen ihrerseits Module für die tatsächliche Datenübertragung (aktuell bei mir mit non blocking sockets).
Diese Module könnte man grundsätzlich auch austauschen, so dass man auch z.B. Indys nutzen könnte, ohne die Business- oder GUI-Logik ändern zu müssen.

Besteht Interesse an der Lösung?
Dann würde ich nochmal ein Video erstellen und das Projekt hier einstellen.

Bis hierher sieht das gut aus. Ein paar Tage brauche ich dann aber noch für den Rest.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)

Geändert von stahli (24. Okt 2016 um 15:55 Uhr)
  Mit Zitat antworten Zitat