Zitat von
Muetze1:
Ist genauso wie die Data Eigenschaft der TreeNodes oder die Tag Eigenschaft der Komponenten eine ungenutzte Eigenschaft die mitgeführt wird. Du kannst die Daten selber belegen. Somit kannst du im ClientConnect einen TMemoryStream anlegen und dessen Instanz in der Data Eigenschaft des Sockets vermerken und hast ihn somit immer sofort zur Verfügung.
jo das ist mal ne gute idee.
Zitat von
Muetze1:
Warum? Die Methode kann das Kommando und den Datenblock als Pointer auslesen und zurück geben. Wenn es kein Datenblock gibt, dann gibt es ein Nil zurück. Ob es einen Datenblock gibt, erkennt die Funktion unabhängig davon welches Kommando es ist, wenn die Gesamtlänge grösser als die Kommandolänge ist (plus 1, für das Byte der Kommandolänge). Ob das Kommando nun bekannt ist, das kannst du auch ausserhalb regeln und deine Funktion kannst du so schreiben - ohne das sie näheres Wissen.
naja dann ist das ja eigentlich das gleiche wie ich es bisher auch vorhabe. wenn es keinen Datenblock gibt, dann wird einfach 0 in die Datenblocklänge geschrieben und gut ist. da überträgt man sogar genau die gleiche anzahl an bytes
Zitat von
Muetze1:
Wenn du am Anfang einen Block hast, der nicht mit "lrt" beginnt, dann wurde zuviel oder zu wenig gesendet/ausgelesen. Daher müsstest du neu synchronisieren - also so lange auslesen bis du ein "lrt" findest. Aber rigeros löschen nicht, da du schon wieder Teile des nachfolgenden Blockes in dem MemoryStream haben kannst.
das zuviel/zuwenig ausgelesen wurde, kann ja eigentlich gar nicht vorkommen; ich lese ja erst dann aus dem MemoryStream aus, wenn alle Daten angekommen sind, und lösche die dann direkt aus dem Stream raus.
und zuviel oder zuwenig gesendet werden kann ja eigentlich auch nicht, dafür wird ja die Datenlänge übermittelt.
durch das weglöschen bis zum nächsten "lrt" wolle ich eigentlich verhindern, dass nicht die gesamte Warteschlange ins stocken gerät, wenn mal z.b. irgendein anderes programm was zu meinem Server hinschickt. ich würde mal sagen, wer sich nicht ans protokoll hält, ist selber schuld, oder?
Zitat von
Muetze1:
Kenne ich keine Methode, daher CopyFrom() und die Size Eigenschaft setzen.
wenn ich Dest.CopyFrom(Source) mache, wie ist das dann mit den Positionen, von denen / an die kopiert wird? die Delphi-Hilfe ist da nicht ganz eindeutig....
See my shadow changing, stretching up and over me.
Soften this old armor. Hoping I can clear the way
By stepping through my shadow, coming out the other side.
Step into the shadow. Forty six and two are just ahead of me.