Hallo,
meine Anwendung besteht aus einem Server und mehreren Clients, die Clients sollen bloß die Darstellung der Daten übernehmen. Der Server übernimmt alle Berechnungen. Damit die Kommunikation untereinander klappt habe ich mir folgendes Protokoll überlegt:
Der Client schickt eine Nachricht mit der Nummer der Funktion die aufgerufen werden soll an den Server, dieser meldet ein 'bereit' zurück und beginnt mit der Berechnung.
Wenn die Anwendung fertig ist, können das schon an die 100 verschiedene Funktionen werden die so aufgerufen werden sollen.
Delphi-Quellcode:
procedure TTCServer.IdTCPServerExecute(AContext: TIdContext);
var
msg: String;
begin
try
msg:= AContext.Connection.IOHandler.Readln;
log('Funktion ' + msg); // Clientauftrag in Log schreiben
case StrToInt(msg) of
100: begin // Versionsprüfung
AContext.Connection.IOHandler.WriteLn('#100'); // #100 = bereit
versionspruefung(AContext);
end;
150: begin // Datei empfangen
AContext.Connection.IOHandler.WriteLn('#100'); // #100 = bereit
datei_empfangen(AContext);
end;
151: begin // Datei senden
AContext.Connection.IOHandler.WriteLn('#100'); // #100 = bereit
datei_senden(AContext);
end;
else
begin
log('Anweisung ' + msg + ' existiert nicht');
AContext.Connection.IOHandler.WriteLn('#200'); // #200 = Fehler-Funktion existiert nicht
end;
end;
except
log('Konnte Clientanweisung nicht lesen.');
end;
end;
Ist das eine sinnvolle Lösung, verpackt man sowas noch in Klassen oder gibt es dazu einen ganz anderen Ansatz?
Da ich nur Hobbyprogrammierer bin, fehlt mir noch die Theorie zu diesem Thema.