Ich habe das ganze jetzt nochmal auf TCPIP Basis probiert:
Der Client:
Delphi-Quellcode:
procedure TForm6.Button3Click(Sender: TObject);
var
Maps : string;
LI : TListItem;
StrArr : TDynStringArray;
begin
if Form1.Client.Connected = false then
begin
Form1.Client.Connect(3000);
end;
Form1.Client.WriteLn('Maplist');
Maps := Form1.Client.ReadLn;
if Length(Maps) > 0 then
begin
Maplist.Clear;
StrArr := Explode('|', Maps);
LI := Form6.Maplist.Items.Insert(0);
LI.Caption := StrArr[1];
LI.SubItems.Add(StrArr[3]);
LI.SubItems.Add(StrArr[2]);
end;
Form1.Client.Disconnect;
end;
Der Server:
Delphi-Quellcode:
if StrArr[0] = 'Maplist' then
begin
ini:=TIniFile.create(ExtractFilePath(ParamStr(0))+ 'maplist.ini');
try
Anzahl := ini.ReadInteger('Maplist','Anzahl',0);
for i := 1 to Anzahl do
Maps := ini.ReadString('Maplist', IntToStr(i), '');
AThread.Connection.WriteLn('Maplist|'+Maps);
Sleep(100);
finally
ini.free;
end;
end;
Die Maplist:
Delphi-Quellcode:
[Maplist]
Anzahl=4
1=area_Fayt_51|D-FENS|29.07.09
2=Die_Sanduhr|D-FENS|29.07.09
3=Krossfire|D-FENS|29.07.09
4=Iron_Mountain|D-FENS|02.08.09
5=CenterWar|veCtor|17.07.09
6=WaterPath|veCtor|21.07.09
7=Maptest|RedShakal|08.08.09
8=newm_01|-|26.07.09
9=newm_02|-|26.07.09
10=newm_03|-|26.07.09
11=newm_04|-|26.07.09
12=mlti_01|-|10.08.09
13=mlti_02|-|10.08.09
14=mlti_03|-|10.08.09
15=mlti_04|-|10.08.09
16=mlti_05|-|10.08.09
17=mlti_06|-|10.08.09
18=mlti_07|-|10.08.09
19=mlti_08|-|10.08.09
20=mlti_09|-|10.08.09
21=mlti_10|-|10.08.09
22=mlti_11|-|10.08.09
23=mlti_12|-|10.08.09
24=mlti_13|-|10.08.09
25=mlti_14|-|10.08.09
26=mlti_15|-|10.08.09
Erklärung:
1. Client schickt Anfrage zum Server
2. Server wertet Anfrage aus
3. Server öffnet Map Datenbank ( Ini Datei )
4. Map liest Wert "Anzahl" aus der angibt, wieviele Maps vorhanden sind
5. Server arbeitet Map 1 bis Map (Wert von Anzahl) aus
Bis hierhin funktioniert alles soweit.
6. Server schickt Stringweise die Daten zum Client
7. Der Client schreibt jeden String in die Listview
Wo ist das Problem?
Beim Client kommt immer nur die letzte Map an.
In meinem Fall steht Anzahl auf 4, daher kommt nur Iron_Mountain|D-FENS|02.08.09 in der Listview an.
Ich hatte auch schon versucht die Anzahl in dem String mitzuschicken, aber das endete darin, das ich 3 Leerzeilen hatte und erst dann Map 4 auftauchte. Ich vermute es liegt daran das ich Readln öfter als 1x aufrufen muss aber leider bin ich mir nicht sicher wie ich das anstellen soll. Wie gesagt zählschleifen führen zu leerzeilen.