Update V# 1.2.0
Großes Update! Neben div. interner Optimierungen gibt es eine große Neuerung: Den
Protocol - Manager
Was benötigt man bei (fast) jeder Client-Server Anwendung neben den allgemeinen Sende/Versand usw. Routinen? Ein Protokoll.
Das Entwickeln eines guten Protokolls ist essentiell für jede Netzwerk-Anwendung. Es sollte nicht zu viel Overhead erzeugen, nach Möglichkeit Auf/Abwärtskompatibel, ... . Und Fehler im Protokoll können unter anderem zu verdammt langen Debug-Zeiten führen
Das kann nun die Integrierte Protokoll-Verwaltung für euch übernehmen. Sie besteht aus 3 Teilen:
- Protocol-Builder
- Protocol-Blueprint
- Protocol-Transceiver
Der Builder:
Der Builder erstellt euch die Struktur eures Protokolls. Jedes Protokoll hat einen Namen, eine Version und beliebige Anzahl von Einträgen vom Typ Byte,Long,Quad,Float,Double,String oder Memory. Jedem Typ kann ein Default-Wert zugewiesen werden.
Daraus erstellt der Builder einen Blueprint. Ein kleiner Beispielcode für ein Protokoll:
Code: Alles auswählen
; Protokol erstellen
MyBuilder.ENM_Protocol_Builder = ENM\OpenProtocolBuilder("MyProto", 12)
; Einträge hinzufügen
MyBuilder\AddEntry_Byte("Flag")
MyBuilder\AddEntry_String("User", "Local")
MyBuilder\AddEntry_String("Password")
MyBuilder\AddEntry_Long("Para_1")
MyBuilder\AddEntry_Double("Para_2", #PI)
MyBuilder\AddEntry_Byte("Para_3", 1)
; exportieren
MyProto$ = MyBuilder\ExportBlueprint()
Daraus mach ensteht folgender Blueprint:
Code: Alles auswählen
PN: MyProto
PV: 1
flag I: 0 T: BYTE D: 0
user I: 1 T: STRING D: Local
password I: 2 T: STRING D:
para_1 I: 3 T: LONG D: 0
para_2 I: 4 T: DOUBLE D: 3.1415926536
Könnte man im Prinzip auch selbst schreiben, der Builder ist in erster Linie für Developer-Tools gedacht um bequem eigene Protokolle "zusammenzuklicken". Wenn ich Zeit finde werde ich selbst so ein kleines Tool schreiben.
Das nächste Element ist der
Blueprint. Dieser Parst den oben entstandenen Text und erzeugt eine Art Token, der Anweisungen enthält wie ein Protokoll auszuwerten ist.
Code: Alles auswählen
MyBlueprint.ENM_Protocol_Blueprint = ENM\OpenProtocolBlueprint(MyProto$)
Der Blueprint wird am Besten einmal pro Protokol Global erstellt und am Ende des Programms freigegeben. Er wird zum erstellen der Transceiver benötigt. Das erspart das der Blueprint jedesmal beim erstellen eines Transceivers geparst werden muss.
Und nun der wichtigste Teil, der
Transceiver:
Die Transceiver ist Transmitter und Receiver zugleich. Der Transceiver setzt die Werte für die Einträges eines Protokolls, und exportiert diese in einen kompakten Memory-Block der über die Paket-Funktionen von ENM gesendet werden kann.
Auf der anderen Seite wandelt der Transceiver den Speicher aus den Paketen wieder zurück.
Code: Alles auswählen
; Transceiver aus Blueprint erstellen
MyTransceiver.ENM_Protocol_Transceiver = ENM\OpenProtocolTransceiver(MyBlueprint)
; Felder setzen
MyTransceiver\T_SetByte("Flag", 12)
MyTransceiver\T_SetString("Password", "geheim")
; Paket erstellen
*Mem = MyTransceiver\T_Export(@MemSize.i)
; Memory via Paket senden....
; .......
; .......
; Paket empfangen
; Rückwandeln
MyTransceiver\R_Import(*Mem, MemSize)
Debug MyTransceiver\R_GetByte("flag")
Debug MyTransceiver\R_GetString("user")
Debug MyTransceiver\R_GetString("password")
Debug MyTransceiver\R_GetDouble("para_2")
Das ganze ist extrem dynamisch. Ein Server könnte Protokoll - Aktualisierungen an Clients übertragen, und diese könnten auf das neue Protokoll Umschalten ohne sich neustarten zu müssen, genauso umgekehrt!
Das übertragene Protokoll an sich ist binär, so fällt nicht viel Overhead an.
Das ganze ist noch etwas experimentell und es können noch Fehler auftreten, es ist verdammt viel frischer Code. Auch ist das ganze noch nicht vollständig dokumentiert. Über gefundene Bugs, Feature-Requests, konstruktive Kritik usw. freu ich mich immer
Download im 1. Post
Gruß, Alex