Hallo Andy,
aus deiner Rückfrage schließe ich, dass ich mich nicht verständlich genug ausgedrückt habe. Für die Kommunikation definierst du dir einen universellen Puffer:
Delphi-Quellcode:
type
PBuffer = ^TBuffer;
TBuffer = record
Size: Cardinal;
Data: array [0..0] of Byte;
end;
Intern kannst du mit beliebigen Puffern arbeiten, so auch mit deinem Record RNachricht. Ich würde diese Records als Klassen ausbilden. Was du dir dann aber unbedingt noch schreiben musst, dass sind Marshalling (und Unmarshalling) -Routinen, die deine Daten für den Versand umformen:
Delphi-Quellcode:
type
IMarshal = interface(IInterface)
procedure Marshal(var buffer: PBuffer);
procedure Unmarshal(const buffer: PBuffer);
end;
TNachricht = class(TInterfacedObject, IMarshal)
Befehl: string;
Text: string;
Nickname: string;
// IMarshal
procedure Marshal(var buffer: PBuffer);
procedure Unmarshal(const buffer: PBuffer);
end;
Die Marshalling-Prozedur könnte dann so aussehen:
Delphi-Quellcode:
procedure TNachricht.Marshal(var buffer: PBuffer);
var
msg: string;
size: Cardinal;
begin
msg := Befehl + sLineBreak + Text + sLineBreak + Nickname;
size := SizeOf(buffer.Size) + Length(msg);
GetMem(buffer, size);
buffer.Size := size;
Move(msg[1], buffer.Data, size);
end;
An der Unmarshalling-Prozedur kannst du dich ja mal versuchen.
Alles nur getippt und nicht getestet.
Freundliche Grüße