Thema: Delphi on client read

Einzelnen Beitrag anzeigen

Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#7

Re: on client read

  Alt 6. Jun 2007, 11:29
Hi und erstmal Herzlich Willkommen in der DP

Das was Muetze meint ist, dass Du einfach die Daten, die Du mit OnClientRead empfängst pufferst. Damit umgehst Du Dein jetziges Problem. Dazu legst Du einfach eine String-Variable an, die global verfügbar ist. Wenn Du eine Klasse verwendest, so bietet sich eine private Instanzvariable (Variable einfach im Private-Abschnitt anlegen) an.
Beim Senden einer Botschaft hängst Du immer ein Zeichen ran, dass ihr Ende markiert. Sinnvoll ist es, dass Du also ein Zeichen nimmst, dass nicht in der Botschaft selbst erwartet wird. Häufig wird hier das Zeilenende Zeichen Carriage Return (CR) verwendet. Dein Senden hat also die Form:

Delphi-Quellcode:
procedure sendMessage(const txt: String);
var message: String;
begin
  message := txt + chr(13); // chr(13) = CR
  
  // jetzt die message senden
  ...
end;
Auf der anderen Seite weißt Du nun, das egal was gesendet wird immer mit dem Zeichen chr(13) endet. Empfängst Du jetzt einen String, ist der nur ein Teil der gesamten Botschaft, bis Du eben chr(13) findest. Was auch immer Du jetzt empfängst hängst Du einfach an den Puffer an. Der ist am Anfang leer, kommt etwas an, wird das einfach angehangen.
Nach jedem Anhängen kannst Du dann schauen, ob Du hier eine vollständige Botschaft findest. Das ist immer dann der Fall, wenn das Zeichen chr(13) im Puffer findest.

Delphi-Quellcode:
// Prüfen ob das Zeichen im String ist
if pos(chr(13), buffer) > 0 then
Was Du nun noch machen musst ist den Teilstring von Position 1 bis zum ersten Auftreten von chr(13) zu kopieren (das ist dann die empfangene Nachricht). Dazu gibt es den Copy-Befehl (einfach mal suchen, findest Du eine Menge zu). Zuguter Letzt einfach den Pufferinhalt durch den hinteren Teil des Strings (der nach dem ersten Chr(13) kommt) ersetzen. Das ist nötig, da Du natürlich auch einen zweiten String direkt im Anschluss empfangen kannst und davon kann dann auch ein Teil hinter dem Trennzeichen der ersten Nachricht landen.

Gruß Der Unwissende
  Mit Zitat antworten Zitat