Einzelnen Beitrag anzeigen

eegoar

Registriert seit: 7. Aug 2008
6 Beiträge
 
#1

Indy: Verbindungen eine ID zuweisen

  Alt 4. Nov 2013, 20:00
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.
  Mit Zitat antworten Zitat