Guten Abend.
Für ein Chatprogramm (mit den Indy10 Komponenten) möchte ich Daten über einen Clienten an einen Server senden und dieser soll die Daten an den richtigen Zielclienten weitersenden.
Der Ablauf ist wie folgt:
Der Client fragt an, wie viele Clienten sich dem Server bereits angeschlossen haben (bzw. wie viele aktive Verbindungen der Server gerade hat).
Anschließend muss der Client ein Passwort senden, damit er in die Nutzerliste im Server hineinkommt und ihm eine ID zugeordnet wird (also der Client empfängt eine Nutzernummer).
Das Problem ist jetzt das folgende:
Client1 loggt sich zuerst ein und wird Verbindung 1 des Servers. Anschließend loggt sich Client2 als Verbindung 2 und Client 3 als Verbindung 3 ein.
Client1 kann Daten an Client2 senden, indem beim Server die eigehenden Daten von Client1 an die zweite Verbindung vom Server gesendet werden. Loggt jetzt jedoch Client2 plötzlich aus oder die Verbindung von Client2 zum Server bricht unvorhergesehen ab, dann sendet Client1 die Daten an den Client3, was ich auf keinen Fall möchte.
Die Sendenprozedur des Servers sieht momentan so aus:
Delphi-Quellcode:
procedure TMain.serverDatenSenden(clientNummer: integer; m : TMemoryStream);
var
ContextList: TList;
i: Integer;
begin
ContextList := Main.ModulServer.Contexts.LockList;
try
for i := 0 to ContextList.Count - 1 do
begin
if clientNummer - 1 = i then
begin
try
TIdContext(ContextList[i]).Connection.IOHandler.Write(m, 0, true);
finally
end;
end;
end;
finally
Main.ModulServer.Contexts.UnlockList;
end;
end;
end;
Frage: Wie kann ich dieses Problem lösen? Ich möchte die Daten genau EINER bestimmten Verbindung zuordnen. Die Verbindung 2 vom IndyServer ist ja der 2. verbundene Client, bzw der dritte, wenn der zweite sich ausloggt.