Einzelnen Beitrag anzeigen

Rudinii
(Gast)

n/a Beiträge
 
#3

AW: Versenden von Variablen via Socket

  Alt 5. Mär 2016, 10:33
Hab ich gemacht! Dankeschön War mir unsicher bei der Benutzung von AnsiEndsStr etc.
Jedoch tut sich mir ein viel größeres Problem auf:

Wenn ein User eine Nachricht schreibt(was beim Beitreten automatisch passiert) wird folgendes ausgeführt:
Delphi-Quellcode:
procedure TForm1.ChatServerClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
var
i,j:Integer;
msg:String;
begin


msg := Socket.ReceiveText;


if AnsiEndsStr('ist dem Chat beigetreten',msg) = true then
begin
  useronlineint := useronlineint + 1;
  useronlinestr[useronlineint] := (StringReplace(msg, 'ist dem Chat beigetreten', '', [rfReplaceAll]));
  memoUsers.Lines.clear;
  for j := Low(useronlinestr) to High(useronlinestr) do
    begin
      memoUsers.Lines.add(useronlinestr[j]);
    end;
end;

if AnsiEndsStr('hat den Chat verlassen',msg) = true then
begin
  //memoUsers.Lines.add(StringReplace(msg, 'hat den Chat verlassen', '', [rfReplaceAll])); //ENTFERNT IHN BEIM VERLASSEN
  useronlineint := useronlineint -1;
  useronlinestr[useronlineint] := '';
  memoUsers.Lines.clear;
  for j := Low(useronlinestr) to High(useronlinestr) do
    begin
      memoUsers.Lines.add(useronlinestr[j]);
    end;
end;


memoVerlauf.Lines.add(msg); //SENDET NACHRICHTEN AN ALLE USER
for i := 0 to ChatServer.Socket.ActiveConnections-1 do
  ChatServer.Socket.Connections[i].SendText(msg);
end;
Das Problem ist jetzt folgendes :
Nehmen wir 3 User mit den Namen A, B und C.
Treten diese nacheinander bei so steht im Array folgendes :

useronlinestr
[1]A
[2]B
[3]C

Die Variable useronlineint(Die Anzahl der Personen online) ist nun 3. Verlässt User 2 den Chat und verbindet sich wieder geschieht folgendes:

Im Array steht nun [1] A [2] [3]C
Die Anzahl der User online ist 2.
Tritt er wieder bei. So wird sein Name in useronlineint+1 geschrieben. Also in Array-Slot 3.
Damit sind alle 3 User verbunden und C aus der Liste gelöscht.
Wie kann ich es realisieren, dass C, wenn Slot 2 leer ist sofort auf diesen aufrückt?
LG Rudinii
  Mit Zitat antworten Zitat