Hej.
"Filibaba brusk" <skod@aha.skod> skrev i en meddelelse
news:hf7x6.169$ph5.20247@news101.telia.com...
> jeg bruger standard internet TServerSocket. hvor jeg gerne vil have hver
> tilslutning (ServerSocket.Socket.Connections[..]) til at have en ekstra
> variabel, fx. en string
Jeg går ud fra at du har lavet "programmet", så går planlægningen lidt...
-
Nå men det nemmeste i dit tilfælde er som jeg nævnte nok at lave din egen
klasse,
vi kalder den TClientThread.
interface
....
TForm1 = class(TForm) //din oprindelige form
srv: TServerSocket;
private
ClientList: TList;
procedure UpdateClientList;
....
TClientThread = class(TObject) //vores nye klasse til at holde styr på
forbindelserne
ClientStr: string;
ClientIndex: integer;
end;
ClientStr er den ekstra streng du gerne vil have.
ClientIndex er indekset i vores TList som indeholder objekterne
(forbindelserne).
Så kan vi holde styr på forbindelserne og din(e) streng(e).
Tilføj i din forms FormsCreate
procedure TForm1.FormCreate(Sender: TObject);
begin
ClientList:= TList.Create;
...
end;
Når klienten tilslutter sig server objektet opretter vi en ny instans
af vores egen klasse og tilføjer den til vores liste inkl. udfylder din
ekstra streng.
procedure TForm1.srvClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
var
Client: TClientThread;
begin
Client:= TClientThread.Create; //vores egen klasse
Client.ClientStr:=
format('Client # %d', [ClientList.Count]); //Din brugerdefinerede
string
Client.ClientIndex:= ClientList.Count; //her får klienten et index i
vores liste
Socket.Data:= Client; //her tilføjer vi forbindelsens data pointer vores
klasse
ClientList.Add(Client); //og tilføjer den til vores liste
end;
Når klienten disconnecter skal klassens selvfølgelig slettes igen og fjernes
fra vores liste.
procedure TForm1.srvClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
var
Client: TClientThread;
begin
Client:= Pointer(Socket.Data); //hent vores klasse fra klienten der
disconnecter
ClientList.Delete(Client.ClientIndex); //slet den fra vores liste
Client.Free;
Socket.Data := nil;
UpdateClientList; //dette er nødvendigt for at indekseringen forbliver
korrekt i vores liste
end;
procedure TForm1.UpdateClientList;
var
Client: TClientThread;
Idx: integer;
begin
for Idx:= 0 to pred(ClientList.Count) do
begin
Client:= ClientList.Items[Idx];
Client.ClientIndex:= Idx;
end;
end;
Ovenstående var et lille eks. på hvordan det _kan_ gøres.
Håber du kan bruge det, det virker i hvertfald.
Mvh.
Jan Pedersen
JPSoft DK
http://www.jpsoft.dk